return extra_dict
- def _process_affinity_group_params(target_affinity_group, vim_info, target_record_id):
+ def _process_affinity_group_params(
+ target_affinity_group, vim_info, target_record_id
+ ):
extra_dict = {}
affinity_group_data = {
"scope": target_affinity_group["scope"],
}
+ if target_affinity_group.get("vim-affinity-group-id"):
+ affinity_group_data[
+ "vim-affinity-group-id"
+ ] = target_affinity_group["vim-affinity-group-id"]
+
extra_dict["params"] = {
"affinity_group_data": affinity_group_data,
}
extra_dict = {"depends_on": [image_text, flavor_text]}
net_list = []
+ # If the position info is provided for all the interfaces, it will be sorted
+ # according to position number ascendingly.
+ if all(
+ i.get("position") + 1
+ for i in target_vdu["interfaces"]
+ if i.get("position") is not None
+ ):
+ sorted_interfaces = sorted(
+ target_vdu["interfaces"],
+ key=lambda x: (x.get("position") is None, x.get("position")),
+ )
+ target_vdu["interfaces"] = sorted_interfaces
+
+ # If the position info is provided for some interfaces but not all of them, the interfaces
+ # which has specific position numbers will be placed and others' positions will not be taken care.
+ else:
+ if any(
+ i.get("position") + 1
+ for i in target_vdu["interfaces"]
+ if i.get("position") is not None
+ ):
+ n = len(target_vdu["interfaces"])
+ sorted_interfaces = [-1] * n
+ k, m = 0, 0
+ while k < n:
+ if target_vdu["interfaces"][k].get("position"):
+ idx = target_vdu["interfaces"][k]["position"]
+ sorted_interfaces[idx - 1] = target_vdu["interfaces"][k]
+ k += 1
+ while m < n:
+ if not target_vdu["interfaces"][m].get("position"):
+ idy = sorted_interfaces.index(-1)
+ sorted_interfaces[idy] = target_vdu["interfaces"][m]
+ m += 1
+
+ target_vdu["interfaces"] = sorted_interfaces
+
+ # If the position info is not provided for the interfaces, interfaces will be attached
+ # according to the order in the VNFD.
for iface_index, interface in enumerate(target_vdu["interfaces"]):
if interface.get("ns-vld-id"):
net_text = ns_preffix + ":vld." + interface["ns-vld-id"]
if ssh_keys:
cloud_config["key-pairs"] = ssh_keys
- disk_list = None
+ persistent_root_disk = {}
+ disk_list = []
+ vnfd_id = vnfr["vnfd-id"]
+ vnfd = self.db.get_one("vnfds", {"_id": vnfd_id})
+ for vdu in vnfd.get("vdu", ()):
+ if vdu["name"] == target_vdu["vdu-name"]:
+ for vsd in vnfd.get("virtual-storage-desc", ()):
+ if (
+ vsd.get("id")
+ == vdu.get("virtual-storage-desc", [[]])[0]
+ ):
+ root_disk = vsd
+ if root_disk.get(
+ "type-of-storage"
+ ) == "persistent-storage:persistent-storage" and root_disk.get(
+ "size-of-storage"
+ ):
+ persistent_root_disk[vsd["id"]] = {
+ "image_id": vdu.get("sw-image-desc"),
+ "size": root_disk["size-of-storage"],
+ }
+ disk_list.append(persistent_root_disk[vsd["id"]])
+
if target_vdu.get("virtual-storages"):
- disk_list = [
- {"size": disk["size-of-storage"]}
- for disk in target_vdu["virtual-storages"]
- if disk.get("type-of-storage")
- == "persistent-storage:persistent-storage"
- ]
+ for disk in target_vdu["virtual-storages"]:
+ if (
+ disk.get("type-of-storage")
+ == "persistent-storage:persistent-storage"
+ and disk["id"] not in persistent_root_disk.keys()
+ ):
+ disk_list.append({"size": disk["size-of-storage"]})
affinity_group_list = []
if target_vdu.get("affinity-or-anti-affinity-group-id"):
affinity_group = {}
- for affinity_group_id in target_vdu["affinity-or-anti-affinity-group-id"]:
+ for affinity_group_id in target_vdu[
+ "affinity-or-anti-affinity-group-id"
+ ]:
affinity_group_text = (
- ns_preffix + ":affinity-or-anti-affinity-group." + affinity_group_id
+ ns_preffix
+ + ":affinity-or-anti-affinity-group."
+ + affinity_group_id
)
extra_dict["depends_on"].append(affinity_group_text)
- affinity_group["affinity_group_id"] = "TASK-" + affinity_group_text
+ affinity_group["affinity_group_id"] = (
+ "TASK-" + affinity_group_text
+ )
affinity_group_list.append(affinity_group)
extra_dict["params"] = {
step = "process NS Affinity Groups"
_process_items(
target_list=indata.get("affinity-or-anti-affinity-group") or [],
- existing_list=db_nsr.get("affinity-or-anti-affinity-group") or [],
- db_record="nsrs:{}:affinity-or-anti-affinity-group".format(nsr_id),
+ existing_list=db_nsr.get("affinity-or-anti-affinity-group")
+ or [],
+ db_record="nsrs:{}:affinity-or-anti-affinity-group".format(
+ nsr_id
+ ),
db_update=db_nsr_update,
db_path="affinity-or-anti-affinity-group",
item="affinity-or-anti-affinity-group",