+ raise OpenmanoBadParamsException("Invalid VNF Descriptor must contain only one 'vnf' field or vnd-catalog")
+ except (KeyError, TypeError) as e:
+ raise OpenmanoBadParamsException("Invalid VNF Descriptor. Missing field {}".format(e))
+
+ if kwargs:
+ try:
+ if kwargs.get('name'):
+ vnfd['name'] = kwargs['name']
+ if kwargs.get('description'):
+ vnfd['description'] = kwargs['description']
+ if kwargs.get('image_path'):
+ error_param = 'image_path'
+ image_list = kwargs['image_path'].split(",")
+ image_item = image_list.pop(0)
+ # print "image-path", image_path_
+ for vdu in vdu_list:
+ if api_version == "v3":
+ if vdu.get("image"):
+ if image_item:
+ vdu['image'] = image_item
+ if "image-checksum" in vdu:
+ del vdu["image-checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get("volumes", ()): # image name in volumes
+ if image_item:
+ vol["image"] = image_item
+ if "image-checksum" in vol:
+ del vol["image-checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ else:
+ if image_item:
+ vdu['VNFC image'] = image_item
+ if "image name" in vdu:
+ del vdu["image name"]
+ if "image checksum" in vdu:
+ del vdu["image checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get('devices', ()):
+ if vol['type'] != 'disk':
+ continue
+ if image_item:
+ vol['image'] = image_item
+ if "image name" in vol:
+ del vol["image name"]
+ if "image checksum" in vol:
+ del vol["image checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ if kwargs.get('image_name'): # image name precedes if both are supplied
+ error_param = 'image_name'
+ image_list = kwargs['image_name'].split(",")
+ image_item = image_list.pop(0)
+ for vdu in vdu_list:
+ if api_version == "v3":
+ if vdu.get("image"):
+ if image_item:
+ vdu['image'] = image_item
+ if "image-checksum" in vdu:
+ del vdu["image-checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get("volumes", ()): # image name in volumes
+ if image_item:
+ vol["image"] = image_item
+ if "image-checksum" in vol:
+ del vol["image-checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+ else:
+ if image_item:
+ vdu['image name'] = image_item
+ if "VNFC image" in vdu:
+ del vdu["VNFC image"]
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get('devices', ()):
+ if vol['type'] != 'disk':
+ continue
+ if image_item:
+ vol['image name'] = image_item
+ if "image" in vol:
+ del vol["image"]
+ if "image checksum" in vol:
+ del vol["image checksum"]
+ if image_list:
+ image_item = image_list.pop(0)
+
+ if kwargs.get('image_checksum'):
+ error_param = 'image_checksum'
+ image_list = kwargs['image_checksum'].split(",")
+ image_item = image_list.pop(0)
+ for vdu in vdu_list:
+ if api_version == "v3":
+ if vdu.get("image"):
+ if image_item:
+ vdu['image-checksum'] = image_item
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get("volumes", ()): # image name in volumes
+ if image_item:
+ vol["mage-checksum"] = image_item
+ if image_list:
+ image_item = image_list.pop(0)
+ else:
+ if image_item:
+ vdu['image checksum'] = image_item
+ if "VNFC image" in vdu:
+ del vdu["VNFC image"]
+ if image_list:
+ image_item = image_list.pop(0)
+ for vol in vdu.get('devices', ()):
+ if vol['type'] != 'disk':
+ continue
+ if image_item:
+ vol['image checksum'] = image_item
+ if "image" in vol:
+ del vol["image"]
+ if image_list:
+ image_item = image_list.pop(0)
+ except IndexError:
+ raise OpenmanoBadParamsException("{} contains more items than {} at descriptor".format(
+ error_param, "vnfd-catalog:vnfd:vdu" if api_version else "vnf:VNFC"))
+ except (KeyError, TypeError) as e:
+ raise OpenmanoBadParamsException("Invalid VNF Descriptor. Missing field {}".format(e))
+ return self._create_item(token, descriptor, api_version=api_version)