From 730cfaff466fb3c9b1446ecef5213916195ff861 Mon Sep 17 00:00:00 2001 From: Gabriel Cuba Date: Mon, 13 Mar 2023 22:26:38 -0500 Subject: [PATCH] Feature 10975: get flavor-id from additionalParams if specified Change-Id: I1c9b1ec43c80f3793b475187681f4c2005d77375 Signed-off-by: Gabriel Cuba --- NG-RO/osm_ng_ro/ns.py | 19 +++- NG-RO/osm_ng_ro/tests/test_ns.py | 89 +++++++++++++++++++ ...tantiation_parameter-d5fa508f484ea743.yaml | 20 +++++ 3 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/feature_10975_Use_existing_flavor-id_as_an_instantiation_parameter-d5fa508f484ea743.yaml diff --git a/NG-RO/osm_ng_ro/ns.py b/NG-RO/osm_ng_ro/ns.py index a5556725..ece7ee5b 100644 --- a/NG-RO/osm_ng_ro/ns.py +++ b/NG-RO/osm_ng_ro/ns.py @@ -1484,13 +1484,13 @@ class Ns(object): vnf_preffix = "vnfrs:{}".format(vnfr_id) ns_preffix = "nsrs:{}".format(nsr_id) image_text = ns_preffix + ":image." + target_vdu["ns-image-id"] - flavor_text = ns_preffix + ":flavor." + target_vdu["ns-flavor-id"] - extra_dict = {"depends_on": [image_text, flavor_text]} + extra_dict = {"depends_on": [image_text]} net_list = [] persistent_root_disk = {} persistent_ordinary_disk = {} vdu_instantiation_volumes_list = [] + vdu_instantiation_flavor_id = None disk_list = [] vnfd_id = vnfr["vnfd-id"] vnfd = db.get_one("vnfds", {"_id": vnfd_id}) @@ -1528,8 +1528,19 @@ class Ns(object): if target_vdu.get("additionalParams"): vdu_instantiation_volumes_list = ( - target_vdu.get("additionalParams").get("OSM").get("vdu_volumes") + target_vdu.get("additionalParams").get("OSM", {}).get("vdu_volumes") ) + vdu_instantiation_flavor_id = ( + target_vdu.get("additionalParams").get("OSM", {}).get("vim_flavor_id") + ) + + # flavor id + if vdu_instantiation_flavor_id: + flavor_id = vdu_instantiation_flavor_id + else: + flavor_text = ns_preffix + ":flavor." + target_vdu["ns-flavor-id"] + flavor_id = "TASK-" + flavor_text + extra_dict["depends_on"].append(flavor_text) if vdu_instantiation_volumes_list: # Find the root volumes and add to the disk_list @@ -1571,7 +1582,7 @@ class Ns(object): "description": target_vdu["vdu-name"], "start": True, "image_id": "TASK-" + image_text, - "flavor_id": "TASK-" + flavor_text, + "flavor_id": flavor_id, "affinity_group_list": affinity_group_list, "net_list": net_list, "cloud_config": cloud_config or None, diff --git a/NG-RO/osm_ng_ro/tests/test_ns.py b/NG-RO/osm_ng_ro/tests/test_ns.py index d96d6a23..d966a861 100644 --- a/NG-RO/osm_ng_ro/tests/test_ns.py +++ b/NG-RO/osm_ng_ro/tests/test_ns.py @@ -206,6 +206,25 @@ expected_extra_dict2 = { "start": True, }, } + +expected_extra_dict3 = { + "depends_on": [ + f"{ns_preffix}:image.0", + ], + "params": { + "affinity_group_list": [], + "availability_zone_index": None, + "availability_zone_list": None, + "cloud_config": None, + "description": "without_volumes-VM", + "disk_list": [], + "flavor_id": "flavor_test", + "image_id": f"TASK-{ns_preffix}:image.0", + "name": "sample_name-vnf-several-volu-without_volumes-VM-0", + "net_list": [], + "start": True, + }, +} tasks_by_target_record_id = { "nsrs:th47f48-9870-4169-b758-9732e1ff40f3": { "extra_dict": { @@ -4739,6 +4758,76 @@ class TestProcessVduParams(unittest.TestCase): persistent_root_disk, target_vdu, vdu_instantiation_vol_list, [] ) + @patch("osm_ng_ro.ns.Ns._sort_vdu_interfaces") + @patch("osm_ng_ro.ns.Ns._partially_locate_vdu_interfaces") + @patch("osm_ng_ro.ns.Ns._prepare_vdu_interfaces") + @patch("osm_ng_ro.ns.Ns._prepare_vdu_cloud_init") + @patch("osm_ng_ro.ns.Ns._prepare_vdu_ssh_keys") + @patch("osm_ng_ro.ns.Ns.find_persistent_root_volumes") + @patch("osm_ng_ro.ns.Ns.find_persistent_volumes") + @patch("osm_ng_ro.ns.Ns._add_persistent_root_disk_to_disk_list") + @patch("osm_ng_ro.ns.Ns._add_persistent_ordinary_disks_to_disk_list") + @patch("osm_ng_ro.ns.Ns._prepare_vdu_affinity_group_list") + def test_process_vdu_params_with_inst_flavor_id( + self, + mock_prepare_vdu_affinity_group_list, + mock_add_persistent_ordinary_disks_to_disk_list, + mock_add_persistent_root_disk_to_disk_list, + mock_find_persistent_volumes, + mock_find_persistent_root_volumes, + mock_prepare_vdu_ssh_keys, + mock_prepare_vdu_cloud_init, + mock_prepare_vdu_interfaces, + mock_locate_vdu_interfaces, + mock_sort_vdu_interfaces, + ): + """Instantiation volume list is empty.""" + target_vdu = deepcopy(target_vdu_wthout_persistent_storage) + + target_vdu["interfaces"] = interfaces_wth_all_positions + + vdu_instantiation_flavor_id = "flavor_test" + + target_vdu["additionalParams"] = { + "OSM": {"vim_flavor_id": vdu_instantiation_flavor_id} + } + mock_prepare_vdu_cloud_init.return_value = {} + mock_prepare_vdu_affinity_group_list.return_value = [] + + new_kwargs = deepcopy(kwargs) + new_kwargs.update( + { + "vnfr_id": vnfr_id, + "nsr_id": nsr_id, + "tasks_by_target_record_id": {}, + "logger": "logger", + } + ) + expected_extra_dict_copy = deepcopy(expected_extra_dict3) + vnfd = deepcopy(vnfd_wth_persistent_storage) + db.get_one.return_value = vnfd + result = Ns._process_vdu_params( + target_vdu, indata, vim_info=None, target_record_id=None, **new_kwargs + ) + mock_sort_vdu_interfaces.assert_called_once_with(target_vdu) + mock_locate_vdu_interfaces.assert_not_called() + mock_prepare_vdu_cloud_init.assert_called_once() + mock_add_persistent_root_disk_to_disk_list.assert_called_once() + mock_add_persistent_ordinary_disks_to_disk_list.assert_called_once() + mock_prepare_vdu_interfaces.assert_called_once_with( + target_vdu, + expected_extra_dict_copy, + ns_preffix, + vnf_preffix, + "logger", + {}, + [], + ) + self.assertDictEqual(result, expected_extra_dict_copy) + mock_prepare_vdu_ssh_keys.assert_called_once_with(target_vdu, None, {}) + mock_prepare_vdu_affinity_group_list.assert_called_once() + mock_find_persistent_volumes.assert_not_called() + @patch("osm_ng_ro.ns.Ns._sort_vdu_interfaces") @patch("osm_ng_ro.ns.Ns._partially_locate_vdu_interfaces") @patch("osm_ng_ro.ns.Ns._prepare_vdu_interfaces") diff --git a/releasenotes/notes/feature_10975_Use_existing_flavor-id_as_an_instantiation_parameter-d5fa508f484ea743.yaml b/releasenotes/notes/feature_10975_Use_existing_flavor-id_as_an_instantiation_parameter-d5fa508f484ea743.yaml new file mode 100644 index 00000000..918863f3 --- /dev/null +++ b/releasenotes/notes/feature_10975_Use_existing_flavor-id_as_an_instantiation_parameter-d5fa508f484ea743.yaml @@ -0,0 +1,20 @@ +####################################################################################### +# Copyright ETSI Contributors and Others. +# +# 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. +####################################################################################### +--- +features: + - | + Feature 10975: Get flavor-id from additionalParams if specified. -- 2.25.1