X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_nbi%2Finstance_topics.py;h=e98f90f3271a0c3ba0a02c7845543e640ce0345b;hb=fc5089ce2dee313929810482f9a4b01747f1df44;hp=345e6a32d8f706151b5554b84ba5760e26ef0e07;hpb=b24258aa9716c1e375fde230a817f7c9faaf6c2a;p=osm%2FNBI.git diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index 345e6a3..e98f90f 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -289,6 +289,53 @@ class NsLcmOpTopic(BaseTopic): raise EngineException("Invalid parameter member_vnf_index='{}' is not one of the " "nsd:constituent-vnfd".format(member_vnf_index)) + def _check_vnf_instantiation_params(in_vnfd, vnfd): + + 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("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_ivld["name"] == ivld["name"] or in_ivld["name"] == ivld["id"]: + for in_icp in get_iterable(in_ivld["internal-connection-point"]): + for icp in ivld["internal-connection-point"]: + if in_icp["id-ref"] == icp["id-ref"]: + break + else: + 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='{}'" + " is not present at vnfd '{}'".format(in_vnf["member-vnf-index"], + in_ivld["name"], vnfd["id"])) + def check_valid_vim_account(vim_account): if vim_account in vim_accounts: return @@ -341,35 +388,10 @@ class NsLcmOpTopic(BaseTopic): check_valid_vim_account(indata["vimAccountId"]) for in_vnf in get_iterable(indata.get("vnf")): vnfd = check_valid_vnf_member_index(in_vnf["member-vnf-index"]) + _check_vnf_instantiation_params(in_vnf, vnfd) if in_vnf.get("vimAccountId"): check_valid_vim_account(in_vnf["vimAccountId"]) - for in_vdu in get_iterable(in_vnf.get("vdu")): - for vdud in get_iterable(vnfd.get("vdu")): - if vdud["id"] == in_vdu["id"]: - for volume in get_iterable(in_vdu.get("volume")): - for volumed in get_iterable(vdud.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"])) - break - else: - raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:vdu:id='{}' is not " - "present at vnfd".format(in_vnf["member-vnf-index"], in_vdu["id"])) - - for in_internal_vld in get_iterable(in_vnf.get("internal-vld")): - for internal_vldd in get_iterable(vnfd.get("internal-vld")): - if in_internal_vld["name"] == internal_vldd["name"] or \ - in_internal_vld["name"] == internal_vldd["id"]: - break - else: - raise EngineException("Invalid parameter vnf[member-vnf-index='{}']:internal-vld:name='{}'" - " is not present at vnfd '{}'".format(in_vnf["member-vnf-index"], - in_internal_vld["name"], - vnfd["id"])) + for in_vld in get_iterable(indata.get("vld")): for vldd in get_iterable(nsd.get("vld")): if in_vld["name"] == vldd["name"] or in_vld["name"] == vldd["id"]: