77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
# Copyright 2014
|
|
# The Cloudscaling Group, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
from ec2api.api import common
|
|
from ec2api.api import ec2utils
|
|
from ec2api.db import api as db_api
|
|
from ec2api import exception
|
|
from ec2api.i18n import _
|
|
|
|
|
|
Validator = common.Validator
|
|
|
|
|
|
DEFAULT_BGP_ASN = 65000
|
|
|
|
|
|
def create_customer_gateway(context, ip_address, type, bgp_asn=None):
|
|
if bgp_asn and bgp_asn != DEFAULT_BGP_ASN:
|
|
raise exception.Unsupported("BGP dynamic routing is unsupported")
|
|
customer_gateway = next((cgw for cgw in db_api.get_items(context, 'cgw')
|
|
if cgw['ip_address'] == ip_address), None)
|
|
if not customer_gateway:
|
|
customer_gateway = db_api.add_item(context, 'cgw',
|
|
{'ip_address': ip_address})
|
|
return {'customerGateway': _format_customer_gateway(customer_gateway)}
|
|
|
|
|
|
def delete_customer_gateway(context, customer_gateway_id):
|
|
customer_gateway = ec2utils.get_db_item(context, customer_gateway_id)
|
|
vpn_connections = db_api.get_items(context, 'vpn')
|
|
if any(vpn['customer_gateway_id'] == customer_gateway['id']
|
|
for vpn in vpn_connections):
|
|
raise exception.IncorrectState(
|
|
reason=_('The customer gateway is in use.'))
|
|
db_api.delete_item(context, customer_gateway['id'])
|
|
return True
|
|
|
|
|
|
def describe_customer_gateways(context, customer_gateway_id=None,
|
|
filter=None):
|
|
formatted_cgws = CustomerGatewayDescriber().describe(
|
|
context, ids=customer_gateway_id, filter=filter)
|
|
return {'customerGatewaySet': formatted_cgws}
|
|
|
|
|
|
class CustomerGatewayDescriber(common.TaggableItemsDescriber,
|
|
common.NonOpenstackItemsDescriber):
|
|
|
|
KIND = 'cgw'
|
|
FILTER_MAP = {'bgp-asn': 'bgpAsn',
|
|
'customer-gateway-id': 'customerGatewayId',
|
|
'ip-address': 'ipAddress',
|
|
'state': 'state',
|
|
'type': 'type'}
|
|
|
|
def format(self, customer_gateway):
|
|
return _format_customer_gateway(customer_gateway)
|
|
|
|
|
|
def _format_customer_gateway(customer_gateway):
|
|
return {'customerGatewayId': customer_gateway['id'],
|
|
'ipAddress': customer_gateway['ip_address'],
|
|
'state': 'available',
|
|
'type': 'ipsec.1',
|
|
'bgpAsn': DEFAULT_BGP_ASN}
|