def get_factory_servers()

in source/Tools Integration/MGN-Integration/Lambdas/lambda_mgn.py [0:0]


def get_factory_servers(waveid, accountid):
    try:
        # Get all Apps and servers from migration factory
        getserver = scan_dynamodb_server_table()
        servers = sorted(getserver, key = lambda i: i['server_name'])
        getapp = scan_dynamodb_app_table()
        apps = sorted(getapp, key = lambda i: i['app_name'])

        # Get Unique target AWS account and region
        aws_accounts = []
        for app in apps:
            if 'wave_id' in app and 'aws_accountid' in app and 'aws_region' in app:
                if str(app['wave_id']) == str(waveid):
                    if len(str(app['aws_accountid']).strip()) == 12 and str(app['aws_accountid']).isdigit():
                        target_account = {}
                        target_account['aws_accountid'] = str(app['aws_accountid']).strip()
                        target_account['aws_region'] = app['aws_region'].lower().strip()
                        target_account['servers'] = []
                        if accountid.strip() == 'All Accounts':
                            if target_account not in aws_accounts:
                                aws_accounts.append(target_account)
                        else:
                            if str(app['aws_accountid']).strip() == str(accountid).strip():
                                if target_account not in aws_accounts:
                                    aws_accounts.append(target_account)
                    else:
                        msg = "ERROR: Incorrect AWS Account Id for app: " + app['app_name']
                        log.error(msg)
                        return msg
        if len(aws_accounts) == 0:
            msg = "ERROR: Server list for wave " + waveid + " is empty...."
            log.error(msg)
            return msg

        # Get server list
        for account in aws_accounts:
            for app in apps:
                if 'wave_id' in app and 'aws_accountid' in app and 'aws_region' in app:
                    if str(app['wave_id']) == str(waveid):
                        if str(app['aws_accountid']).strip() == str(account['aws_accountid']):
                            if app['aws_region'].lower().strip() == account['aws_region']:
                                for server in servers:
                                    if 'app_id' in server:
                                        if server['app_id'] == app['app_id']:
                                            account['servers'].append(server)
            if len(account['servers']) == 0:
                msg = "ERROR: Server list for wave " + waveid + " and account: " + account['aws_accountid'] + " region: " + account['aws_region'] + " is empty...."
                log.error(msg)
                return msg
        return aws_accounts
    except botocore.exceptions.ClientError as error:
        if ":" in str(error):
            err = ''
            msgs = str(error).split(":")[1:]
            for msg in msgs:
                err = err + msg
            msg = "ERROR: " + err
            log.error(msg)
            return msg
        else:
            msg = "ERROR: " + str(error)
            log.error(msg)
            return msg