# TODO validate with pyangbind, serialize
# Cross references validation in the descriptor
- if indata.get("mgmt-interface"):
- if indata["mgmt-interface"].get("cp"):
- for cp in get_iterable(indata.get("connection-point")):
- if cp["name"] == indata["mgmt-interface"]["cp"]:
- break
- else:
- raise EngineException("mgmt-interface:cp='{} must match an existing connection-point"
- .format(indata["mgmt-interface"].get("cp")),
- http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
- else:
+ if not indata.get("mgmt-interface"):
raise EngineException("'mgmt-interface' is a mandatory field and it is not defined",
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
+ if indata["mgmt-interface"].get("cp"):
+ for cp in get_iterable(indata.get("connection-point")):
+ if cp["name"] == indata["mgmt-interface"]["cp"]:
+ break
+ else:
+ raise EngineException("mgmt-interface:cp='{}' must match an existing connection-point"
+ .format(indata["mgmt-interface"]["cp"]),
+ http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for vdu in get_iterable(indata.get("vdu")):
for interface in get_iterable(vdu.get("interface")):
if interface.get("external-connection-point-ref"):
for cp in get_iterable(indata.get("connection-point")):
- if cp["name"] == interface.get("external-connection-point-ref"):
+ if cp["name"] == interface["external-connection-point-ref"]:
break
else:
- raise EngineException("vdu[id='{}']:interface[name='{}']:external-connection-point-ref='{} "
+ raise EngineException("vdu[id='{}']:interface[name='{}']:external-connection-point-ref='{}' "
"must match an existing connection-point"
.format(vdu["id"], interface["name"],
interface["external-connection-point-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
- for interface in get_iterable(vdu.get("interface")):
- if interface.get("internal-connection-point-ref"):
+
+ elif interface.get("internal-connection-point-ref"):
for internal_cp in get_iterable(vdu.get("internal-connection-point")):
- if interface.get("internal-connection-point-ref") == internal_cp.get("id"):
+ if interface["internal-connection-point-ref"] == internal_cp.get("id"):
break
else:
- raise EngineException("vdu[id='{}']:interface[name='{}']:internal-connection-point-ref='{}' is "
- "not associated to an internal-connection-point".format
- (vdu["id"], interface["name"],
- interface["internal-connection-point-ref"]),
+ raise EngineException("vdu[id='{}']:interface[name='{}']:internal-connection-point-ref='{}' "
+ "must match an existing vdu:internal-connection-point"
+ .format(vdu["id"], interface["name"],
+ interface["internal-connection-point-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for ivld in get_iterable(indata.get("internal-vld")):
for icp in get_iterable(ivld.get("internal-connection-point")):
if icp_mark:
break
else:
- raise EngineException("'internal-vld='{}':internal-connection-point='{}'' must match an existing "
- "internal-connection-point".format(ivld["id"], icp["id-ref"]),
+ raise EngineException("internal-vld[id='{}']:internal-connection-point='{}' must match an existing "
+ "vdu:internal-connection-point".format(ivld["id"], icp["id-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
if ivld.get("ip-profile-ref"):
- for ip_prof in get_iterable(indata["ip-profiles"]):
+ for ip_prof in get_iterable(indata.get("ip-profiles")):
if ip_prof["name"] == get_iterable(ivld.get("ip-profile-ref")):
break
else:
- raise EngineException("internal-vld='{}':ip-profile-ref='{}' does not exist".format(
+ raise EngineException("internal-vld[id='{}']:ip-profile-ref='{}' does not exist".format(
ivld["id"], ivld["ip-profile-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for mp in get_iterable(indata.get("monitoring-param")):
mp_vmp_mark = False
for vdu in get_iterable(indata.get("vdu")):
for vmp in get_iterable(vdu.get("monitoring-param")):
- if vmp["id"] == mp["vdu-monitoring-param"]["vdu-monitoring-param-ref"] and vdu["id"] ==\
+ if vmp["id"] == mp["vdu-monitoring-param"].get("vdu-monitoring-param-ref") and vdu["id"] ==\
mp["vdu-monitoring-param"]["vdu-ref"]:
mp_vmp_mark = True
break
break
else:
raise EngineException("monitoring-param:vdu-monitoring-param:vdu-monitoring-param-ref='{}' not "
- "defined in VDU vdu[id='{}'] or does not exist an VDU with this id"
+ "defined at vdu[id='{}'] or vdu does not exist"
.format(mp["vdu-monitoring-param"]["vdu-monitoring-param-ref"],
mp["vdu-monitoring-param"]["vdu-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
if mp_vm_mark:
break
else:
- raise EngineException("monitoring-param:vdu-metric:vdu-metric-name-ref='{}' not defined in VDU "
- "vdu[id='{}'] or or does not exist an VDU with this id"
+ raise EngineException("monitoring-param:vdu-metric:vdu-metric-name-ref='{}' not defined at "
+ "vdu[id='{}'] or vdu does not exist"
.format(mp["vdu-metric"]["vdu-metric-name-ref"],
mp["vdu-metric"]["vdu-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
if mp["id"] == get_iterable(sc.get("vnf-monitoring-param-ref")):
break
else:
- raise EngineException("scaling-group-descriptor:name='{}':scaling-criteria:name='{}':"
- "vnf-monitoring-param-ref='{}' not defined in any 'monitoring-param"
- "['id']'".format(sgd["name"], sc["name"], sc["vnf-monitoring-param-ref"]),
+ raise EngineException("scaling-group-descriptor[name='{}']:scaling-criteria[name='{}']:"
+ "vnf-monitoring-param-ref='{}' not defined in any monitoring-param"
+ .format(sgd["name"], sc["name"], sc["vnf-monitoring-param-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for sgd_vdu in get_iterable(sgd.get("vdu")):
sgd_vdu_mark = False
if sgd_vdu_mark:
break
else:
- raise EngineException("scaling-group-descriptor[name='{}']:vdu not defined and"
- "it is mandatory in any 'scaling-group-descriptor'"
- .format(sgd["name"]),
+ raise EngineException("scaling-group-descriptor[name='{}']:vdu-id-ref={} does not match any vdu"
+ .format(sgd["name"], sgd_vdu["vdu-id-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
for sca in get_iterable(sgd.get("scaling-config-action")):
- sca_vcp_mark = False
- if indata.get("vnf-configuration"):
- for primitive in get_iterable(indata["vnf-configuration"].get("config-primitive")):
- if primitive["name"] == sca["vnf-config-primitive-name-ref"]:
- sca_vcp_mark = True
- break
- else:
- raise EngineException("scaling-group-descriptor:name='{}':scaling-config-action:vnf-config-"
- "primitive-name-ref='{}' not defined in "
- "'vnf-configuration:config-primitive'"
- .format(sgd["name"], sca["vnf-config-primitive-name-ref"]),
- http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
+ if not indata.get("vnf-configuration"):
+ raise EngineException("'vnf-configuration' not defined in the descriptor but it is referenced by "
+ "scaling-group-descriptor[name='{}']:scaling-config-action"
+ .format(sgd["name"]),
+ http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
+ for primitive in get_iterable(indata["vnf-configuration"].get("config-primitive")):
+ if primitive["name"] == sca["vnf-config-primitive-name-ref"]:
+ break
else:
- raise EngineException("'vnf-configuration' not defined in the descriptor but it is referenced",
+ raise EngineException("scaling-group-descriptor[name='{}']:scaling-config-action:vnf-config-"
+ "primitive-name-ref='{}' does not match any "
+ "vnf-configuration:config-primitive:name"
+ .format(sgd["name"], sca["vnf-config-primitive-name-ref"]),
http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
- if sca_vcp_mark:
- break
return indata
def _validate_input_edit(self, indata, force=False):
def _check_vnf_instantiation_params(in_vnfd, vnfd):
- for in_vdu in get_iterable(in_vnfd["vdu"]):
- if in_vdu.get("id"):
- for vdu in get_iterable(vnfd["vdu"]):
- if in_vdu["id"] == vdu["id"]:
- for volume in get_iterable(in_vdu.get("volume")):
- for volumed in get_iterable(vdu.get("volumes")):
- if volumed["name"] == volume["name"]:
- break
- else:
- raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:vdu[id='{}']:"
- "volume:name='{}' is not present at vnfd:vdu:volumes list".
- format(in_vnf["member-vnf-index"], in_vdu["id"],
- volume["name"]))
- for in_iface in get_iterable(in_vdu["interface"]):
- if in_iface.get("name"):
- for iface in vdu["interface"]:
- if in_iface["name"] == iface["name"]:
- break
- else:
- raise EngineException("vdu[id='{}']:interface[name='{}'] defined in "
- "additional configuration, is not present at vnfd '{}'"
- .format(in_vdu["id"], in_iface["name"], vnfd["id"]))
- else:
- raise EngineException("vdu[id='{}']:interface defined in additional "
- "configuration needs 'name' parameter to be defined"
- .format(in_vdu["id"]))
- break
- else:
- raise EngineException("VDU '{}' defined in additional configuration, is not present at vnfd "
- "'{}'".format(in_vdu["id"], vnfd["id"]))
+ for in_vdu in get_iterable(in_vnfd.get("vdu")):
+ for vdu in get_iterable(vnfd.get("vdu")):
+ if in_vdu["id"] == vdu["id"]:
+ for volume in get_iterable(in_vdu.get("volume")):
+ for volumed in get_iterable(vdu.get("volumes")):
+ if volumed["name"] == volume["name"]:
+ break
+ else:
+ raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:vdu[id='{}']:"
+ "volume:name='{}' is not present at vnfd:vdu:volumes list".
+ format(in_vnf["member-vnf-index"], in_vdu["id"],
+ volume["name"]))
+ for in_iface in get_iterable(in_vdu["interface"]):
+ for iface in get_iterable(vdu.get("interface")):
+ if in_iface["name"] == iface["name"]:
+ break
+ else:
+ raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:vdu[id='{}']:"
+ "interface[name='{}'] is not present at vnfd:vdu:interface"
+ .format(in_vnf["member-vnf-index"], in_vdu["id"],
+ in_iface["name"]))
+ break
else:
- raise EngineException("No ID defined for VDU in the additional configuration")
+ raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:vdu[id='{}'] is is not present "
+ "at vnfd:vdu".format(in_vnf["member-vnf-index"], in_vdu["id"]))
for in_ivld in get_iterable(in_vnfd.get("internal-vld")):
for ivld in get_iterable(vnfd.get("internal-vld")):
if in_icp["id-ref"] == icp["id-ref"]:
break
else:
- raise EngineException("internal-vld:name='{}':internal-connection-point:"
- "id-ref='{}' defined in additional configuration, is not "
- "present at vnfd '{}'".format(in_ivld["name"],
- in_icp["id-ref"], vnfd["id"]))
+ raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:internal-vld[name"
+ "='{}']:internal-connection-point[id-ref:'{}'] is not present at "
+ "vnfd:internal-vld:name/id:internal-connection-point"
+ .format(in_vnf["member-vnf-index"], in_ivld["name"],
+ in_icp["id-ref"], vnfd["id"]))
break
else:
raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:internal-vld:name='{}'"