def ec2_pipeline_setup(
        generated=None,
        project='',
        settings=None,
        env='',
        pipeline_type='',
        region='',
        region_subnets=None,
):
    """Handles ec2 pipeline data setup

    Args:
        generated (gogoutils.Generator): Generated naming formats.
        project (str): Group name of application
        settings (dict): Environment settings from configurations.
        env (str): Deploy environment name, e.g. dev, stage, prod.
        pipeline_type (str): Type of Foremast Pipeline to configure.
        region (str): AWS Region to deploy to.
        region_subnets (dict): Subnets for a Region, e.g.
            {'us-west-2': ['us-west-2a', 'us-west-2b', 'us-west-2c']}.

    Returns:
        dict: Updated settings to pass to templates for EC2 info

    """
    data = copy.deepcopy(settings)
    user_data = generate_encoded_user_data(
        env=env,
        region=region,
        generated=generated,
        group_name=project,
        pipeline_type=pipeline_type,
    )

    # Use different variable to keep template simple
    instance_security_groups = sorted(DEFAULT_EC2_SECURITYGROUPS[env])
    instance_security_groups.append(generated.security_group_app)
    instance_security_groups.extend(settings['security_group']['instance_extras'])
    instance_security_groups = remove_duplicate_sg(instance_security_groups)

    LOG.info('Instance security groups to attach: %s', instance_security_groups)

    # check if scaling policy exists
    if settings['asg']['scaling_policy']:
        scalingpolicy = True
        LOG.info('Found scaling policy')
    else:
        scalingpolicy = False
        LOG.info('No scaling policy found')

    if settings['app']['eureka_enabled']:
        elb = []
    else:
        elb = [generated.elb_app]
    LOG.info('Attaching the following ELB: %s', elb)

    health_checks = check_provider_healthcheck(settings)

    # Use EC2 Health Check for DEV or Eureka enabled
    if env == 'dev' or settings['app']['eureka_enabled']:
        data['asg'].update({'hc_type': 'EC2'})
        LOG.info('Switching health check type to: EC2')

    # Aggregate the default grace period, plus the exposed app_grace_period
    # to allow per repo extension of asg healthcheck grace period
    hc_grace_period = data['asg'].get('hc_grace_period')
    app_grace_period = data['asg'].get('app_grace_period')
    grace_period = hc_grace_period + app_grace_period

    # TODO: Migrate the naming logic to an external library to make it easier
    #       to update in the future. Gogo-Utils looks like a good candidate
    ssh_keypair = data['asg'].get('ssh_keypair', None)
    if not ssh_keypair:
        ssh_keypair = '{0}_{1}_default'.format(env, region)
    LOG.info('SSH keypair (%s) used', ssh_keypair)

    if settings['app']['canary']:
        canary_user_data = generate_encoded_user_data(
            env=env,
            region=region,
            generated=generated,
            group_name=project,
            canary=True,
        )
        data['app'].update({
            'canary_encoded_user_data': canary_user_data,
        })

    data['asg'].update({
        'hc_type': data['asg'].get('hc_type').upper(),
        'hc_grace_period': grace_period,
        'ssh_keypair': ssh_keypair,
        'provider_healthcheck': json.dumps(health_checks.providers),
        'enable_public_ips': json.dumps(settings['asg']['enable_public_ips']),
        'has_provider_healthcheck': health_checks.has_healthcheck,
        'asg_whitelist': ASG_WHITELIST,
    })

    data['app'].update({
        'az_dict': json.dumps(region_subnets),
        'encoded_user_data': user_data,
        'instance_security_groups': json.dumps(instance_security_groups),
        'elb': json.dumps(elb),
        'scalingpolicy': scalingpolicy,
    })

    return data
def ec2_pipeline_setup ( generated = None , project = '' , settings = None , env = '' , pipeline_type = '' , region = '' , region_subnets = None , ) : data = copy . deepcopy ( settings ) user_data = generate_encoded_user_data ( env = env , region = region , generated = generated , group_name = project , pipeline_type = pipeline_type , ) instance_security_groups = sorted ( DEFAULT_EC2_SECURITYGROUPS [ env ] ) instance_security_groups . append ( generated . security_group_app ) instance_security_groups . extend ( settings [ 'security_group' ] [ 'instance_extras' ] ) instance_security_groups = remove_duplicate_sg ( instance_security_groups ) LOG . info ( 'Instance security groups to attach: %s' , instance_security_groups ) if settings [ 'asg' ] [ 'scaling_policy' ] : scalingpolicy = True LOG . info ( 'Found scaling policy' ) else : scalingpolicy = False LOG . info ( 'No scaling policy found' ) if settings [ 'app' ] [ 'eureka_enabled' ] : elb = [ ] else : elb = [ generated . elb_app ] LOG . info ( 'Attaching the following ELB: %s' , elb ) health_checks = check_provider_healthcheck ( settings ) if env == 'dev' or settings [ 'app' ] [ 'eureka_enabled' ] : data [ 'asg' ] . update ( { 'hc_type' : 'EC2' } ) LOG . info ( 'Switching health check type to: EC2' ) hc_grace_period = data [ 'asg' ] . get ( 'hc_grace_period' ) app_grace_period = data [ 'asg' ] . get ( 'app_grace_period' ) grace_period = hc_grace_period + app_grace_period ssh_keypair = data [ 'asg' ] . get ( 'ssh_keypair' , None ) if not ssh_keypair : ssh_keypair = '{0}_{1}_default' . format ( env , region ) LOG . info ( 'SSH keypair (%s) used' , ssh_keypair ) if settings [ 'app' ] [ 'canary' ] : canary_user_data = generate_encoded_user_data ( env = env , region = region , generated = generated , group_name = project , canary = True , ) data [ 'app' ] . update ( { 'canary_encoded_user_data' : canary_user_data , } ) data [ 'asg' ] . update ( { 'hc_type' : data [ 'asg' ] . get ( 'hc_type' ) . upper ( ) , 'hc_grace_period' : grace_period , 'ssh_keypair' : ssh_keypair , 'provider_healthcheck' : json . dumps ( health_checks . providers ) , 'enable_public_ips' : json . dumps ( settings [ 'asg' ] [ 'enable_public_ips' ] ) , 'has_provider_healthcheck' : health_checks . has_healthcheck , 'asg_whitelist' : ASG_WHITELIST , } ) data [ 'app' ] . update ( { 'az_dict' : json . dumps ( region_subnets ) , 'encoded_user_data' : user_data , 'instance_security_groups' : json . dumps ( instance_security_groups ) , 'elb' : json . dumps ( elb ) , 'scalingpolicy' : scalingpolicy , } ) return data
Handles ec2 pipeline data setup

    Args:
        generated (gogoutils.Generator): Generated naming formats.
        project (str): Group name of application
        settings (dict): Environment settings from configurations.
        env (str): Deploy environment name, e.g. dev, stage, prod.
        pipeline_type (str): Type of Foremast Pipeline to configure.
        region (str): AWS Region to deploy to.
        region_subnets (dict): Subnets for a Region, e.g.
            {'us-west-2': ['us-west-2a', 'us-west-2b', 'us-west-2c']}.

    Returns:
        dict: Updated settings to pass to templates for EC2 info