def multiprocessing_update()

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)