

def create_vpn_connection(context, customer_gateway_id, vpn_gateway_id, type, options=None):
    if ((not options) or (options.get('static_routes_only') is not True)):
        raise exception.Unsupported('BGP dynamic routing is unsupported')
    customer_gateway = ec2utils.get_db_item(context, customer_gateway_id)
    vpn_gateway = ec2utils.get_db_item(context, vpn_gateway_id)
    vpn_connection = next((vpn for vpn in db_api.get_items(context, 'vpn') if (vpn['customer_gateway_id'] == customer_gateway_id)), None)
    if vpn_connection:
        if (vpn_connection['vpn_gateway_id'] == vpn_gateway_id):
            ec2_vpn_connections = describe_vpn_connections(context, vpn_connection_id=[vpn_connection['id']])
            return {
                'vpnConnection': ec2_vpn_connections['vpnConnectionSet'][0],
            }
        else:
            raise exception.InvalidCustomerGatewayDuplicateIpAddress()
    neutron = clients.neutron(context)
    with common.OnCrashCleaner() as cleaner:
        os_ikepolicy = {
            'ike_version': 'v1',
            'auth_algorithm': 'sha1',
            'encryption_algorithm': 'aes-128',
            'pfs': 'group2',
            'phase1_negotiation_mode': 'main',
            'lifetime': {
                'units': 'seconds',
                'value': 28800,
            },
        }
        os_ikepolicy = neutron.create_ikepolicy({
            'ikepolicy': os_ikepolicy,
        })['ikepolicy']
        cleaner.addCleanup(neutron.delete_ikepolicy, os_ikepolicy['id'])
        os_ipsecpolicy = {
            'transform_protocol': 'esp',
            'auth_algorithm': 'sha1',
            'encryption_algorithm': 'aes-128',
            'pfs': 'group2',
            'encapsulation_mode': 'tunnel',
            'lifetime': {
                'units': 'seconds',
                'value': 3600,
            },
        }
        os_ipsecpolicy = neutron.create_ipsecpolicy({
            'ipsecpolicy': os_ipsecpolicy,
        })['ipsecpolicy']
        cleaner.addCleanup(neutron.delete_ipsecpolicy, os_ipsecpolicy['id'])
        psk = ''.join((random.choice(SHARED_KEY_CHARS) for _x in range(32)))
        vpn_connection = db_api.add_item(context, 'vpn', {
            'customer_gateway_id': customer_gateway['id'],
            'vpn_gateway_id': vpn_gateway['id'],
            'pre_shared_key': psk,
            'os_ikepolicy_id': os_ikepolicy['id'],
            'os_ipsecpolicy_id': os_ipsecpolicy['id'],
            'cidrs': [],
            'os_ipsec_site_connections': {
                
            },
        })
        cleaner.addCleanup(db_api.delete_item, context, vpn_connection['id'])
        neutron.update_ikepolicy(os_ikepolicy['id'], {
            'ikepolicy': {
                'name': vpn_connection['id'],
            },
        })
        neutron.update_ipsecpolicy(os_ipsecpolicy['id'], {
            'ipsecpolicy': {
                'name': vpn_connection['id'],
            },
        })
        _reset_vpn_connections(context, neutron, cleaner, vpn_gateway, vpn_connections=[vpn_connection])
    ec2_vpn_connections = describe_vpn_connections(context, vpn_connection_id=[vpn_connection['id']])
    return {
        'vpnConnection': ec2_vpn_connections['vpnConnectionSet'][0],
    }

dataset/ETHPy150Open openstack/ec2-api/ec2api/api/vpn_connection.py create_vpn_connection/original