Skip to content
Snippets Groups Projects
Commit f8d9d32a authored by elumalai's avatar elumalai
Browse files

Bug 2370: Fix for Healing fails if the corresponding flavor does not exist in VIM


Change-Id: Ic8c0b4bf6e39c1ad8d8d3ef3ee3acd0ad251615c
Signed-off-by: default avatarelumalai <deepika.e@tataelxsi.co.in>
parent 53f34cf8
No related branches found
No related tags found
No related merge requests found
Pipeline #17375 passed with stage
in 4 minutes and 2 seconds
......@@ -1918,6 +1918,7 @@ class Ns(object):
vim_info: Dict[str, Any],
target_record_id: str,
target_id: str,
flavor_task_id: str,
**kwargs: Dict[str, Any],
) -> Dict[str, Any]:
"""Function to process VDU parameters to recreate.
......@@ -2087,7 +2088,7 @@ class Ns(object):
"description": existing_vdu["vdu-name"],
"start": True,
"image_id": vim_details["image"]["id"],
"flavor_id": vim_details["flavor"]["id"],
"flavor_id": "TASK-" + flavor_task_id,
"affinity_group_list": affinity_group_list,
"net_list": net_list,
"cloud_config": cloud_config or None,
......@@ -2895,6 +2896,94 @@ class Ns(object):
return volumes_list
def _process_recreate_flavor_params(
self,
existing_vdu: Dict[str, Any],
db_nsr: Dict[str, Any],
vim_info: Dict[str, Any],
target_record_id: str,
**kwargs: Dict[str, Any],
) -> Dict[str, Any]:
"""Method to process Flavor parameters to recreate.
Args:
existing_vdu (Dict[str, Any]): [description]
db_nsr (Dict[str, Any]): [description]
vim_info (Dict[str, Any]): [description]
target_record_id (str): [description]
target_id (str): [description]
kwargs (dict)
Returns:
vdu_flavor_dict: (Dict[str, Any])
"""
try:
vdu_flavor_id = existing_vdu.get("ns-flavor-id")
target_flavor = next(
filter(
lambda vdu_flavor_dict: vdu_flavor_dict["id"] == vdu_flavor_id,
db_nsr.get("flavor"),
),
None,
)
vdu_flavor_dict = Ns._process_flavor_params(
target_flavor=target_flavor,
indata={},
vim_info=vim_info,
target_record_id=target_record_id,
**kwargs,
)
vdu_flavor_dict["name"] = target_flavor["name"]
return vdu_flavor_dict
except (DbException, KeyError, ValueError, TypeError) as error:
raise NsException(error)
def _prepare_flavor_create_item(
self,
existing_instance: dict,
db_nsr: dict,
target_viminfo: dict,
target_record_id: str,
target_vim: str,
action_id: str,
task_index: int,
item_index: int,
db_record_flavor: str,
changes_list: list,
**kwargs,
) -> str:
flavor_data = self._process_recreate_flavor_params(
existing_instance,
db_nsr,
target_viminfo,
target_record_id,
**kwargs,
)
flavor_task_id = f"{action_id}:{task_index}"
flavor_item = {
"deployment_info": {
"action_id": action_id,
"nsr_id": kwargs["nsr_id"],
"task_index": task_index,
},
"target_id": target_vim,
"item": "flavor",
"action": "CREATE",
"target_record": f"{db_record_flavor}.{item_index}.vim_info.{target_vim}",
# "target_record_id": "{}.{}".format(
# db_record_flavor, existing_instance["id"]
# ),
"target_record_id": target_record_id,
"extra_dict": flavor_data,
"task_id": flavor_task_id,
}
changes_list.append(flavor_item)
return flavor_task_id
def prepare_changes_to_recreate(
self,
indata,
......@@ -2917,6 +3006,7 @@ class Ns(object):
# set list with diffs:
changes_list = []
db_path = self.db_path_map["vdu"]
db_path_flavor = self.db_path_map["flavor"]
target_list = indata.get("healVnfData", {})
vdu2cloud_init = indata.get("cloud_init_content") or {}
ro_nsr_public_key = db_ro_nsr["public_key"]
......@@ -2927,6 +3017,7 @@ class Ns(object):
vnfr_id = target_vnf["vnfInstanceId"]
existing_vnf = db_vnfrs.get(vnfr_id, {})
db_record = "vnfrs:{}:{}".format(vnfr_id, db_path)
db_record_flavor = "nsrs:{}:{}".format(nsr_id, db_path_flavor)
# vim_account_id = existing_vnf.get("vim-account-id", "")
target_vdus = target_vnf.get("additionalParams", {}).get("vdu", [])
......@@ -2953,6 +3044,10 @@ class Ns(object):
and instance["count-index"] == count_index
):
existing_instance = instance
item_index_flv = instance.get("ns-flavor-id")
target_record_id_flv = "{}.{}".format(
db_record_flavor, instance.get("ns-flavor-id")
)
break
else:
item_index += 1
......@@ -3001,7 +3096,34 @@ class Ns(object):
delete_task_id = f"{action_id}:{task_index}"
task_index += 1
# step 2 vdu to be created
kwargs = {
"vnfr_id": vnfr_id,
"nsr_id": nsr_id,
"vnfr": existing_vnf,
"vdu2cloud_init": vdu2cloud_init,
"tasks_by_target_record_id": tasks_by_target_record_id,
"logger": self.logger,
"db": self.db,
"fs": self.fs,
"ro_nsr_public_key": ro_nsr_public_key,
}
# step 2 check if old flavor exists or prepare to create it
flavor_task_id = self._prepare_flavor_create_item(
existing_instance=existing_instance,
db_nsr=db_nsr,
target_viminfo=target_viminfo,
target_record_id=target_record_id_flv,
target_vim=target_vim,
action_id=action_id,
task_index=task_index + 1,
item_index=item_index_flv,
db_record_flavor=db_record_flavor,
changes_list=changes_list,
**kwargs,
)
# step 3 vdu to be created
kwargs = {}
kwargs.update(
{
......@@ -3023,11 +3145,13 @@ class Ns(object):
target_viminfo,
target_record_id,
target_vim,
flavor_task_id,
**kwargs,
)
# The CREATE task depens on the DELETE task
extra_dict["depends_on"] = [delete_task_id]
extra_dict["depends_on"].append(flavor_task_id)
# Add volumes created from created_items if any
# Ports should be deleted with delete task and automatically created with create task
......
#######################################################################################
# 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.
#######################################################################################
---
prelude: >
Replace this text with content to appear at the top of the section for this
release. All of the prelude content is merged together and then rendered
separately from the items listed in other parts of the file, so the text
needs to be worded so that both the prelude and the other items make sense
when read independently. This may mean repeating some details. Not every
release note requires a prelude. Usually only notes describing major
features or adding release theme details should have a prelude.
features:
- |
List new features here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
issues:
- |
List known issues here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
upgrade:
- |
List upgrade notes here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
deprecations:
- |
List deprecations notes here, or remove this section. All of the list
items in this section are combined when the release notes are rendered, so
the text needs to be worded so that it does not depend on any information
only available in another section, such as the prelude. This may mean
repeating some details.
critical:
- |
Add critical notes here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
security:
- |
Add security notes here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
fixes:
- |
Add normal bug fixes here, or remove this section. All of the list items
in this section are combined when the release notes are rendered, so the
text needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
other:
- |
Add other notes here, or remove this section. All of the list items in
this section are combined when the release notes are rendered, so the text
needs to be worded so that it does not depend on any information only
available in another section, such as the prelude. This may mean repeating
some details.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment