X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FRO.git;a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fns.py;fp=NG-RO%2Fosm_ng_ro%2Fns.py;h=df5dfd210339c77081d378fabc6f6e55ca38aa06;hp=b6524cc4603de2aa8d84f96345e422c914750255;hb=b70f4ed7ed2bce01050a05ea01f9c676200edac9;hpb=4308ea74573c08513882236e9076e422b47216e0 diff --git a/NG-RO/osm_ng_ro/ns.py b/NG-RO/osm_ng_ro/ns.py index b6524cc4..df5dfd21 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): @@ -1076,6 +1078,19 @@ class Ns(object): == "persistent-storage:persistent-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( indata["name"][:16], @@ -1087,6 +1102,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 +1112,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 +1215,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 +1391,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,