guest_epa_quota.get("cpu-pinning-policy") == "DEDICATED"
and not epa_vcpu_set
):
+ # Pinning policy "REQUIRE" uses threads as host should support SMT architecture
+ # Pinning policy "ISOLATE" uses cores as host should not support SMT architecture
+ # Pinning policy "PREFER" uses threads in case host supports SMT architecture
numa[
"cores"
- if guest_epa_quota.get("cpu-thread-pinning-policy") != "PREFER"
+ if guest_epa_quota.get("cpu-thread-pinning-policy") == "ISOLATE"
else "threads"
] = max(vcpu_count, 1)
local_epa_vcpu_set = True
"id": vim_info.get("vim_network_id"),
},
}
- elif target_vld.get("mgmt-network"):
+ elif target_vld.get("mgmt-network") and not vim_info.get("provider_network"):
extra_dict["find_params"] = {
"mgmt": True,
"name": target_vld["id"],
persistent_root_disk[vsd["id"]] = {
"image_id": vdu.get("sw-image-desc"),
"size": root_disk.get("size-of-storage"),
+ "keep": Ns.is_volume_keeping_required(root_disk),
}
disk_list.append(persistent_root_disk[vsd["id"]])
if disk["id"] not in persistent_disk.keys():
persistent_disk[disk["id"]] = {
"size": disk.get("size-of-storage"),
+ "keep": Ns.is_volume_keeping_required(disk),
}
disk_list.append(persistent_disk[disk["id"]])
+ @staticmethod
+ def is_volume_keeping_required(virtual_storage_desc: Dict[str, Any]) -> bool:
+ """Function to decide keeping persistent volume
+ upon VDU deletion.
+
+ Args:
+ virtual_storage_desc (Dict[str, Any]): virtual storage description dictionary
+
+ Returns:
+ bool (True/False)
+ """
+
+ if not virtual_storage_desc.get("vdu-storage-requirements"):
+ return False
+ for item in virtual_storage_desc.get("vdu-storage-requirements", {}):
+ if item.get("key") == "keep-volume" and item.get("value") == "true":
+ return True
+ return False
+
@staticmethod
def _sort_vdu_interfaces(target_vdu: dict) -> None:
"""Sort the interfaces according to position number.
if vdu["name"] == target_vdu["vdu-name"]:
for vsd in vnfd.get("virtual-storage-desc", ()):
root_disk = Ns._select_persistent_root_disk(vsd, vdu)
-
if not root_disk:
continue
persistent_root_disk[vsd["id"]] = {
"image_id": vdu.get("sw-image-desc"),
"size": root_disk["size-of-storage"],
+ "keep": Ns.is_volume_keeping_required(root_disk),
}
disk_list.append(persistent_root_disk[vsd["id"]])
):
persistent_ordinary_disk[disk["id"]] = {
"size": disk["size-of-storage"],
+ "keep": Ns.is_volume_keeping_required(disk),
}
disk_list.append(persistent_ordinary_disk[disk["id"]])