X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fns.py;h=e7291ea782c8394c4c3e7d638b955ea4f3d46210;hb=179e00207688285e282103994967b22f3b5852ca;hp=b6524cc4603de2aa8d84f96345e422c914750255;hpb=2b24d62cdf354f0edf80546408bf96dc1df8ef3c;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/ns.py b/NG-RO/osm_ng_ro/ns.py index b6524cc4..e7291ea7 100644 --- a/NG-RO/osm_ng_ro/ns.py +++ b/NG-RO/osm_ng_ro/ns.py @@ -113,12 +113,14 @@ class Ns(object): "image": Ns._process_image_params, "flavor": Ns._process_flavor_params, "vdu": Ns._process_vdu_params, + "affinity-or-anti-affinity-group": Ns._process_affinity_group_params, } self.db_path_map = { "net": "vld", "image": "image", "flavor": "flavor", "vdu": "vdur", + "affinity-or-anti-affinity-group": "affinity-or-anti-affinity-group", } def init_db(self, target_version): @@ -1067,14 +1069,47 @@ class Ns(object): if ssh_keys: cloud_config["key-pairs"] = ssh_keys - disk_list = None + persistent_root_disk = {} + disk_list = [] + vnfd_id = vnfr["vnfd-id"] + vnfd = 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"]: + affinity_group_text = ( + 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_list.append(affinity_group) extra_dict["params"] = { "name": "{}-{}-{}-{}".format( @@ -1087,6 +1122,7 @@ class Ns(object): "start": True, "image_id": "TASK-" + image_text, "flavor_id": "TASK-" + flavor_text, + "affinity_group_list": affinity_group_list, "net_list": net_list, "cloud_config": cloud_config or None, "disk_list": disk_list, @@ -1096,6 +1132,39 @@ class Ns(object): return extra_dict + @staticmethod + def _process_affinity_group_params( + target_affinity_group: Dict[str, Any], + indata: Dict[str, Any], + vim_info: Dict[str, Any], + target_record_id: str, + **kwargs: Dict[str, Any], + ) -> Dict[str, Any]: + """Get affinity or anti-affinity group parameters. + + Args: + target_affinity_group (Dict[str, Any]): [description] + indata (Dict[str, Any]): [description] + vim_info (Dict[str, Any]): [description] + target_record_id (str): [description] + + Returns: + Dict[str, Any]: [description] + """ + extra_dict = {} + + affinity_group_data = { + "name": target_affinity_group["name"], + "type": target_affinity_group["type"], + "scope": target_affinity_group["scope"], + } + + extra_dict["params"] = { + "affinity_group_data": affinity_group_data, + } + + return extra_dict + def calculate_diff_items( self, indata, @@ -1166,7 +1235,7 @@ class Ns(object): ) target_list = target_vnf.get(db_path, []) if target_vnf else [] existing_list = vnfr.get(db_path, []) - elif item in ("image", "flavor"): + elif item in ("image", "flavor", "affinity-or-anti-affinity-group"): db_record = "nsrs:{}:{}".format(nsr_id, db_path) target_list = indata.get(item, []) existing_list = db_nsr.get(item, []) @@ -1342,7 +1411,7 @@ class Ns(object): changes_list = [] # NS vld, image and flavor - for item in ["net", "image", "flavor"]: + for item in ["net", "image", "flavor", "affinity-or-anti-affinity-group"]: self.logger.debug("process NS={} {}".format(nsr_id, item)) diff_items, task_index = self.calculate_diff_items( indata=indata,