From c90db8ebb422e5874f75554c70f0f3606b0c993c Mon Sep 17 00:00:00 2001 From: aticig Date: Fri, 11 Mar 2022 21:14:22 +0300 Subject: [PATCH] Fix 1425 NG-RO unable to pin VNF with vim_account config If vnf vim-accounts has been changed during instantiation, the binding between new vim-account information and ns vld is provided through this fix. Fixing some code format errors Change-Id: I7f40e14749cae757843ddea8caeb14325aeaf0f2 Signed-off-by: aticig --- osm_lcm/ns.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 88bb69c..ab1ee3b 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -796,6 +796,37 @@ class NsLcm(LcmBase): if vld_params.get("common_id"): target_vld["common_id"] = vld_params.get("common_id") + # modify target["ns"]["vld"] with instantiation parameters to override vnf vim-account + def update_ns_vld_target(target, ns_params): + for vnf_params in ns_params.get("vnf", ()): + if vnf_params.get("vimAccountId"): + target_vnf = next( + ( + vnfr + for vnfr in db_vnfrs.values() + if vnf_params["member-vnf-index"] + == vnfr["member-vnf-index-ref"] + ), + None, + ) + vdur = next((vdur for vdur in target_vnf.get("vdur", ())), None) + for a_index, a_vld in enumerate(target["ns"]["vld"]): + target_vld = find_in_list( + get_iterable(vdur, "interfaces"), + lambda iface: iface.get("ns-vld-id") == a_vld["name"], + ) + if target_vld: + if vnf_params.get("vimAccountId") not in a_vld.get( + "vim_info", {} + ): + target["ns"]["vld"][a_index].get("vim_info").update( + { + "vim:{}".format(vnf_params["vimAccountId"]): { + "vim_network_name": "" + } + } + ) + nslcmop_id = db_nslcmop["_id"] target = { "name": db_nsr["name"], @@ -911,6 +942,8 @@ class NsLcm(LcmBase): vld_params.update(vld_instantiation_params) parse_vld_instantiation_params(target_vim, target_vld, vld_params, None) target["ns"]["vld"].append(target_vld) + # Update the target ns_vld if vnf vim_account is overriden by instantiation params + update_ns_vld_target(target, ns_params) for vnfr in db_vnfrs.values(): vnfd = find_in_list( -- 2.17.1