## [1.2.0]
### Changed
* Bug fix prevent sub threads from crashing permanently (DCAEGEN2-2501)
+* Added Resource Name (model-name) to filter (DCAEGEN2-2402)
## [1.1.2]
### Changed
ip_address=nf['properties'].get('ipaddress-v4-oam'),
model_invariant_id=nf['properties'].get('model-invariant-id'),
model_version_id=nf['properties'].get('model-version-id'))
- if not new_nf.set_sdnc_params(app_conf):
+ if not new_nf.set_nf_model_params(app_conf):
continue
if app_conf.nf_filter.is_nf_in_filter(new_nf):
nf_list.append(new_nf)
ip_address=aai_entity['ipaddress-v4-oam'],
model_invariant_id=aai_entity['model-invariant-id'],
model_version_id=aai_entity['model-version-id'])
- if not nf.set_sdnc_params(app_conf):
+ if not nf.set_nf_model_params(app_conf):
continue
if app_conf.nf_filter.is_nf_in_filter(nf):
_process_event(action, nf, mr_pub, app_conf)
ip_address = Column(String(50))
model_invariant_id = Column(String(100))
model_version_id = Column(String(100))
+ model_name = Column(String(100))
sdnc_model_name = Column(String(100))
sdnc_model_version = Column(String(100))
cascade='all, delete-orphan',
backref='nf')
- def __init__(self, nf_name, ip_address, model_invariant_id, model_version_id, sdnc_model_name,
+ def __init__(self, nf_name, ip_address, model_invariant_id,
+ model_version_id, model_name, sdnc_model_name,
sdnc_model_version):
self.nf_name = nf_name
self.ip_address = ip_address
self.model_invariant_id = model_invariant_id
self.model_version_id = model_version_id
+ self.model_name = model_name
self.sdnc_model_name = sdnc_model_name
self.sdnc_model_version = sdnc_model_version
'nf_sub_status': self.nf_sub_status,
'model_invariant_id': nf.model_invariant_id,
'model_version_id': nf.model_version_id,
+ 'model_name': nf.model_name,
'sdnc_model_name': nf.sdnc_model_name,
'sdnc_model_version': nf.sdnc_model_version}
self.ip_address = kwargs.get('ip_address')
self.model_invariant_id = kwargs.get('model_invariant_id')
self.model_version_id = kwargs.get('model_version_id')
+ self.model_name = kwargs.get('model_name')
self.sdnc_model_name = sdnc_model_name
self.sdnc_model_version = sdnc_model_version
@classmethod
def nf_def(cls):
- return cls(nf_name=None, ip_address=None, model_invariant_id=None, model_version_id=None,
+ return cls(nf_name=None, ip_address=None, model_invariant_id=None,
+ model_version_id=None, model_name=None,
sdnc_model_name=None, sdnc_model_version=None)
def __str__(self):
f'ipaddress-v4-oam: {self.ip_address}, ' \
f'model-invariant-id: {self.model_invariant_id}, ' \
f'model-version-id: {self.model_version_id}, ' \
+ f'model-name: {self.model_name}, ' \
f'sdnc-model-name: {self.sdnc_model_name}, ' \
f'sdnc-model-version: {self.sdnc_model_version}'
self.ip_address == other.ip_address and \
self.model_invariant_id == other.model_invariant_id and \
self.model_version_id == other.model_version_id and \
+ self.model_name == other.model_name and \
self.sdnc_model_name == other.sdnc_model_name and \
self.sdnc_model_version == other.sdnc_model_version
def __hash__(self):
return hash((self.nf_name, self.ip_address, self.model_invariant_id,
- self.model_version_id, self.sdnc_model_name, self.sdnc_model_version))
+ self.model_version_id, self.model_name,
+ self.sdnc_model_name, self.sdnc_model_version))
def create(self):
""" Creates a NetworkFunction database entry """
ip_address=self.ip_address,
model_invariant_id=self.model_invariant_id,
model_version_id=self.model_version_id,
+ model_name=self.model_name,
sdnc_model_name=self.sdnc_model_name,
sdnc_model_version=self.sdnc_model_version)
db.session.add(new_nf)
f' returning this network function..')
return existing_nf
- def set_sdnc_params(self, app_conf):
+ def set_nf_model_params(self, app_conf):
params_set = True
try:
sdnc_model_data = mod.aai_client.get_aai_model_data(app_conf, self.model_invariant_id,
self.model_version_id, self.nf_name)
+
try:
self.sdnc_model_name = sdnc_model_data['sdnc-model-name']
self.sdnc_model_version = sdnc_model_data['sdnc-model-version']
+ self.model_name = sdnc_model_data['model-name']
return params_set
except KeyError as e:
logger.info(f'Skipping NF {self.nf_name} as there is no '
f'sdnc-model data associated in AAI: {e}', exc_info=True)
- return not params_set
except Exception as e:
logger.error(f'Failed to get sdnc-model info for XNF {self.nf_name} from AAI: {e}',
exc_info=True)
- return not params_set
+ return not params_set
@staticmethod
def get(nf_name):
self.nf_names = kwargs.get('nfNames')
self.model_invariant_ids = kwargs.get('modelInvariantIDs')
self.model_version_ids = kwargs.get('modelVersionIDs')
+ self.model_names = kwargs.get('modelNames')
self.regex_matcher = re.compile('|'.join(raw_regex for raw_regex in self.nf_names))
def is_nf_in_filter(self, nf):
match = False
if self.model_version_ids and nf.model_version_id not in self.model_version_ids:
match = False
+ if self.model_names and nf.model_name not in self.model_names:
+ match = False
return match
[
+ {
+ "testName": "test_filter_model_name_true",
+ "nfFilter":{
+ "nfNames":[
+ "^pnf.*",
+ "^vnf.*"
+ ],
+ "modelInvariantIDs": [
+ ],
+ "modelVersionIDs": [
+
+ ],
+ "modelNames": [
+ "pnf102"
+ ]
+ },
+ "nfName": "pnf1",
+ "modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
+ "modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
+ "expectedResult": true
+ },
+ {
+ "testName": "test_filter_model_name_false",
+ "nfFilter":{
+ "nfNames":[
+ "^pnf.*",
+ "^vnf.*"
+ ],
+ "modelInvariantIDs": [
+ ],
+ "modelVersionIDs": [
+
+ ],
+ "modelNames": [
+ "pnf102"
+ ]
+ },
+ "nfName": "pnf1",
+ "modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
+ "modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "Wrong_Model_Name",
+ "expectedResult": false
+ },
{
"testName": "test_filter_true_on_xnf",
"nfFilter":{
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": true
},
{
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
},
"nfName": "PNF-33",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": false
},
{
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": true
},
{
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "WrongModelInvariantUUID",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": false
},
{
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "WrongModelInvariantUUID",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": false
},
{
],
"modelVersionIDs": [
"e80a6ae3-cafd-4d24-850d-e14c084a5ca9"
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "e80a6ae3-cafd-4d24-850d-e14c084a5ca9",
+ "modelName": "pnf102",
"expectedResult": true
},
{
],
"modelVersionIDs": [
"e80a6ae3-cafd-4d24-850d-e14c084a5ca9"
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "WrongModelVersionID",
+ "modelName": "pnf102",
"expectedResult": false
},
{
],
"modelVersionIDs": [
"e80a6ae3-cafd-4d24-850d-e14c084a5ca9"
+ ],
+ "modelNames": [
+
]
},
"nfName": "pnf1",
"modelInvariantUUID": "7129e420-d396-4efb-af02-6b83499b12f8",
"modelVersionID": "WrongModelVersionID",
+ "modelName": "pnf102",
"expectedResult": false
}
]
def tearDownClass(cls):
super().tearDownClass()
- @patch('mod.network_function.NetworkFunction.set_sdnc_params')
+ @patch('mod.network_function.NetworkFunction.set_nf_model_params')
@patch('mod.subscription.Subscription.activate_subscription')
@patch('mod.aai_event_handler.NetworkFunction.delete')
def test_process_aai_update_and_delete_events(self, mock_nf_delete, mock_activate_sub,
def tearDownClass(cls):
super().tearDownClass()
- @patch('mod.network_function.NetworkFunction.set_sdnc_params')
+ @patch('mod.network_function.NetworkFunction.set_nf_model_params')
@patch.object(Session, 'get')
@patch.object(Session, 'put')
def test_aai_client_get_pm_sub_data_success(self, mock_put_session, mock_get_session,
@patch('mod.aai_client.get_aai_model_data')
def test_set_sdnc_params_true(self, mock_get_aai_model):
mock_get_aai_model.return_value = self.good_model_info
- self.assertTrue(self.nf_1.set_sdnc_params(self.app_conf))
+ self.assertTrue(self.nf_1.set_nf_model_params(self.app_conf))
@patch('mod.aai_client.get_aai_model_data')
def test_set_sdnc_params_false(self, mock_get_aai_model):
mock_get_aai_model.return_value = self.bad_model_info
- self.assertFalse(self.nf_1.set_sdnc_params(self.app_conf))
+ self.assertFalse(self.nf_1.set_nf_model_params(self.app_conf))
class NetworkFunctionFilterTest(TestCase):
@parameterized.expand(load_test_cases, name_func=custom_name_func)
- def test(self, test_name, nf_filter, nf_name, model_invariant_uuid, model_version_id,
+ def test(self, test_name, nf_filter, nf_name, model_invariant_uuid,
+ model_version_id, model_name,
expected_result):
nf_filter = NetworkFunctionFilter(**nf_filter)
self.assertEqual(nf_filter.is_nf_in_filter(NetworkFunction(nf_name=nf_name,
model_invariant_id=model_invariant_uuid,
- model_version_id=model_version_id)),
+ model_version_id=model_version_id,
+ model_name=model_name)),
expected_result)
def test_filter_true_on_multiple_modelInvariantIDs(self):
'7129e420-d396-4efb-af02-6b83499b12f8'
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
})
self.assertTrue(nf_filter.is_nf_in_filter(
NetworkFunction(nf_name='pnf1',
model_invariant_id='7129e420-d396-4efb-af02-6b83499b12f8',
- model_version_id='e80a6ae3-cafd-4d24-850d-e14c084a5ca9')))
+ model_version_id='e80a6ae3-cafd-4d24-850d-e14c084a5ca9',
+ model_name='pnf_102')))
def test_filter_false_on_modelInvariantIDs_being_false_and_pnfname_being_true(self):
nf_filter = NetworkFunctionFilter(**{
'7129e420-d396-4efb-af02-6b83499b12f8'
],
"modelVersionIDs": [
+ ],
+ "modelNames": [
+
]
})
self.assertFalse(nf_filter.is_nf_in_filter(
NetworkFunction(nf_name='pnf1',
model_invariant_id='WrongModelInvariantUUID',
- model_version_id='e80a6ae3-cafd-4d24-850d-e14c084a5ca9')))
+ model_version_id='e80a6ae3-cafd-4d24-850d-e14c084a5ca9',
+ model_name='pnf_102')))