+ for vnf_params in ns_params["vnf"]:
+ for constituent_vnfd in nsd["constituent-vnfd"]:
+ if constituent_vnfd["member-vnf-index"] == vnf_params["member-vnf-index"]:
+ vnf_descriptor = vnfd_dict[constituent_vnfd["vnfd-id-ref"]]
+ break
+ else:
+ raise LcmException("Invalid instantiate parameter vnf:member-vnf-index={} is not present at nsd:"
+ "constituent-vnfd".format(vnf_params["member-vnf-index"]))
+ RO_vnf = {"vdus": {}, "networks": {}}
+ if vnf_params.get("vimAccountId"):
+ RO_vnf["datacenter"] = vim_account_2_RO(vnf_params["vimAccountId"])
+ if vnf_params.get("vdu"):
+ for vdu_params in vnf_params["vdu"]:
+ RO_vnf["vdus"][vdu_params["id"]] = {}
+ if vdu_params.get("volume"):
+ RO_vnf["vdus"][vdu_params["id"]]["devices"] = {}
+ for volume_params in vdu_params["volume"]:
+ RO_vnf["vdus"][vdu_params["id"]]["devices"][volume_params["name"]] = {}
+ if volume_params.get("vim-volume-id"):
+ RO_vnf["vdus"][vdu_params["id"]]["devices"][volume_params["name"]]["vim_id"] = \
+ volume_params["vim-volume-id"]
+ if vdu_params.get("interface"):
+ RO_vnf["vdus"][vdu_params["id"]]["interfaces"] = {}
+ for interface_params in vdu_params["interface"]:
+ RO_interface = {}
+ RO_vnf["vdus"][vdu_params["id"]]["interfaces"][interface_params["name"]] = RO_interface
+ if interface_params.get("ip-address"):
+ RO_interface["ip_address"] = interface_params["ip-address"]
+ if interface_params.get("mac-address"):
+ RO_interface["mac_address"] = interface_params["mac-address"]
+ if interface_params.get("floating-ip-required"):
+ RO_interface["floating-ip"] = interface_params["floating-ip-required"]
+ if vnf_params.get("internal-vld"):
+ for internal_vld_params in vnf_params["internal-vld"]:
+ RO_vnf["networks"][internal_vld_params["name"]] = {}
+ if internal_vld_params.get("vim-network-name"):
+ RO_vnf["networks"][internal_vld_params["name"]]["vim-network-name"] = \
+ internal_vld_params["vim-network-name"]
+ if internal_vld_params.get("ip-profile"):
+ RO_vnf["networks"][internal_vld_params["name"]]["ip-profile"] = \
+ ip_profile_2_RO(internal_vld_params["ip-profile"])
+ if internal_vld_params.get("internal-connection-point"):
+ for icp_params in internal_vld_params["internal-connection-point"]:
+ # look for interface
+ iface_found = False
+ for vdu_descriptor in vnf_descriptor["vdu"]:
+ for vdu_interface in vdu_descriptor["interface"]:
+ if vdu_interface.get("internal-connection-point-ref") == icp_params["id-ref"]:
+ if vdu_descriptor["id"] not in RO_vnf["vdus"]:
+ RO_vnf["vdus"][vdu_descriptor["id"]] = {}
+ if "interfaces" not in RO_vnf["vdus"][vdu_descriptor["id"]]:
+ RO_vnf["vdus"][vdu_descriptor["id"]]["interfaces"] = {}
+ RO_ifaces = RO_vnf["vdus"][vdu_descriptor["id"]]["interfaces"]
+ if vdu_interface["name"] not in RO_ifaces:
+ RO_ifaces[vdu_interface["name"]] = {}
+
+ RO_ifaces[vdu_interface["name"]]["ip_address"] = icp_params["ip-address"]
+ iface_found = True
+ break
+ if iface_found:
+ break
+ else:
+ raise LcmException("Invalid instantiate parameter vnf:member-vnf-index[{}]:"
+ "internal-vld:id-ref={} is not present at vnfd:internal-"
+ "connection-point".format(vnf_params["member-vnf-index"],
+ icp_params["id-ref"]))
+
+ if not RO_vnf["vdus"]:
+ del RO_vnf["vdus"]
+ if not RO_vnf["networks"]:
+ del RO_vnf["networks"]