in syndicate/core/transform/cloudformation/converter/cf_batch_compenv_converter.py [0:0]
def convert(self, name, meta):
logic_name = batch_compute_env_logic_name(name)
comp_env = batch.ComputeEnvironment(logic_name)
state = meta.get('state')
if not state:
state = DEFAULT_STATE
iam_conn = self.resources_provider.iam().iam_conn
role_name = meta.get('service_role')
if not role_name:
role_name = DEFAULT_SERVICE_ROLE
default_role = iam_conn.get_role(role_name=role_name)
if not default_role:
default_role = self.get_resource(iam_role_logic_name(role_name))
if not default_role:
_LOG.warn("Default Service Role '%s' not found "
"and will be added to the template.", role_name)
allowed_account = iam_conn.resource.CurrentUser().arn.split(':')[4]
role_converter = CfIamRoleConverter(
template=self.template,
config=self.config,
resources_provider=self.resources_provider)
role_converter.convert(role_name, {
'allowed_accounts': allowed_account,
'principal_service': 'batch'
})
default_role = self.get_resource(iam_role_logic_name(role_name))
policy = iam_conn.get_policy_arn(role_name)
if not policy:
raise AssertionError(
'IAM Policy "{}" does not exist'.format(role_name))
CfIamRoleConverter.attach_managed_policy(role=default_role,
policy=policy)
role = iam_conn.check_if_role_exists(role_name=role_name)
if not role:
role = self.get_resource(iam_role_logic_name(role_name))
if not role:
raise AssertionError('IAM role "{}" does not exist.'
.format(role_name))
comp_env.ServiceRole = role.get_att('Arn')
else:
comp_env.ServiceRole = role
compute_res = meta.get('compute_resources')
if compute_res:
tags = compute_res.get('tags', {}).copy()
instance_role = compute_res.get('instance_role')
compute_res = dict_keys_to_upper_camel_case(compute_res)
if tags:
compute_res['Tags'] = tags
if instance_role:
instance_profile = self.get_resource(
iam_instance_profile_logic_name(instance_role))
if instance_profile:
compute_res['InstanceRole'] = instance_profile.ref()
comp_env.ComputeResources = batch.ComputeResources.from_dict(
title=None, d=compute_res)
comp_env.Type = meta['compute_environment_type']
comp_env.ComputeEnvironmentName = name
comp_env.State = state
self.template.add_resource(comp_env)