if not self._validate_package_folders(storage_params, 'charms'):
raise EngineException("Charm defined in vnf[id={}] but not present in "
"package".format(indata["id"]))
+ vld_names = [] # For detection of duplicated VLD names
for ivld in get_iterable(indata.get("internal-vld")):
+ # BEGIN Detection of duplicated VLD names
+ ivld_name = ivld["name"]
+ if ivld_name in vld_names:
+ raise EngineException("Duplicated VLD name '{}' in vnfd[id={}]:internal-vld[id={}]"
+ .format(ivld["name"], indata["id"], ivld["id"]),
+ http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
+ else:
+ vld_names.append(ivld_name)
+ # END Detection of duplicated VLD names
for icp in get_iterable(ivld.get("internal-connection-point")):
icp_mark = False
for vdu in get_iterable(indata.get("vdu")):
# Cross references validation in the descriptor
# TODO validata that if contains cloud-init-file or charms, have artifacts _admin.storage."pkg-dir" is not none
for vld in get_iterable(indata.get("vld")):
+ if vld.get("mgmt-network") and vld.get("ip-profile-ref"):
+ raise EngineException("Error at vld[id='{}']:ip-profile-ref"
+ " You cannot set an ip-profile when mgmt-network is True"
+ .format(vld["id"]), http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for vnfd_cp in get_iterable(vld.get("vnfd-connection-point-ref")):
for constituent_vnfd in get_iterable(indata.get("constituent-vnfd")):
if vnfd_cp["member-vnf-index-ref"] == constituent_vnfd["member-vnf-index"]: