def load_to_ddb()

in reference-artifacts/Custom-Scripts/Update-Scripts/v1.3.8_to_v1.5.0/update.py [0:0]


def load_to_ddb(accel_prefix, region, config):
    vpc_table_name = '%scidr-vpc-assign' % accel_prefix
    subnet_table_name = '%scidr-subnet-assign' % accel_prefix
    dynamodb = boto3.resource('dynamodb', region)
    vpc_table = dynamodb.Table(vpc_table_name)
    subnet_table = dynamodb.Table(subnet_table_name)
    i = 1
    j = 1
    account_configs = copy.deepcopy(config['mandatory-account-configs'])
    account_configs.update(config.get('workload-account-configs', {}))
    for config_section in load_db_sections.keys():
        for key_name, section_config in config[config_section].items():
            if not section_config.get('vpc'):
                continue
            for vpc_config in section_config['vpc']:
                account_keys = []
                if vpc_config.get('cidr-src') == 'dynamic':
                    continue
                vpc_region = region if vpc_config['region'] == '${HOME_REGION}' else vpc_config['region']
                if vpc_config['deploy'] != 'local' and config_section == 'organizational-units':
                    account_ou_key = "account/%s" % vpc_config['deploy']
                else:
                    account_ou_key = "%s/%s" % (config_sections[config_section], key_name)
                if vpc_config['deploy'] == 'local' and config_section == 'organizational-units':
                    account_keys = [key for key, value in account_configs.items() if value['ou'] == key_name]
                if vpc_config['name'] == '${CONFIG::OU_NAME}':
                    vpc_name = key_name
                else:
                    vpc_name = vpc_config['name']
                print("Adding CIDR for VPC %s in table %s" %
                      (vpc_name, vpc_table_name))
                cidrs = [cidr for cidr in vpc_config['cidr']] if type(vpc_config['cidr']) == list else [
                    {"value": vpc_config['cidr'], "pool": "main"}]
                if vpc_config['deploy'] == 'local' and config_section == 'organizational-units':
                    for cidr_index, cidr_object in enumerate(cidrs):
                        vpc_table.put_item(
                            Item={
                                "account-ou-key": 'organizational-unit/%s' % key_name,
                                "cidr": cidr_object['value'],
                                "id": "%s" % i,
                                "pool": cidr_object['pool'],
                                "region": vpc_region,
                                "requester": "Manual",
                                "status": "assigned",
                                "vpc-name": vpc_name,
                                "vpc-assigned-id": cidr_index,
                            }
                        )
                        i = i + 1
                    for account_key in account_keys:
                        for cidr_index, cidr_object in enumerate(cidrs):
                            vpc_table.put_item(
                                Item={
                                    "account-ou-key": 'account/%s' % account_key,
                                    "cidr": cidr_object['value'],
                                    "id": "%s" % i,
                                    "pool": cidr_object['pool'],
                                    "region": vpc_region,
                                    "requester": "Manual",
                                    "status": "assigned",
                                    "vpc-name": vpc_name,
                                    "vpc-assigned-id": cidr_index,
                                }
                            )
                            i = i + 1
                else:
                    for cidr_index, cidr_object in enumerate(cidrs):
                        vpc_table.put_item(
                            Item={
                                "account-ou-key": account_ou_key,
                                "cidr": cidr_object['value'],
                                "id": "%s" % i,
                                "pool": cidr_object['pool'],
                                "region": vpc_region,
                                "requester": "Manual",
                                "status": "assigned",
                                "vpc-name": vpc_name,
                                "vpc-assigned-id": cidr_index,
                            }
                        )
                        i = i + 1
                if vpc_config.get('cidr2'):
                    # Not handling new config for cidr2 since we don't have that in new config
                    print("Adding CIDR2 for VPC %s in table %s" %
                          (vpc_config['name'], vpc_table_name))
                    if type(vpc_config['cidr2']) == list:
                        for cidr_index, cidr in enumerate(vpc_config['cidr2']):
                            if vpc_config['deploy'] == 'local' and config_section == 'organizational-units':
                                vpc_table.put_item(
                                    Item={
                                        "account-ou-key": 'organizational-unit/%s' % key_name,
                                        "cidr": cidr,
                                        "id": "%s" % i,
                                        "pool": pools['sub'],
                                        "region": vpc_region,
                                        "requester": "Manual",
                                        "status": "assigned",
                                        "vpc-name": vpc_config['name'],
                                        "vpc-assigned-id": cidr_index + 1,
                                    }
                                )
                                i = i + 1
                                for account_key in account_keys:
                                    vpc_table.put_item(
                                        Item={
                                            "account-ou-key": "account/%s" % account_key,
                                            "cidr": cidr,
                                            "id": "%s" % i,
                                            "pool": pools['sub'],
                                            "region": vpc_region,
                                            "requester": "Manual",
                                            "status": "assigned",
                                            "vpc-name": vpc_config['name'],
                                            "vpc-assigned-id": cidr_index + 1,
                                        }
                                    )
                                    i = i + 1
                            else:
                                vpc_table.put_item(
                                    Item={
                                        "account-ou-key": account_ou_key,
                                        "cidr": cidr,
                                        "id": "%s" % i,
                                        "pool": pools['sub'],
                                        "region": vpc_region,
                                        "requester": "Manual",
                                        "status": "assigned",
                                        "vpc-name": vpc_config['name'],
                                        "vpc-assigned-id": cidr_index + 1,
                                    }
                                )
                                i = i + 1
                    else:
                        if vpc_config['deploy'] == 'local' and config_section == 'organizational-units':
                            vpc_table.put_item(
                                Item={
                                    "account-ou-key": 'organizational-unit/%s' % key_name,
                                    "cidr": vpc_config['cidr2'],
                                    "id": "%s" % i,
                                    "pool": pools['sub'],
                                    "region": vpc_region,
                                    "requester": "Manual",
                                    "status": "assigned",
                                    "vpc-name": vpc_config['name'],
                                    "vpc-assigned-id": 1,
                                }
                            )
                            i = i + 1
                            for account_key in account_keys:
                                vpc_table.put_item(
                                    Item={
                                        "account-ou-key": "account/%s" % account_key,
                                        "cidr": vpc_config['cidr2'],
                                        "id": "%s" % i,
                                        "pool": pools['sub'],
                                        "region": vpc_region,
                                        "requester": "Manual",
                                        "status": "assigned",
                                        "vpc-name": vpc_config['name'],
                                        "vpc-assigned-id": 1,
                                    }
                                )
                                i = i + 1
                        else:
                            vpc_table.put_item(
                                Item={
                                    "account-ou-key": account_ou_key,
                                    "cidr": vpc_config['cidr2'],
                                    "id": "%s" % i,
                                    "pool": pools['sub'],
                                    "region": vpc_region,
                                    "requester": "Manual",
                                    "status": "assigned",
                                    "vpc-name": vpc_config['name'],
                                    "vpc-assigned-id": 1,
                                }
                            )
                            i = i + 1
                for subnet_config in vpc_config['subnets']:
                    subnet_name = subnet_config['name']
                    for subnet_definition in subnet_config['definitions']:
                        print("Adding CIDR for Subnet %s-%s in table %s" %
                              (subnet_config['name'], subnet_definition['az'], subnet_table_name))
                        if subnet_definition.get('cidr') and type(subnet_definition['cidr']) == dict:
                            cidr_obj = subnet_definition['cidr']
                        elif subnet_definition.get('cidr'):
                            cidr_obj = {
                                'value': subnet_definition['cidr'],
                                'pool': 'main'
                            }
                        elif subnet_definition.get('cidr2'):
                            cidr_obj = {
                                'value': subnet_definition['cidr2'],
                                'pool': pools['sub']
                            }
                        else:
                            cidr_obj = {
                                'cidr': subnet_definition.get('cidr', subnet_definition.get('cidr2')),
                                'pool': 'main' if subnet_definition.get('cidr') else pools['sub']
                            }
                        if vpc_config['deploy'] == 'local' and config_section == 'organizational-units':
                            subnet_table.put_item(
                                Item={
                                    "account-ou-key": 'organizational-unit/%s' % key_name,
                                    "az": subnet_definition["az"],
                                    "cidr": cidr_obj['value'],
                                    "id": "%s" % j,
                                    "region": vpc_region,
                                    "requester": "Manual",
                                    "status": "assigned",
                                    "sub-pool": cidr_obj['pool'],
                                    "subnet-name": subnet_name,
                                    "vpc-name": vpc_name
                                }
                            )
                            j = j + 1
                            for account_key in account_keys:
                                subnet_table.put_item(
                                    Item={
                                        "account-ou-key": "account/%s" % account_key,
                                        "az": subnet_definition["az"],
                                        "cidr": cidr_obj['value'],
                                        "id": "%s" % j,
                                        "region": vpc_region,
                                        "requester": "Manual",
                                        "status": "assigned",
                                        "sub-pool": cidr_obj['pool'],
                                        "subnet-name": subnet_name,
                                        "vpc-name": vpc_name
                                    }
                                )
                                j = j + 1
                        else:
                            subnet_table.put_item(
                                Item={
                                    "account-ou-key": account_ou_key,
                                    "az": subnet_definition["az"],
                                    "cidr": cidr_obj['value'],
                                    "id": "%s" % j,
                                    "region": vpc_region,
                                    "requester": "Manual",
                                    "status": "assigned",
                                    "sub-pool": cidr_obj["pool"],
                                    "subnet-name": subnet_name,
                                    "vpc-name": vpc_name
                                }
                            )
                            j = j + 1