docs: 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