X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=NG-RO%2Fosm_ng_ro%2Fns.py;h=df5dfd210339c77081d378fabc6f6e55ca38aa06;hb=562623c1fc60ffb0756070f48943bfc8bb428202;hp=f3b073e1d83ddaadbe4875d9f8ce5af37e8bf751;hpb=a1c2b40a68be5591cf36775aa48bc965116ae340;p=osm%2FRO.git diff --git a/NG-RO/osm_ng_ro/ns.py b/NG-RO/osm_ng_ro/ns.py index f3b073e1..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): @@ -1000,10 +1002,13 @@ class Ns(object): if deep_get( tasks_by_target_record_id, net_text, + "extra_dict", "params", "net_type", ): - tasks_by_target_record_id[net_text]["params"]["net_type"] = "data" + tasks_by_target_record_id[net_text]["extra_dict"]["params"][ + "net_type" + ] = "data" net_item["use"] = "data" net_item["model"] = interface["type"] @@ -1073,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], @@ -1084,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, @@ -1093,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, @@ -1153,7 +1205,7 @@ class Ns(object): if item in ("net", "vdu"): if vnfr is None: db_record = "nsrs:{}:{}".format(nsr_id, db_path) - target_list = indata.get("ns", []).get(db_path, []) + target_list = indata.get("ns", []).get(db_path, []) existing_list = db_nsr.get(db_path, []) else: db_record = "vnfrs:{}:{}".format(vnfr_id, db_path) @@ -1163,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, []) @@ -1285,18 +1337,18 @@ class Ns(object): "task_index": task_index, } - diff_items.append( - { - "deployment_info": deployment_info, - "target_id": target_vim, - "item": item_, - "action": "CREATE", - "target_record": f"{db_record}.{item_index}.vim_info.{target_vim}", - "target_record_id": target_record_id, - "extra_dict": extra_dict, - "common_id": target_item.get("common_id", None), - } - ) + new_item = { + "deployment_info": deployment_info, + "target_id": target_vim, + "item": item_, + "action": "CREATE", + "target_record": f"{db_record}.{item_index}.vim_info.{target_vim}", + "target_record_id": target_record_id, + "extra_dict": extra_dict, + "common_id": target_item.get("common_id", None), + } + diff_items.append(new_item) + tasks_by_target_record_id[target_record_id] = new_item task_index += 1 db_nsr_update[db_path + ".{}".format(item_index)] = target_item @@ -1339,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,