Wrapper for Mozilla's sops tool to work with encrypted configs and render them into a classic `.env` format
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.7 KiB

4 years ago
import click
import logging
from pprint import pprint
from .config import Config
from .transform import Transforms
from .vault import Vaults
from .vault import Stack as VaultStack
@click.group()
def cli():
"""
Tool for working with YAML-formatted config generation. Or something.
"""
pass
@cli.command()
@click.argument('input', type=click.File('rb'))
@click.argument('format')
@click.argument('output', type=click.File('wb'))
@click.option('-v', '--vault', 'vault', default='sops', required=False, multiple=True)
def transform(input, format, output, vault):
"""Transform INPUT into FORMAT format and output to OUTPUT
"""
logger = logging.getLogger("configs")
logger.info('Reading input config')
cfg = Config()
cfg.read(input)
logger.info('Initializing vaults')
vaults = []
for vault_name in vault:
logger.debug(vault_name)
vault_config = cfg.get_vault_config(vault_name)
vault_obj = Vaults[vault_name](vault_config)
vaults.append(vault_obj)
vault_stack = VaultStack(vaults)
logger.info('Initializing transform')
transform_config = cfg.get_transform_config(format)
transform = Transforms[format](transform_config, vault_stack)
logger.info('Transforming')
result = transform.transform(cfg)
print(result)
@cli.command()
@click.argument('input', type=click.File('rb'))
def provision(input):
"""Read INPUT and store in the vault service
"""
logger = logging.getLogger("configs")
logger.info('Reading config')
cfg = Config()
cfg.read(input)
logger.info('Fetching vault config')
vault_config = cfg.get_vault_config("aws")
vault = VaultAws(vault_config)
logger.info('Storing')
vault.provision(cfg.get_merged())