Esempio n. 1
0
def generateConfigComposeDev(envName='dev',
                             path='.',
                             logger=None,
                             secretEnv=None,
                             keyEnv=None):
    configInputPath = '{}/{}/docker-compose.yml'.format(path, envName)
    if logger:
        logger.info(
            'Reading configuration from {} file'.format(configInputPath))

    transformer = ComposeTransformer(configInputPath)
    normalized_keys = transformer.ingest_containers()

    secrets = loadSecrets(secretEnv, keyEnv)
    awsKey = secrets["awsKey"]
    awsSecret = secrets["awsSecret"]

    services = {}
    for service in normalized_keys:
        services[service["name"]] = service
        service.pop("name", None)
    normalized_keys = services

    omigostService = normalized_keys["omigost"]
    omigostService["volumes"] = ["..:/opt/app/omigost"]
    omigostService["image"] = "openjdk:11"
    springArgs = " ".join([
        "--spring.datasource.url=jdbc:postgresql://postgres:5432/docker_dev",
        "--spring.datasource.username=admin",
        "--spring.datasource.password=admin1",
        "--localstack.postgres.useExternal=true",
        "--localstack.services.useExternal=true",
        "--localstack.services.ip=localstack",
        "--localstack.services.sns.port=4575",
        "--localstack.services.dumb.port=4567",
        "--localstack.localAWSBudgets.useExternal=true",
        "--localstack.localAWSBudgets.ip=budgets",
        "--localstack.localAWSBudgets.port=5000",
        "--localstack.motocker.iam.useExternal=true",
        "--localstack.motocker.iam.ip=iam",
        "--localstack.motocker.iam.port=5000",
        "--localstack.motocker.ec2.useExternal=true",
        "--localstack.motocker.ec2.ip=ec2",
        "--localstack.motocker.ec2.port=5000",
        "--localstack.motocker.organizations.useExternal=true",
        "--localstack.motocker.organizations.ip=organizations",
        "--localstack.motocker.organizations.port=5000"
    ])

    commandStr = ("./gradlew bootRun -PspringArgs='{}' && ".format(springArgs)
                  * 50) + "echo FINISHED"
    omigostService["command"] = "sh -c \"cd /opt/app/omigost && {}\"".format(
        commandStr)
    omigostService["environment"] = [
        "AWS_ACCESS_KEY={}".format(awsKey),
        "AWS_SECRET_KEY={}".format(awsSecret)
    ]
    omigostService["ports"].append("8100:8100")

    compose_config = {"version": "3", "services": normalized_keys}

    if logger:
        logger.info(
            'Generated configuration from {} file'.format(configInputPath))
    return yaml.dump(compose_config, default_flow_style=False)
Esempio n. 2
0
def generateConfigAWS(envName='dev',
                      path='.',
                      logger=None,
                      secretEnv=None,
                      keyEnv=None):
    configInputPath = '{}/{}/docker-compose.yml'.format(path, envName)
    if logger:
        logger.info(
            'Reading configuration from {} file'.format(configInputPath))

    transformer = ComposeTransformer(configInputPath)
    normalized_keys = transformer.ingest_containers()

    secrets = loadSecrets(secretEnv, keyEnv)
    awsKey = secrets["awsKey"]
    awsSecret = secrets["awsSecret"]

    global_envs = [{
        'name': 'AWS_ACCESS_KEY',
        'value': awsKey
    }, {
        'name': 'AWS_SECRET_KEY',
        'value': awsSecret
    }]

    ecs_config = json.loads(ECSTransformer().emit_containers(normalized_keys))
    ecs_config['AWSEBDockerrunVersion'] = 2
    for container in ecs_config['containerDefinitions']:
        container['cpu'] = 1
        container['essential'] = True
        container['memory'] = 525
        container['name'] = container['hostname'] = container['container_name']
        if 'links' in container:
            newLinks = []
            for linkSpec in container['links']:
                newLinks.append("{}:{}".format(linkSpec, linkSpec))
            container['links'] = newLinks
        if 'ports' in container:
            newPorts = []
            for portSpec in container['ports']:
                portTokens = portSpec.split(':')
                newPorts.append({
                    "hostPort": portTokens[0],
                    "containerPort": portTokens[1]
                })
            container['portMappings'] = newPorts
            container.pop('ports')
        newEnv = global_envs + [{
            'name': 'HOSTNAME',
            'value': container['container_name']
        }]
        if 'environment' in container:
            if type(container['environment']) is list:
                for var in container['environment']:
                    varTokens = var.split('=')
                    newEnv.append({
                        'name': varTokens[0],
                        'value': varTokens[1]
                    })
            else:
                for k, v in container['environment'].items():
                    newEnv.append({'name': k, 'value': v})
        container['environment'] = newEnv

    if logger:
        logger.info(
            'Generated configuration from {} file'.format(configInputPath))
    return json.dumps(ecs_config, indent=4, sort_keys=True)