def __init__(self, log, loop, dts, ping_pong, cloud_account_name): self.dts = dts self.log = log self.loop = loop self.ref = None self.nsr_config = rwnsryang.YangData_Nsr_NsInstanceConfig() nsr = rwnsryang.YangData_Nsr_NsInstanceConfig_Nsr() nsr.id = str(uuid.uuid4()) nsr.name = "ns1.{}".format(nsr.id) nsr.nsd_ref = ping_pong.nsd_id nsr.cloud_account = cloud_account_name inputs = nsryang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter() inputs.xpath = "/nsd:nsd-catalog/nsd:nsd[nsd:id={}]/nsd:name".format( ping_pong.nsd_id) inputs.value = "inigo montoya" fast_cpu = {'metadata_key': 'FASTCPU', 'metadata_value': 'True'} self.create_nsd_placement_group_map(nsr, group_name='Orcus', cloud_type='openstack', construct_type='host_aggregate', construct_value=[fast_cpu]) fast_storage = {'metadata_key': 'FASTSSD', 'metadata_value': 'True'} self.create_nsd_placement_group_map(nsr, group_name='Quaoar', cloud_type='openstack', construct_type='host_aggregate', construct_value=[fast_storage]) fast_cpu = {'metadata_key': 'BLUE_HW', 'metadata_value': 'True'} self.create_vnfd_placement_group_map(nsr, group_name='Eris', vnfd_id=ping_pong.ping_vnfd_id, cloud_type='openstack', construct_type='host_aggregate', construct_value=[fast_cpu]) fast_storage = {'metadata_key': 'YELLOW_HW', 'metadata_value': 'True'} self.create_vnfd_placement_group_map(nsr, group_name='Weywot', vnfd_id=ping_pong.pong_vnfd_id, cloud_type='openstack', construct_type='host_aggregate', construct_value=[fast_storage]) nsr.input_parameter.append(inputs) self._nsr = nsr self.nsr_config.nsr.append(nsr) self._ready_event = asyncio.Event(loop=self.loop) asyncio.ensure_future(self.register(), loop=loop)
def test_substitution(self): """ Test that substitution of input parameters occurs as expected. """ # Define the original NSD nsd = NsdYang.YangData_Nsd_NsdCatalog_Nsd() nsd.name = "robert" nsd.short_name = "bob" # Define which parameters may be modified nsd.input_parameter_xpath.extend([ NsdYang.YangData_Nsd_NsdCatalog_Nsd_InputParameterXpath( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:name", label="NSD Name", ), NsdYang.YangData_Nsd_NsdCatalog_Nsd_InputParameterXpath( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:short-name", label="NSD Short Name", ), ]) # Define the input parameters that are intended to be modified nsr_config = NsrYang.YangData_Nsr_NsInstanceConfig_Nsr() nsr_config.input_parameter.extend([ NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:name", value="robert", ), NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:short-name", value="bob", ), ]) self.substitute_input_parameters(nsd, nsr_config) # Verify that both the 'name' and 'short-name' fields are correctly # replaced. self.assertEqual("robert", nsd.name) self.assertEqual("bob", nsd.short_name)
def test_illegal_input_parameter(self): """ In the NSD there is a list of the parameters that are allowed to be sbustituted by input parameters. This test checks that when an input parameter is provided in the NSR config that is not in the NSD, it is not applied. """ # Define the original NSD nsd = NsdYang.YangData_Nsd_NsdCatalog_Nsd() nsd.name = "robert" nsd.short_name = "bob" # Define which parameters may be modified nsd.input_parameter_xpath.append( NsdYang.YangData_Nsd_NsdCatalog_Nsd_InputParameterXpath( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:name", label="NSD Name", )) # Define the input parameters that are intended to be modified nsr_config = NsrYang.YangData_Nsr_NsInstanceConfig_Nsr() nsr_config.input_parameter.extend([ NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:name", value="alice", ), NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath="/nsd:nsd-catalog/nsd:nsd/nsd:short-name", value="alice", ), ]) self.substitute_input_parameters(nsd, nsr_config) # Verify that only the parameter in the input_parameter_xpath list is # modified after the input parameters have been applied. self.assertEqual("alice", nsd.name) self.assertEqual("bob", nsd.short_name)
def test_instantiate_multi_vm_vnf_nsr(self, logger, nsd_proxy, nsr_proxy, rwnsr_proxy, base_proxy, cloud_account_name): def verify_input_parameters(running_config, config_param): """ Verify the configured parameter set against the running configuration """ for run_input_param in running_config.input_parameter: if (input_param.xpath == config_param.xpath and input_param.value == config_param.value): return True assert False, ( "Verification of configured input parameters: { xpath:%s, value:%s} " "is unsuccessful.\nRunning configuration: %s" % (config_param.xpath, config_param.value, running_nsr_config.input_parameter)) catalog = nsd_proxy.get_config('/nsd-catalog') nsd = catalog.nsd[0] input_parameters = [] descr_xpath = "/nsd:nsd-catalog/nsd:nsd[nsd:id='%s']/nsd:description" % nsd.id descr_value = "New NSD Description" in_param_id = str(uuid.uuid4()) input_param_1 = NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath=descr_xpath, value=descr_value) input_parameters.append(input_param_1) nsr = create_nsr(nsd.id, input_parameters, cloud_account_name) logger.info("Instantiating the Network Service") rwnsr_proxy.create_config('/ns-instance-config/nsr', nsr) nsr_opdata = rwnsr_proxy.get('/ns-instance-opdata') nsrs = nsr_opdata.nsr # Verify the input parameter configuration running_config = rwnsr_proxy.get_config( "/ns-instance-config/nsr[id='%s']" % nsr.id) for input_param in input_parameters: verify_input_parameters(running_config, input_param) assert len(nsrs) == 1 assert nsrs[0].ns_instance_config_ref == nsr.id xpath = "/ns-instance-opdata/nsr[ns-instance-config-ref='{}']/operational-status".format( nsr.id) rwnsr_proxy.wait_for(xpath, "running", fail_on=['failed'], timeout=360)
def create_nsr_from_nsd_id(nsd_id): nsr = RwNsrYang.YangData_Nsr_NsInstanceConfig_Nsr() nsr.id = str(uuid.uuid4()) nsr.name = "pingpong_{}".format(datetime.datetime.now().strftime("%Y%m%d_%H%M%S")) nsr.short_name = "nsr_short_name" nsr.description = "This is a description" nsr.nsd_ref = nsd_id nsr.admin_status = "ENABLED" nsr.cloud_account = "openstack" param = NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter() param.xpath = '/nsd:nsd-catalog/nsd:nsd/nsd:vendor' param.value = "rift-o-matic" nsr.input_parameter.append(param) return nsr
def test_instantiate_ping_pong_nsr(self, logger, nsd_proxy, rwnsr_proxy, base_proxy, cloud_account): def verify_input_parameters(running_config, config_param): """ Verify the configured parameter set against the running configuration """ for run_input_param in running_config.input_parameter: if (run_input_param.xpath == config_param.xpath and run_input_param.value == config_param.value): return True assert False, ("Verification of configured input parameters: { xpath:%s, value:%s} " "is unsuccessful.\nRunning configuration: %s" % (config_param.xpath, config_param.value, running_config.input_parameter)) catalog = nsd_proxy.get_config('/nsd-catalog') nsd = catalog.nsd[0] input_parameters = [] descr_xpath = "/nsd:nsd-catalog/nsd:nsd[nsd:id='%s']/nsd:vendor" % nsd.id descr_value = "automation" in_param_id = str(uuid.uuid4()) input_param_1 = NsrYang.YangData_Nsr_NsInstanceConfig_Nsr_InputParameter( xpath=descr_xpath, value=descr_value) input_parameters.append(input_param_1) nsr = create_nsr(nsd.id, input_parameters, cloud_account.name) logger.info("Instantiating the Network Service") rwnsr_proxy.create_config('/ns-instance-config/nsr', nsr) nsr_opdata = rwnsr_proxy.get('/ns-instance-opdata/nsr[ns-instance-config-ref="{}"]'.format(nsr.id)) assert nsr_opdata is not None # Verify the input parameter configuration running_config = rwnsr_proxy.get_config("/ns-instance-config/nsr[id='%s']" % nsr.id) for input_param in input_parameters: verify_input_parameters(running_config, input_param)