Easily manage your tfvars config via Mimiron


Keywords
deployment, git, terraform
License
Other
Install
pip install mimiron==0.4.2

Documentation

Mimiron

Build Status PyPI version

Welcome to mimiron!

Mimiron is one of the Titanic Watchers. He once resided at the Temple of Invention, but is absent during the time of Loken's rebellion.

Mimiron is a CLI tool that aims provide a better workflow when manging Terraform variables.

When all of your Terraform config is completely modular, the only sane way to manage variables is to store them inside a variables.json file and pass that along when you run terraform apply -var-file=variables.json... but where do you store variables.json and how can you easily make changes?

Our approach is to store non-sensitive variables inside the same repository as our Terraform config. Sensitive variables like your AWS secret and master db password are stored elsewhere then accessed later whether it be via AWS KMS or Hashicorp Vault. The purpose of this project is to manage non-sensitive variables.

We want to make simple tasks such as bumping an image version simple and Mimiron is a small CLI tool that does that. Mimiron provides a few commands to help automate the cumbersome tasks away.

Installation

sudo pip install --upgrade mimiron

... or if you're using a Mac (see here why):

sudo pip install --upgrade --ignore-installed six mimiron

mim requires a configuration file at ~/.mimiron.json before it can work. Take a look at ./data/example_config.json for an example.

Root Key Sub Key Description
terraformRepositories(array)
path(string) The path to a Terraform repository (cannot be relative but may contain ~).
defaultEnvironment(string) Projects representing multiple environments have a default (e.g. staging, production).
defaultGitBranch(string) Some mim commands will check if the current branch is this before running.
dockerhub(object)
username(string) The username to your DockerHub account.
password(string) The password to your DockerHub account.
organization(string) The organization your DockerHub belongs to (username if none).

Assumptions

  • mim requires that you store your Docker image aritfacts on DockerHub. No support for other registries exist at this time.
  • Terraform configuration is expected to exist at /project/terraform/.
  • Terraform variables (tfvars) are stored in JSON files inside a directory named /project/terraform/tfvars/.
  • Docker image artifacts are named service_name_image e.g. web_marketing_image.

Usage

>>> mim --help
mimiron.py

usage:
    mim (bump|b) <service> [--env=<env>] [--no-push]
    mim (status|s) [--env=<env>]
    mim (deploy|d) [--env=<env>] [--no-push] [--empty-commit]

commands:
    (bump|b)        bumps the <service> with an image <artifact>
    (status|s)      shows the currently used artifact id for <env>
    (deploy|d)      triggers a deploy a chosen deployment repository

arguments:
    <artifact>      the deployment artifact (Docker image) we are pushing
    <service>       the application we're targeting
    --env=<env>     overrides the default repo environment
    --empty-commit  creates an empty commit on the chosen repository

options:
    --no-push       make local changes without pushing to remote
    -h --help       shows this
    -v --version    shows version

Development

git clone git@github.com:ImageIntelligence/mimiron.git && cd mimiron/
mkvirtualenv mimiron && workon mimiron

python setup.py develop && pip install -r requirements.txt

python mimiron/command_line.py --help

Testing

python -m pytest test/

Deployment

pip install twine
python setup.py sdist
twine upload dist/mimiron-0.4.0.tar.gz

NOTE: You might get warnings around having a misconfigured ~/.pypirc file. Create one if you haven't and make sure it contains:

[pypi]
username = <username>
password = <password>

Ask another developer for the username and password.