+ def _get_affinity_or_anti_affinity_group_data_from_vnfd(self, vnfd, ag_id):
+ """
+ Gets affinity-or-anti-affinity-group info from df and returns the desired affinity group
+ """
+ affinity_or_anti_affinity_group = utils.find_in_list(
+ vnfd.get("df", [[]])[0].get("affinity-or-anti-affinity-group", ()), lambda ag: ag["id"] == ag_id
+ )
+ ag_data = {}
+ if affinity_or_anti_affinity_group and affinity_or_anti_affinity_group.get("id"):
+ ag_data["ag-id"] = affinity_or_anti_affinity_group["id"]
+ if affinity_or_anti_affinity_group and affinity_or_anti_affinity_group.get("type"):
+ ag_data["type"] = affinity_or_anti_affinity_group["type"]
+ if affinity_or_anti_affinity_group and affinity_or_anti_affinity_group.get("scope"):
+ ag_data["scope"] = affinity_or_anti_affinity_group["scope"]
+ return ag_data
+
+ def _add_affinity_or_anti_affinity_group_to_nsr(self, nsr_descriptor, ag_data, ag_prefix_name):
+ """
+ Adds affinity-or-anti-affinity-group to nsr checking first it is not already added
+ """
+ ag = next(
+ (
+ f
+ for f in nsr_descriptor["affinity-or-anti-affinity-group"]
+ if all(f.get(k) == ag_data[k] for k in ag_data)
+ ),
+ None,
+ )
+ if not ag:
+ ag_data["id"] = str(len(nsr_descriptor["affinity-or-anti-affinity-group"]))
+ ag_data["name"] = "{}-{}-{}".format(ag_prefix_name, ag_data["ag-id"][:32], ag_data.get("id") or 0)
+ nsr_descriptor["affinity-or-anti-affinity-group"].append(ag_data)
+