def lambda_handler()

in source/backend/lambda_ams_wig/lambda_ams_wig.py [0:0]


def lambda_handler(event, context):

    try:
        body = json.loads(event['body'])
        if 'userapitoken' not in body:
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': 'userapitoken is required'}
        if 'projectname' not in body:
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': 'projectname is required'}
        if 'waveid' not in body:
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': 'waveid is required'}
        if 'key_id' not in body:
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': 'AWS Credentials is required'}
        if 'secret' not in body:
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': 'AWS Credentials is required'}
    except Exception as e:
        print(e)
        return {'headers': {'Access-Control-Allow-Origin': '*'},
                'statusCode': 400, 'body': 'malformed json input'}
    print("")
    print("************************")
    print("* Login to CloudEndure *")
    print("************************")
    r = CElogin(body['userapitoken'], endpoint)

    if r is not None and "ERROR" in r:
        return {'headers': {'Access-Control-Allow-Origin': '*'},
                'statusCode': 400, 'body': r}
    
    if r is not None and "ERROR" in r:
                  return {'headers': {'Access-Control-Allow-Origin': '*'},
                          'statusCode': 400, 'body': r}
    
    ServerList = GetServerList(body['projectname'], body['waveid'], body['key_id'], body['secret'], session, headers, endpoint, HOST)
    print(ServerList)
    print("************************************")
    print("Creating a workload ingest RFC....")
    print("************************************")
    success_servers = ""
    failed_servers = ""
    for server in ServerList:
        if 'InstanceId' in server:
            if 'ams_vpc_id' not in server:
                msg = 'ams_vpc_id attribute for ' + server['server_name'] + ' does not exist'
                return {'headers': {'Access-Control-Allow-Origin': '*'},
                        'statusCode': 400, 'body': msg}
            if 'ams_subnet_id' not in server:
                msg = 'ams_subnet_id attribute for ' + server['server_name'] + ' does not exist'
                return {'headers': {'Access-Control-Allow-Origin': '*'},
                        'statusCode': 400, 'body': msg}
            if 'ams_securitygroup_ids' not in server:
                msg = 'ams_securitygroup_ids attribute for ' + server['server_name'] + ' does not exist'
                return {'headers': {'Access-Control-Allow-Origin': '*'},
                        'statusCode': 400, 'body': msg}
            msg = "WIG for " + server['server_name'] + '-' + server['InstanceId']
            para = {
                    "InstanceId":server['InstanceId'],
                    "TargetVpcId":server['ams_vpc_id'],
                    "TargetSubnetId":server['ams_subnet_id'],
                    "Name":msg,
                    "Description":msg,
                    "TargetInstanceType":server['instanceType'],
                    "TargetSecurityGroupIds": server['ams_securitygroup_ids']
                    }
            try:
                print("***************************************")
                print("Submitting the workload ingest RFC....")
                print("***************************************")
                ams_client = boto3.client('amscm', aws_access_key_id=body['key_id'], aws_secret_access_key=body['secret'])
                rfc = ams_client.create_rfc(ChangeTypeId="ct-257p9zjk14ija", ChangeTypeVersion="1.0",
                                            Title=msg, ExecutionParameters=json.dumps(para))
                result=ams_client.submit_rfc(RfcId=rfc['RfcId'])
                if result['ResponseMetadata']['HTTPStatusCode'] == 200:
                    success_servers = success_servers + server["server_name"] + ","
                else: 
                    failed_servers = failed_servers + server["server_name"] + ","
            except Exception as e:
               print(e)
               return {'headers': {'Access-Control-Allow-Origin': '*'},
                       'statusCode': 400, 'body': str(e)}
        else:
            msg = 'Target Instance for Server ' + server['server_name'] + ' does not exist'
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': msg}
    message1 = ""
    message2 = ""
    if len(failed_servers) > 0:
         failed_servers = failed_servers[:-1]
         message1 = "ERROR: " + " AMS Workload Ingest RFC submission failed for server: " + failed_servers
         if len(success_servers) > 0:
            success_servers = success_servers[:-1]
            message2 = "The AMS Workload Ingest RFC submission was successful for server: " + success_servers
            msg = message1 + ' | ' + message2
            print(msg)
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': msg}
         else:
            print(message1)
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 400, 'body': message1}
    elif len(success_servers) > 0:
            success_servers = success_servers[:-1]
            message2 = "The AMS Workload Ingest RFC submission was successful for server: " + success_servers
            print(message2)
            return {'headers': {'Access-Control-Allow-Origin': '*'},
                    'statusCode': 200, 'body': message2}