summaryrefslogtreecommitdiffstats
path: root/robotframework-onap/vcpeutils
diff options
context:
space:
mode:
Diffstat (limited to 'robotframework-onap/vcpeutils')
-rwxr-xr-xrobotframework-onap/vcpeutils/SoUtils.py120
-rwxr-xr-xrobotframework-onap/vcpeutils/preload.py121
-rwxr-xr-xrobotframework-onap/vcpeutils/vcpecommon.py115
3 files changed, 104 insertions, 252 deletions
diff --git a/robotframework-onap/vcpeutils/SoUtils.py b/robotframework-onap/vcpeutils/SoUtils.py
index d630df7..e997faa 100755
--- a/robotframework-onap/vcpeutils/SoUtils.py
+++ b/robotframework-onap/vcpeutils/SoUtils.py
@@ -2,13 +2,13 @@
import time
-from vcpeutils.preload import *
-from vcpeutils.vcpecommon import *
-
+from vcpeutils.csar_parser import *
+import requests
from robot.api import logger
from datetime import datetime
import urllib3
import sys
+from ONAPLibrary.PreloadSDNCKeywords import PreloadSDNCKeywords
class SoUtils:
@@ -17,7 +17,6 @@ class SoUtils:
self.region_name = None # set later
self.tenant_id = None # set later
self.logger = logger
- self.vcpecommon = VcpeCommon()
# SO urls, note: do NOT add a '/' at the end of the url
self.so_nbi_port = '8080'
@@ -38,6 +37,15 @@ class SoUtils:
self.aai_query_port = '8443'
self.aai_host = 'aai.onap'
+ # mr utls
+ self.mr_ip_addr = 'mr.onap'
+ self.mr_ip_port = '3904'
+
+ # sdnc urls
+ self.sdnc_ip_addr = 'sdnc.onap'
+ self.sdnc_preloading_port = '8282'
+ self.sdnc_endpoint = 'http://' + self.sdnc_ip_addr + ':' + self.sdnc_preloading_port
+ self.sdnc_preload_vnf_url = '/restconf/operations/VNF-API:preload-vnf-topology-operation'
# properties
self.homing_solution = 'sniro' # value is either 'sniro' or 'oof'
self.customer_location_used_by_oof = {
@@ -54,6 +62,27 @@ class SoUtils:
'vfmodule': 'vf'
}
+ # set the openstack cloud access credentials here
+ self.cloud = {
+ '--os-auth-url': 'http://10.12.25.2:5000',
+ '--os-username': 'kxi',
+ '--os-user-domain-id': 'default',
+ '--os-project-domain-id': 'default',
+ '--os-tenant-id': '09d8566ea45e43aa974cf447ed591d77',
+ '--os-region-name': 'RegionOne',
+ '--os-password': 'n3JhGMGuDzD8',
+ '--os-project-domain-name': 'Integration-SB-03',
+ '--os-identity-api-version': '3'
+ }
+
+ self.template_path = 'robot/assets/templates'
+ self.pub_key = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKXDgoo3+WOqcUG8/5uUbk81+yczgwC4Y8ywTmuQqbNxlY1oQ0YxdMUqUnhitSXs5S/yRuAVOYHwGg2mCs20oAINrP+mxBI544AMIb9itPjCtgqtE2EWo6MmnFGbHB4Sx3XioE7F4VPsh7japsIwzOjbrQe+Mua1TGQ5d4nfEOQaaglXLLPFfuc7WbhbJbK6Q7rHqZfRcOwAMXgDoBqlyqKeiKwnumddo2RyNT8ljYmvB6buz7KnMinzo7qB0uktVT05FH9Rg0CTWH5norlG5qXgP2aukL0gk1ph8iAt7uYLf1ktp+LJI2gaF6L0/qli9EmVCSLr1uJ38Q8CBflhkh'
+ self.owning_entity_name = 'OE-Demonstration1'
+ self.project_name = 'Project-Demonstration'
+ self.owning_entity_id = '520cc603-a3c4-4ec2-9ef4-ca70facd79c0'
+ self.global_subscriber_id = 'Demonstration'
+ self.vgw_VfModuleModelInvariantUuid = '26d6a718-17b2-4ba8-8691-c44343b2ecd2'
+
def submit_create_req(self, req_json, req_type, service_instance_id=None, vnf_instance_id=None):
"""
POST {serverRoot}/serviceInstances/v4
@@ -167,7 +196,7 @@ class SoUtils:
def generate_service_request(self, instance_name, model):
req_details = {
'modelInfo': model,
- 'subscriberInfo': {'globalSubscriberId': self.vcpecommon.global_subscriber_id},
+ 'subscriberInfo': {'globalSubscriberId': self.global_subscriber_id},
'requestParameters': {
"userParams": [],
"subscriptionServiceType": "vCPE",
@@ -180,18 +209,18 @@ class SoUtils:
return {'requestDetails': req_details}
def add_project_info(self, req_details):
- req_details['project'] = {'projectName': self.vcpecommon.project_name}
+ req_details['project'] = {'projectName': self.project_name}
def add_owning_entity(self, req_details):
- req_details['owningEntity'] = {'owningEntityId': self.vcpecommon.owning_entity_id,
- 'owningEntityName': self.vcpecommon.owning_entity_name}
+ req_details['owningEntity'] = {'owningEntityId': self.owning_entity_id,
+ 'owningEntityName': self.owning_entity_name}
def generate_custom_service_request(self, instance_name, model, brg_mac):
brg_mac_enc = brg_mac.replace(':', '-')
req_details = {
'modelInfo': model,
'subscriberInfo': {'subscriberName': 'Kaneohe',
- 'globalSubscriberId': self.vcpecommon.global_subscriber_id},
+ 'globalSubscriberId': self.global_subscriber_id},
'cloudConfiguration': {"lcpCloudRegionId": self.region_name,
"tenantId": self.tenant_id},
'requestParameters': {
@@ -204,7 +233,7 @@ class SoUtils:
'name': 'VfModuleNames',
'value': [
{
- 'VfModuleModelInvariantUuid': self.vcpecommon.vgw_VfModuleModelInvariantUuid,
+ 'VfModuleModelInvariantUuid': self.vgw_VfModuleModelInvariantUuid,
'VfModuleName': 'VGW2BRG-{0}'.format(brg_mac_enc)
}
]
@@ -309,12 +338,12 @@ class SoUtils:
if not self.check_progress(req_id):
return None
- self.logger.info('Changing subnet name to ' + self.vcpecommon.network_name_to_subnet_name(network_name))
- self.vcpecommon.set_network_name(network_name)
+ self.logger.info('Changing subnet name to ' + self.network_name_to_subnet_name(network_name))
+ self.set_network_name(network_name)
subnet_name_changed = False
for i in range(20):
time.sleep(3)
- if self.vcpecommon.set_subnet_name(network_name):
+ if self.set_subnet_name(network_name):
subnet_name_changed = True
break
@@ -347,10 +376,31 @@ class SoUtils:
self.wait_for_aai('vnf', vnf_instance_id)
# SDNC Preload
+ preloader = PreloadSDNCKeywords()
+ vfmodule_name = '_'.join(['vf',
+ parser.vfmodule_models[0]['modelCustomizationName'].split('..')[0].lower(),
+ name_suffix])
+
+ extra_preload = {
+ 'pub_key': self.pub_key,
+ 'vnf_type': parser.vfmodule_models[0]['modelCustomizationName'],
+ 'generic_vnf_type': parser.vfmodule_models[0]['modelCustomizationName'],
+ 'service_type': svc_instance_id,
+ 'generic_vnf_name': vnf_model['modelCustomizationName'],
+ 'vnf_name': vfmodule_name,
+ 'mr_ip_addr': self.mr_ip_addr,
+ 'mr_ip_port': self.mr_ip_port,
+ 'sdnc_oam_ip': self.sdnc_ip_addr,
+ 'suffix': name_suffix,
+ 'oam_onap_net': 'oam_network_2No2',
+ 'oam_onap_subnet': 'oam_network_2No2',
+ 'public_net': 'external',
+ 'public_net_id': '971040b2-7059-49dc-b220-4fab50cb2ad4'
+ }
- preloader = Preload(self.vcpecommon)
- preloader.preload_vfmodule(vnf_template_file, svc_instance_id, parser.vnf_models[0], parser.vfmodule_models[0],
- preload_dict, name_suffix)
+ preload_dict.update(extra_preload)
+ preloader.preload_vfmodule(self.sdnc_endpoint, self.sdnc_preload_vnf_url, self.template_path, vnf_template_file,
+ preload_dict)
# create VF Module
if len(parser.vfmodule_models) == 1:
@@ -398,3 +448,41 @@ class SoUtils:
self.logger.debug('aai query: ' + url)
self.logger.debug('aai response:\n' + json.dumps(response, indent=4, sort_keys=True))
return 'result-data' in response
+
+ @staticmethod
+ def network_name_to_subnet_name(network_name):
+ """
+ :param network_name: example: vcpe_net_cpe_signal_201711281221
+ :return: vcpe_net_cpe_signal_subnet_201711281221
+ """
+ fields = network_name.split('_')
+ fields.insert(-1, 'subnet')
+ return '_'.join(fields)
+
+ def set_network_name(self, network_name):
+ param = ' '.join([k + ' ' + v for k, v in list(self.cloud.items())])
+ openstackcmd = 'openstack ' + param
+ cmd = ' '.join([openstackcmd, 'network set --name', network_name, 'ONAP-NW1'])
+ os.popen(cmd)
+
+ def set_subnet_name(self, network_name):
+ """
+ Example: network_name = vcpe_net_cpe_signal_201711281221
+ set subnet name to vcpe_net_cpe_signal_subnet_201711281221
+ :return:
+ """
+ param = ' '.join([k + ' ' + v for k, v in list(self.cloud.items())])
+ openstackcmd = 'openstack ' + param
+
+ # expected results: | subnets | subnet_id |
+ subnet_info = os.popen(openstackcmd + ' network show ' + network_name + ' |grep subnets').read().split('|')
+ if len(subnet_info) > 2 and subnet_info[1].strip() == 'subnets':
+ subnet_id = subnet_info[2].strip()
+ subnet_name = self.network_name_to_subnet_name(network_name)
+ cmd = ' '.join([openstackcmd, 'subnet set --name', subnet_name, subnet_id])
+ os.popen(cmd)
+ self.logger.info("Subnet name set to: " + subnet_name)
+ return True
+ else:
+ self.logger.error("Can't get subnet info from network name: " + network_name)
+ return False
diff --git a/robotframework-onap/vcpeutils/preload.py b/robotframework-onap/vcpeutils/preload.py
deleted file mode 100755
index 793e70d..0000000
--- a/robotframework-onap/vcpeutils/preload.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#! /usr/bin/python
-
-from vcpeutils.csar_parser import *
-from robot.api import logger
-from past import builtins
-import requests
-
-
-class Preload:
- def __init__(self, vcpecommon):
- self.vcpecommon = vcpecommon
-
- def replace(self, sz, replace_dict):
- for old_string, new_string in list(replace_dict.items()):
- sz = sz.replace(old_string, new_string)
- if self.vcpecommon.template_variable_symbol in sz:
- logger.error('Error! Cannot find a value to replace ' + sz)
- return sz
-
- def generate_json(self, template_file, replace_dict):
- with open(template_file) as json_input:
- json_data = json.load(json_input)
- stk = [json_data]
- while len(stk) > 0:
- data = stk.pop()
- for k, v in list(data.items()):
- if type(v) is dict:
- stk.append(v)
- elif type(v) is list:
- stk.extend(v)
- elif type(v) is builtins.basestring:
- if self.vcpecommon.template_variable_symbol in v:
- data[k] = self.replace(v, replace_dict)
- else:
- logger.warn('Unexpected line in template: {}. Look for value {}'.format(template_file, v))
- return json_data
-
- def preload_network(self, template_file, network_role, subnet_start_ip, subnet_gateway, common_dict, name_suffix):
- """
- :param template_file:
- :param network_role: cpe_signal, cpe_public, brg_bng, bng_mux, mux_gw
- :param subnet_start_ip:
- :param subnet_gateway:
- :param common_dict:
- :param name_suffix: e.g. '201711201311'
- :return:
- """
- network_name = '_'.join([self.vcpecommon.instance_name_prefix['network'], network_role.lower(), name_suffix])
- subnet_name = self.vcpecommon.network_name_to_subnet_name(network_name)
- common_dict['${' + network_role+'_net}'] = network_name
- common_dict['${' + network_role+'_subnet}'] = subnet_name
- replace_dict = {'${network_role}': network_role,
- '${service_type}': 'vCPE',
- '${network_type}': 'Generic NeutronNet',
- '${network_name}': network_name,
- '${subnet_start_ip}': subnet_start_ip,
- '${subnet_gateway}': subnet_gateway
- }
- logger.info('Preloading network ' + network_role)
- return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_network_url)
-
- def preload(self, template_file, replace_dict, url):
- logger.debug(json.dumps(replace_dict, indent=4, sort_keys=True))
- json_data = self.generate_json(template_file, replace_dict)
- logger.debug(json.dumps(json_data, indent=4, sort_keys=True))
- r = requests.post(url, headers=self.vcpecommon.sdnc_headers, auth=self.vcpecommon.sdnc_userpass, json=json_data)
- response = r.json()
- if int(response.get('output', {}).get('response-code', 0)) != 200:
- logger.debug(json.dumps(response, indent=4, sort_keys=True))
- logger.error('Preloading failed.')
- return False
- return True
-
- def preload_vgw(self, template_file, brg_mac, commont_dict, name_suffix):
- replace_dict = {'${brg_mac}': brg_mac,
- '${suffix}': name_suffix
- }
- replace_dict.update(commont_dict)
- logger.info('Preloading vGW')
- return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_vnf_url)
-
- def preload_vgw_gra(self, template_file, brg_mac, commont_dict, name_suffix, vgw_vfmod_name_index):
- replace_dict = {'${brg_mac}': brg_mac,
- '${suffix}': name_suffix,
- '${vgw_vfmod_name_index}': vgw_vfmod_name_index
- }
- replace_dict.update(commont_dict)
- logger.info('Preloading vGW-GRA')
- return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_gra_url)
-
- def preload_vfmodule(self, template_file, service_instance_id, vnf_model, vfmodule_model, common_dict, name_suffix):
- """
- :param template_file:
- :param service_instance_id:
- :param vnf_model: parsing results from csar_parser
- :param vfmodule_model: parsing results from csar_parser
- :param common_dict:
- :param name_suffix:
- :return:
- """
-
- # examples:
- # vfmodule_model['modelCustomizationName']: "Vspinfra111601..base_vcpe_infra..module-0",
- # vnf_model['modelCustomizationName']: "vspinfra111601 0",
-
- vfmodule_name = '_'.join([self.vcpecommon.instance_name_prefix['vfmodule'],
- vfmodule_model['modelCustomizationName'].split('..')[0].lower(), name_suffix])
-
- # vnf_type and generic_vnf_type are identical
- replace_dict = {'${vnf_type}': vfmodule_model['modelCustomizationName'],
- '${generic_vnf_type}': vfmodule_model['modelCustomizationName'],
- '${service_type}': service_instance_id,
- '${generic_vnf_name}': vnf_model['modelCustomizationName'],
- '${vnf_name}': vfmodule_name,
- '${mr_ip_addr}': self.vcpecommon.mr_ip_addr,
- '${mr_ip_port}': self.vcpecommon.mr_ip_port,
- '${sdnc_oam_ip}': self.vcpecommon.sdnc_oam_ip,
- '${suffix}': name_suffix}
- replace_dict.update(common_dict)
- logger.info('Preloading VF Module ' + vfmodule_name)
- return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_vnf_url)
diff --git a/robotframework-onap/vcpeutils/vcpecommon.py b/robotframework-onap/vcpeutils/vcpecommon.py
deleted file mode 100755
index 1a5f5da..0000000
--- a/robotframework-onap/vcpeutils/vcpecommon.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import logging
-import os
-
-
-class VcpeCommon:
- # set the openstack cloud access credentials here
- cloud = {
- '--os-auth-url': 'http://10.12.25.2:5000',
- '--os-username': 'kxi',
- '--os-user-domain-id': 'default',
- '--os-project-domain-id': 'default',
- '--os-tenant-id': '09d8566ea45e43aa974cf447ed591d77',
- '--os-region-name': 'RegionOne',
- '--os-password': 'n3JhGMGuDzD8',
- '--os-project-domain-name': 'Integration-SB-03',
- '--os-identity-api-version': '3'
- }
-
- #############################################################################################
-
- template_variable_symbol = '${'
- cpe_vm_prefix = 'zdcpe'
-
- dcae_ves_collector_name = 'dcae-bootstrap'
- global_subscriber_id = 'Demonstration'
- project_name = 'Project-Demonstration'
- owning_entity_id = '520cc603-a3c4-4ec2-9ef4-ca70facd79c0'
- owning_entity_name = 'OE-Demonstration1'
-
- def __init__(self, extra_host_names=None):
- rootlogger = logging.getLogger()
- handler = logging.StreamHandler()
- formatter = logging.Formatter('%(asctime)s %(levelname)s %(name)s.%(funcName)s(): %(message)s')
- handler.setFormatter(formatter)
- rootlogger.addHandler(handler)
- rootlogger.setLevel(logging.INFO)
-
- self.logger = logging.getLogger(__name__)
- self.logger.propagate = False
- self.logger.addHandler(handler)
- self.logger.setLevel(logging.DEBUG)
- self.logger.info('Initializing configuration')
-
- # CHANGEME: vgw_VfModuleModelInvariantUuid is in rescust service csar,
- # look in service-VcpesvcRescust1118-template.yml for groups vgw module metadata.
- # TODO: read this value automcatically
- self.vgw_VfModuleModelInvariantUuid = '26d6a718-17b2-4ba8-8691-c44343b2ecd2'
- self.sdnc_preloading_port = '8282'
-
- self.host_names = ['so', 'sdnc', 'robot', 'aai', self.dcae_ves_collector_name]
- if extra_host_names:
- self.host_names.extend(extra_host_names)
- # get IP addresses
- self.hosts = {'so': 'so.onap', 'sdnc': 'sdnc.onap', 'robot': 'robot.onap', 'aai': 'aai.onap'}
- self.os_tenant_id = self.cloud['--os-tenant-id']
- self.os_region_name = self.cloud['--os-region-name']
-
- #############################################################################################
- # SDNC urls
- self.sdnc_db_name = 'sdnctl'
- self.sdnc_db_user = 'sdnctl'
- self.sdnc_db_pass = 'gamma'
- self.sdnc_db_port = '32774'
- self.sdnc_headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
- self.sdnc_preload_network_url = 'http://' + self.hosts['sdnc'] + \
- ':' + self.sdnc_preloading_port + '/restconf/operations/VNF-API:preload-network-topology-operation'
- self.sdnc_preload_vnf_url = 'http://' + self.hosts['sdnc'] + \
- ':' + self.sdnc_preloading_port + '/restconf/operations/VNF-API:preload-vnf-topology-operation'
- self.sdnc_preload_gra_url = 'http://' + self.hosts['sdnc'] + \
- ':' + self.sdnc_preloading_port + '/restconf/operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation'
- self.sdnc_ar_cleanup_url = 'http://' + self.hosts['sdnc'] + ':' + self.sdnc_preloading_port + \
- '/restconf/config/GENERIC-RESOURCE-API:'
-
- self.vpp_inf_url = 'http://{0}:8183/restconf/config/ietf-interfaces:interfaces'
- self.vpp_api_headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
- self.vpp_api_userpass = ('admin', 'admin')
- self.vpp_ves_url = 'http://{0}:8183/restconf/config/vesagent:vesagent'
-
- @staticmethod
- def network_name_to_subnet_name(network_name):
- """
- :param network_name: example: vcpe_net_cpe_signal_201711281221
- :return: vcpe_net_cpe_signal_subnet_201711281221
- """
- fields = network_name.split('_')
- fields.insert(-1, 'subnet')
- return '_'.join(fields)
-
- def set_network_name(self, network_name):
- param = ' '.join([k + ' ' + v for k, v in list(self.cloud.items())])
- openstackcmd = 'openstack ' + param
- cmd = ' '.join([openstackcmd, 'network set --name', network_name, 'ONAP-NW1'])
- os.popen(cmd)
-
- def set_subnet_name(self, network_name):
- """
- Example: network_name = vcpe_net_cpe_signal_201711281221
- set subnet name to vcpe_net_cpe_signal_subnet_201711281221
- :return:
- """
- param = ' '.join([k + ' ' + v for k, v in list(self.cloud.items())])
- openstackcmd = 'openstack ' + param
-
- # expected results: | subnets | subnet_id |
- subnet_info = os.popen(openstackcmd + ' network show ' + network_name + ' |grep subnets').read().split('|')
- if len(subnet_info) > 2 and subnet_info[1].strip() == 'subnets':
- subnet_id = subnet_info[2].strip()
- subnet_name = self.network_name_to_subnet_name(network_name)
- cmd = ' '.join([openstackcmd, 'subnet set --name', subnet_name, subnet_id])
- os.popen(cmd)
- self.logger.info("Subnet name set to: " + subnet_name)
- return True
- else:
- self.logger.error("Can't get subnet info from network name: " + network_name)
- return False