Metadata-Version: 2.1
Name: kompos
Version: 0.2.20
Summary: Kompos - k8s cloud automation
Home-page: https://github.com/adobe/kompos
Author: Adobe
Author-email: noreply@adobe.com
License: Apache2
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Markup :: HTML
Requires-Python: >=3.5
Description-Content-Type: text/markdown
Requires-Dist: backports.functools-lru-cache (==1.6.1)
Requires-Dist: boto3 (==1.13.12)
Requires-Dist: botocore (==1.16.12)
Requires-Dist: certifi (==2020.4.5.1)
Requires-Dist: chardet (==3.0.4)
Requires-Dist: deepmerge (==0.1.0)
Requires-Dist: docutils (==0.15.2)
Requires-Dist: fastjsonschema (==2.14.4)
Requires-Dist: himl (==0.5.5)
Requires-Dist: hvac (==0.10.1)
Requires-Dist: idna (==2.9)
Requires-Dist: jmespath (==0.10.0)
Requires-Dist: lru-cache (==0.2.3)
Requires-Dist: pathlib2 (==2.3.5)
Requires-Dist: python-dateutil (==2.8.1)
Requires-Dist: pyyaml (==5.1)
Requires-Dist: requests (==2.23.0)
Requires-Dist: s3transfer (==0.3.3)
Requires-Dist: simpledi (==0.3)
Requires-Dist: six (==1.14.0)
Requires-Dist: urllib3 (==1.25.9) ; python_version != "3.4"

# kompos
[![Build Status](https://www.travis-ci.com/adobe/kompos.svg?token=8uHqfhgsxdvJ93qWAxhn&branch=master)](https://www.travis-ci.com/adobe/kompos) [![Docker pull](https://img.shields.io/docker/pulls/adobe/kompos)](https://hub.docker.com/r/adobe/kompos) [![](https://images.microbadger.com/badges/version/adobe/kompos.svg)](https://microbadger.com/images/adobe/kompos "Get your own version badge on microbadger.com") [![License](https://img.shields.io/github/license/adobe/kompos)](https://github.com/adobe/kompos/blob/master/LICENSE) [![PyPI pyversions](https://img.shields.io/pypi/pyversions/kompos.svg)](https://pypi.python.org/pypi/kompos/)


![kompos](img/kompos.png)

**Kompos** is a configuration driven tool for provisioning and managing
Kubernetes infrastructure across AWS and Azure. It uses a hierarchical folder
structure and yaml files to store and generate configurations, with pluggable
compositions that encapsulates the infrastructure code and state. Terraform and
helmfile are supported as provisioners.

Below is a graphical representation of the data flow.

![kompos-data-flow](img/kompos-diagram.svg)

## Installation

_**NOTE**: Only Python 3 is supported._

### PyPI 

```bash
pip install kompos
```

### Locally for development

Using virtualenv

```bash
pip install virtualenv
virtualenv .env
source .env/bin/activate
(env) cd kompos/
(env) pip install --editable .
```

## Hierarchical configuration

Kompos leverages [himl](https://github.com/adobe/himl) to provide a
[hiera](https://puppet.com/docs/puppet/latest/hiera_intro.html#concept-7256)-like
configuration structure.

Checkout the [examples](./examples) for more information.

## Nix integration

With kompos you can leverage [nix](https://nixos.org/nix/) to pin your
infrastructure code (i.e terraform & helmfile releases) on a specific version.
This enables you to finely control your deployments and use different
infrastructure versions per environment, cluster etc.

#### Prerequisites

Install `nix` and `nix-prefetch-git`.

```bash
$ curl https://nixos.org/nix/install | sh

# It's used to automatically derive the commit sha & the hash of the repo,
# in case those are not provided by the configuration.
$ nix-env -f '<nixpkgs>' -iA nix-prefetch-git
```

#### Configuration

Use the integration with the `--nix` flag with each command. Below are the
necessary parts of komposconfig regarding nix & versioning:

```yaml
terraform:
  # This is the place to look for the terraform repo locally.
  # Used as the default if nix is not enabled. 
  local_path: '/home/user/terraform-stack'

  # This is needed in case the modules are not in the root of the repo.
  root_path: 'src/terraform'

  repo:
    # This will be the name of the nix derivation for terraform.
    name: 'terraform-stack'

    # The repo we would like to version.
    url:  "git@github.com:my-org/terraform-stack.git"

# Likewise for helmfile.
helmfile:
  local_path: '/home/user/helmfile-releases'
  root_path: 'src/helmfiles'

  repo:
    name: 'helmfile-releases'
    url:  "git@github.com:my-org/helmfile-releases.git"
```

And in the hierarchical configuration you'll need the following keys:

```yaml
infrastructure:
  terraform:
    version: "0.1.0" # A git tag or a commit sha.

    # This is an optional field.
    # The sha256 hash of the repo provides data integrity and ensures that we
    # always get the same input. 
    # 
    # It can be omitted when you're using a tag that is periodically updated. 
    # (e.g in a dev/nightly environment). Since this is a mandatory field for nix, 
    # nix-prefetch-git will be used as a fallback to caclulate it.
    sha256: "ab9190b0ecc8060a54f1fac7de606e6b2c4757c227f2ce529668eb145d9a9516"

  # Likewise for helmfile.
  helmfile:
    version: "0.1.0"
    sha256: "139cd5119d398d06f6535f42d775986a683a90e16ce129a5fb7f48870613a1a5"
```

### Docker Image


## License
[Apache License 2.0](/LICENSE)




