Files
group-based-policy/gbpservice/nfp/common/data_formatter.py
pkharat 8c2a736870 LBaaS V1 removal from nfp for newton support.
1) Removed LBaaS V1 code from nfp.
2) LBaaSV2 will be default LB service.
3) Renamed 'haproxy_lbaasv2' vendor to 'haproxy'.

Change-Id: Ieb0db3ce00f36f69d2587db278f1f9adc8de8666
2017-03-24 11:31:04 +00:00

155 lines
5.8 KiB
Python

# 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.
import copy
from gbpservice.nfp.common import constants as const
''' The generic data format that is common for device and
service configuration.
'''
NFP_DATA_FORMAT = {
'config': [{
'resource': '',
'resource_data': {
'tenant_id': '',
'nfds': [{
'role': 'master',
'svc_mgmt_fixed_ip': '',
'networks': [{
'type': '',
'cidr': '',
'gw_ip': '',
'ports': [{
'fixed_ip': '',
'floating_ip': '',
'mac': ''}] # ports
}] # networks
}] # nfds
} # resource_data
}] # config
} # NFP_DATA_FORMAT
def _fill_service_specific_info(nfd, device_data, **kwargs):
''' Service specific data formatting is done here.
:param nfd: A partly built nested dict from NFP_DATA_FORMAT
:param device_data: Device data dictionary
:param kwargs: service specific arguments
Returns: nfd dict
'''
network_schema = kwargs.get('network_schema')
resource_type = kwargs.get('resource_type')
provider_network = nfd['networks'][0]
provider_port = provider_network['ports'][0]
if resource_type == const.FIREWALL:
nfd['svc_mgmt_fixed_ip'] = device_data.get('vm_management_ip')
provider_port['mac'] = device_data.get('provider_ptg_info')[0]
elif resource_type == const.VPN:
stitching_network = nfd['networks'][1]
stitching_port = stitching_network['ports'][0]
nfd['svc_mgmt_fixed_ip'] = device_data.get('fip')
provider_network['cidr'] = device_data.get('tunnel_local_cidr')
stitching_port['fixed_ip'] = device_data.get('fixed_ip')
stitching_port['floating_ip'] = device_data.get('user_access_ip')
stitching_network['cidr'] = device_data.get('stitching_cidr')
stitching_network['gw_ip'] = device_data.get('stitching_gateway')
management_network = copy.deepcopy(network_schema)
management_network['type'] = const.MANAGEMENT
management_network['gw_ip'] = device_data.get('mgmt_gw_ip')
nfd['networks'].append(management_network)
elif resource_type == const.LOADBALANCERV2:
nfd['svc_mgmt_fixed_ip'] = device_data.get('floating_ip')
provider_port['mac'] = device_data.get('provider_interface_mac')
return nfd
def get_network_function_info(device_data, resource_type):
''' Returns a generic configuration format for both device
and service configuration.
:param device_data: Data to be formatted. Type: dict
:param resource_type: (healthmonitor/device_config/firewall/
vpn/loadbalancer/loadbalancerv2)
Return: dictionary
'''
SERVICE_TYPES = [const.FIREWALL, const.VPN,
const.LOADBALANCERV2]
config = copy.deepcopy(NFP_DATA_FORMAT)
mgmt_ip = device_data.get('mgmt_ip_address')
tenant_id = device_data.get('tenant_id')
provider_ip = device_data.get('provider_ip')
provider_mac = device_data.get('provider_mac')
provider_cidr = device_data.get('provider_cidr')
stitching_ip = device_data.get('consumer_ip')
stitching_mac = device_data.get('consumer_mac')
stitching_cidr = device_data.get('consumer_cidr')
stitching_gateway_ip = device_data.get('consumer_gateway_ip')
resource_data = config['config'][0]['resource_data']
resource_data['tenant_id'] = tenant_id
nfd = resource_data['nfds'][0]
nfd['role'] = 'master'
nfd['svc_mgmt_fixed_ip'] = mgmt_ip
if resource_type == const.HEALTHMONITOR_RESOURCE:
nfd['periodicity'] = device_data.get('periodicity')
nfd['periodic_polling_reason'] = const.DEVICE_TO_BECOME_DOWN
nfd['vmid'] = device_data['id']
config['config'][0]['resource'] = const.HEALTHMONITOR_RESOURCE
return config
provider_network = nfd['networks'][0]
network_schema = copy.deepcopy(provider_network)
provider_network['type'] = const.PROVIDER
provider_network['cidr'] = provider_cidr
provider_network['gw_ip'] = ''
stitching_network = copy.deepcopy(network_schema)
stitching_network['type'] = const.STITCHING
stitching_network['cidr'] = stitching_cidr
stitching_network['gw_ip'] = stitching_gateway_ip
nfd['networks'].append(stitching_network)
provider_port = provider_network['ports'][0]
provider_port['fixed_ip'] = provider_ip
provider_port['floating_ip'] = ''
provider_port['mac'] = provider_mac
stitching_port = stitching_network['ports'][0]
stitching_port['fixed_ip'] = stitching_ip
stitching_port['floating_ip'] = ''
stitching_port['mac'] = stitching_mac
if resource_type in SERVICE_TYPES:
nfd = _fill_service_specific_info(nfd, device_data,
network_schema=network_schema,
resource_type=resource_type)
resource_data['nfs'] = resource_data.pop('nfds')
return config['config'][0]['resource_data']
config['config'][0]['resource'] = const.INTERFACE_RESOURCE
config['config'].append(config['config'][0].copy())
config['config'][1]['resource'] = const.ROUTES_RESOURCE
return config