Feature 7184: Set at instantiation records if vld connect pci interfaces 86/9986/2
authortierno <alfonso.tiernosepulveda@telefonica.com>
Fri, 13 Nov 2020 15:56:51 +0000 (15:56 +0000)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Mon, 16 Nov 2020 10:30:00 +0000 (11:30 +0100)
Change-Id: I2118c23aa17a5d7a21a56802dede4753f8054da5
Signed-off-by: tierno <alfonso.tiernosepulveda@telefonica.com>
osm_nbi/instance_topics.py

index ace7f8e..43f2853 100644 (file)
@@ -448,7 +448,6 @@ class NsrTopic(BaseTopic):
                     f = next((f for f in nsr_descriptor["flavor"] if
                               all(f.get(k) == flavor_data[k] for k in flavor_data)), None)
                     if not f:
-                        flavor_data["vim_info"] = []
                         flavor_data["name"] = vdu["id"][:56] + "-flv"
                         flavor_data["id"] = str(len(nsr_descriptor["flavor"]))
                         nsr_descriptor["flavor"].append(flavor_data)
@@ -461,7 +460,6 @@ class NsrTopic(BaseTopic):
                     img = next((f for f in nsr_descriptor["image"] if
                                 all(f.get(k) == image_data[k] for k in image_data)), None)
                     if not img:
-                        image_data["vim_info"] = []
                         image_data["id"] = str(len(nsr_descriptor["image"]))
                         nsr_descriptor["image"].append(image_data)
                         img = image_data
@@ -479,37 +477,43 @@ class NsrTopic(BaseTopic):
                         vdu_iface = {
                             x: iface[x] for x in ("name", "ip-address", "mac-address", "internal-connection-point-ref",
                                                   "external-connection-point-ref") if iface.get(x) is not None}
+                        if iface.get("ip-address"):
+                            vdu_iface["fixed-ip"] = True
+                        if iface.get("mac-address"):
+                            vdu_iface["fixed-mac"] = True
                         if vnfd_mgmt_cp and iface.get("external-connection-point-ref") == vnfd_mgmt_cp:
                             vdu_iface["mgmt-vnf"] = True
                         if iface.get("mgmt-interface"):
                             vdu_iface["mgmt-interface"] = True  # TODO change to mgmt-vdu
                         if iface.get("virtual-interface"):
-                            if iface["virtual-interface"].get("type"):
-                                iface["type"] = iface["virtual-interface"]["type"]
-                            if iface["virtual-interface"].get("vpci"):
-                                iface["vpci"] = iface["virtual-interface"]["vpci"]
-                            if iface["virtual-interface"].get("bandwidth"):
-                                iface["bandwidth"] = iface["virtual-interface"]["bandwidth"]
+                            vdu_iface.update({x: iface["virtual-interface"][x] for x in ("type", "vcpi", "bandwidth")
+                                              if iface["virtual-interface"].get(x) is not None})
 
                         # look for network where this interface is connected
                         if iface.get("external-connection-point-ref"):
-                            for nsd_vld in get_iterable(nsd.get("vld")):
+                            for vld_index, nsd_vld in enumerate(get_iterable(nsd.get("vld"))):
                                 for nsd_vld_cp in get_iterable(nsd_vld.get("vnfd-connection-point-ref")):
                                     if nsd_vld_cp.get("vnfd-connection-point-ref") == \
                                             iface["external-connection-point-ref"] and \
                                             nsd_vld_cp.get("member-vnf-index-ref") == member_vnf["member-vnf-index"]:
                                         vdu_iface["ns-vld-id"] = nsd_vld["id"]
+                                        # if interface is of type PCI, mark connected vld as of type PCI
+                                        if vdu_iface.get("type") in ("SR-IOV", "PCI-PASSTHROUGH"):
+                                            nsr_descriptor["vld"][vld_index]["pci-interfaces"] = True
                                         break
                                 else:
                                     continue
                                 break
                         elif iface.get("internal-connection-point-ref"):
-                            for vnfd_ivld in get_iterable(vnfd.get("internal-vld")):
+                            for vld_index, vnfd_ivld in enumerate(get_iterable(vnfd.get("internal-vld"))):
                                 for vnfd_ivld_icp in get_iterable(vnfd_ivld.get("internal-connection-point")):
                                     if vnfd_ivld_icp.get("id-ref") == iface["internal-connection-point-ref"]:
                                         vdu_iface["vnf-vld-id"] = vnfd_ivld["id"]
                                         if vnfd_ivld_icp.get("ip-address"):
                                             vdu_iface["ip-address"] = vnfd_ivld_icp["ip-address"]
+                                        # if interface is of type PCI, mark connected vld as of type PCI
+                                        if vdu_iface.get("type") in ("SR-IOV", "PCI-PASSTHROUGH"):
+                                            vnfr_descriptor["vld"][vld_index]["pci-interfaces"] = True
                                         break
                                 else:
                                     continue
@@ -994,9 +998,11 @@ class NsLcmOpTopic(BaseTopic):
                             if iface_inst_param.get("ip-address"):
                                 vnfr_update[vnfr_update_text + ".ip-address"] = increment_ip_mac(
                                     iface_inst_param.get("ip-address"), vdur.get("count-index", 0))
+                                vnfr_update[vnfr_update_text + ".fixed-ip"] = True
                             if iface_inst_param.get("mac-address"):
                                 vnfr_update[vnfr_update_text + ".mac-address"] = increment_ip_mac(
                                     iface_inst_param.get("mac-address"), vdur.get("count-index", 0))
+                                vnfr_update[vnfr_update_text + ".fixed-mac"] = True
                 # get vnf.internal-vld.internal-conection-point instantiation params to update vnfr.vdur.interfaces
                 # TODO update vld with the ip-profile
                 for ivld_inst_param in get_iterable(vnf_inst_params.get("internal-vld")):
@@ -1009,9 +1015,11 @@ class NsLcmOpTopic(BaseTopic):
                                     if icp_inst_param.get("ip-address"):
                                         vnfr_update[vnfr_update_text + ".ip-address"] = increment_ip_mac(
                                             icp_inst_param.get("ip-address"), vdur.get("count-index", 0))
+                                        vnfr_update[vnfr_update_text + ".fixed-ip"] = True
                                     if icp_inst_param.get("mac-address"):
                                         vnfr_update[vnfr_update_text + ".mac-address"] = increment_ip_mac(
                                             icp_inst_param.get("mac-address"), vdur.get("count-index", 0))
+                                        vnfr_update[vnfr_update_text + ".fixed-mac"] = True
                                     break
             # get ip address from instantiation parameters.vld.vnfd-connection-point-ref
             for vld_inst_param in get_iterable(indata.get("vld")):
@@ -1027,9 +1035,11 @@ class NsLcmOpTopic(BaseTopic):
                                 if vnfcp_inst_param.get("ip-address"):
                                     vnfr_update[vnfr_update_text + ".ip-address"] = increment_ip_mac(
                                         vnfcp_inst_param.get("ip-address"), vdur.get("count-index", 0))
+                                    vnfr_update[vnfr_update_text + ".fixed-ip"] = True
                                 if vnfcp_inst_param.get("mac-address"):
                                     vnfr_update[vnfr_update_text + ".mac-address"] = increment_ip_mac(
                                         vnfcp_inst_param.get("mac-address"), vdur.get("count-index", 0))
+                                    vnfr_update[vnfr_update_text + ".fixed-mac"] = True
                                 break
 
             vnfr_update["vim-account-id"] = vim_account