in source/Tools Integration/MGN-Integration/Lambdas/lambda_mgn_template.py [0:0]
def multiprocessing_update(serverlist, creds, region, action, return_dict, status_list):
try:
target_account_session = lambda_mgn.get_session(creds, region)
ec2_client = target_account_session.client('ec2', region)
iam_client = target_account_session.client('iam')
mgn_client = target_account_session.client("mgn", region_name=region, config=boto_config)
validated_count = 0
for factoryserver in serverlist:
# Get Launch template latest version and data
launch_template_latest_ver = ec2_client.describe_launch_templates(LaunchTemplateIds=[factoryserver['launch_template_id']])['LaunchTemplates'][0]['LatestVersionNumber']
launch_template_data_latest = ec2_client.describe_launch_template_versions(LaunchTemplateId=factoryserver['launch_template_id'], Versions=[str(launch_template_latest_ver)])['LaunchTemplateVersions'][0]['LaunchTemplateData']
new_launch_template = ec2_client.describe_launch_template_versions(LaunchTemplateId=factoryserver['launch_template_id'], Versions=[str(launch_template_latest_ver)])['LaunchTemplateVersions'][0]['LaunchTemplateData']
# Verify Launch templates inputs
subnet_vpc = ""
subnet_vpc_test = ""
# Verify Subnets and SGs
if 'subnet_IDs_test' in factoryserver and 'subnet_IDs' in factoryserver:
if len(factoryserver['subnet_IDs_test']) > 0 and len(factoryserver['subnet_IDs']) > 0:
verify_subnet_test = ec2_client.describe_subnets(SubnetIds=factoryserver['subnet_IDs_test'])
subnet_vpc_test = verify_subnet_test['Subnets'][0]['VpcId']
verify_subnet = ec2_client.describe_subnets(SubnetIds=factoryserver['subnet_IDs'])
subnet_vpc = verify_subnet['Subnets'][0]['VpcId']
else:
msg = "ERROR: Subnet_IDs or Subnet_IDs_test attribute is empty for server: " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
else:
msg = "ERROR: Subnet_IDs or Subnet_IDs_test does not exist for server: " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
if 'securitygroup_IDs_test' in factoryserver and 'securitygroup_IDs' in factoryserver:
if len(factoryserver['securitygroup_IDs_test']) > 0 and len(factoryserver['securitygroup_IDs']) > 0:
verify_sgs_test = ec2_client.describe_security_groups(GroupIds=factoryserver['securitygroup_IDs_test'])
for sg in verify_sgs_test['SecurityGroups']:
if subnet_vpc_test != sg['VpcId']:
msg = "ERROR: Subnet and Security groups must be in the same VPC: " + verify_subnet_test['Subnets'][0]['SubnetId'] + ", " + sg['GroupId']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
verify_sgs = ec2_client.describe_security_groups(GroupIds=factoryserver['securitygroup_IDs'])
for sg in verify_sgs['SecurityGroups']:
if subnet_vpc != sg['VpcId']:
msg = "ERROR: Subnet and Security groups must be in the same VPC: " + verify_subnet['Subnets'][0]['SubnetId'] + ", " + sg['GroupId']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
else:
msg = "ERROR: securitygroup_IDs or securitygroup_IDs_test attribute is empty for server: " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
else:
msg = "ERROR: securitygroup_IDs or securitygroup_IDs_test does not exist for server: " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
if 'server_os_family' in factoryserver:
if factoryserver['server_os_family'].lower().strip() != 'windows' and factoryserver['server_os_family'].lower().strip() != 'linux':
msg = "ERROR: server_os_family only supports Windows or Linux - " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
else:
msg = "ERROR: server_os_family does not exist for server - " + factoryserver['server_name']
log.error("Pid: " + str(os.getpid()) + " - " + msg)
return_dict[factoryserver['server_name']] = msg
break
# Verify Instance type
if 'instanceType' in factoryserver:
verify_instance_type = ec2_client.describe_instance_types(InstanceTypes=[factoryserver['instanceType']])
mgn_client.update_launch_configuration(targetInstanceTypeRightSizingMethod='NONE', sourceServerID=factoryserver['source_server_id'])
else:
mgn_client.update_launch_configuration(targetInstanceTypeRightSizingMethod='BASIC', sourceServerID=factoryserver['source_server_id'])
# Verify IAM instance profile
verify_instance_profile = []
if 'iamRole' in factoryserver:
verify_instance_profile = iam_client.get_instance_profile(InstanceProfileName=factoryserver['iamRole'])
create_template = create_launch_template(factoryserver, action, new_launch_template, launch_template_data_latest, mgn_client, ec2_client, verify_instance_profile, launch_template_latest_ver)
if create_template is not None and "ERROR" in create_template:
log.error("Pid: " + str(os.getpid()) + " - " + str(create_template))
return_dict[factoryserver['server_name']] = create_template
else:
validated_count = validated_count + 1
status_list.append(validated_count)
except Exception as error:
if ":" in str(error):
err = ''
msgs = str(error).split(":")[1:]
for msg in msgs:
err = err + msg
log.error("Pid: " + str(os.getpid()) + " - ERROR: " + err)
return_dict[factoryserver['server_name']] = "ERROR: " + err
else:
log.error("Pid: " + str(os.getpid()) + " - ERROR: " + str(error))
return_dict[factoryserver['server_name']] = "ERROR: " + str(error)