if filter:
filter_string = '?{}'.format(filter)
_, resp = self._http.get2_cmd('{}{}'.format(self._apiBase, filter_string))
+
if resp:
return json.loads(resp)
return list()
return vnfd
else:
for vnfd in self.list():
- if 'name' in vnfd and name == vnfd['name']:
+ if 'product-name' in vnfd and name == vnfd['product-name']:
+ return vnfd
+ elif 'name' in vnfd and name == vnfd['name']:
return vnfd
raise NotFound("vnfd {} not found".format(name))
filename = filename.rstrip('/')
filename = self._client.package_tool.build(filename, skip_validation=False,
skip_charm_build=skip_charm_build)
+
print('Uploading package {}'.format(filename))
self.create(filename, overwrite=overwrite, update_endpoint=update_endpoint,
override_epa=override_epa, override_nonepa=override_nonepa,
"Unexpected MIME type for file {}: MIME type {}".format(
filename, mime_type)
)
- special_ow_string = ''
+
+ special_override_string = ''
if override_epa or override_nonepa or override_paravirt:
- # If override for EPA, non-EPA or paravirt is required, get the descriptor data
+ # If override for EPA, non-EPA or paravirt is required, get the descriptor data
descriptor_data = None
if mime_type in ['application/yaml', 'text/plain', 'application/json']:
with open(filename) as df:
raise ClientException('Descriptor could not be read')
desc_type, vnfd = validation_im().yaml_validation(descriptor_data)
validation_im().pyangbind_validation(desc_type, vnfd)
+
vnfd = yaml.safe_load(descriptor_data)
+ vcd_list = []
vdu_list = []
for k in vnfd:
# Get only the first descriptor in case there are many in the yaml file
- # k can be vnfd:vnfd-catalog or vnfd-catalog. This check is skipped
- first_vnfd = vnfd[k]['vnfd'][0]
+ # k can be vnfd or etsi-nfv-vnfd:vnfd. This check is skipped
+ first_vnfd = vnfd.get(k, {})
+ vcd_list = first_vnfd.get('virtual-compute-desc', [])
vdu_list = first_vnfd.get('vdu', [])
break
- for vdu_number, vdu in enumerate(vdu_list):
+
+ for vcd_number, vcd in enumerate(vcd_list):
if override_epa:
- guest_epa = {}
- guest_epa["mempage-size"] = "LARGE"
- guest_epa["cpu-pinning-policy"] = "DEDICATED"
- guest_epa["cpu-thread-pinning-policy"] = "PREFER"
- guest_epa["numa-node-policy"] = {}
- guest_epa["numa-node-policy"]["node-cnt"] = 1
- guest_epa["numa-node-policy"]["mem-policy"] = "STRICT"
- special_ow_string = "{}vdu.{}.guest-epa={};".format(special_ow_string, vdu_number,
- quote(yaml.safe_dump(guest_epa)))
- headers['Query-String-Format'] = 'yaml'
+ virtual_memory = vcd["virtual-memory"]
+ virtual_memory["mempage-size"] = "LARGE"
+ virtual_memory["numa-enabled"] = True
+ virtual_memory["numa-node-policy"] = {
+ "node-cnt": 1,
+ "mem-policy": "STRICT"
+ }
+ virtual_cpu = vcd["virtual-cpu"]
+ virtual_cpu["pinning"] = {
+ "policy": "static",
+ "thread-policy": "PREFER"
+ }
+
+ cpu_override_string = "virtual-compute-desc.{}.virtual-cpu={};"\
+ .format(vcd_number, quote(yaml.safe_dump(virtual_cpu)))
+ memory_override_string = "virtual-compute-desc.{}.virtual-memory={};"\
+ .format(vcd_number, quote(yaml.safe_dump(virtual_memory)))
+ special_override_string = "{}{}{}".format(special_override_string,
+ cpu_override_string, memory_override_string)
+
+ headers['Query-String-Format'] = 'yaml'
if override_nonepa:
- special_ow_string = "{}vdu.{}.guest-epa=;".format(special_ow_string, vdu_number)
- if override_paravirt:
- for iface_number in range(len(vdu['interface'])):
- special_ow_string = "{}vdu.{}.interface.{}.virtual-interface.type=PARAVIRT;".format(
- special_ow_string, vdu_number, iface_number)
- special_ow_string = special_ow_string.rstrip(";")
+ virtual_memory = vcd["virtual-memory"]
+ virtual_memory["mempage-size"] = ""
+ virtual_memory["numa-enabled"] = ""
+ virtual_memory["numa-node-policy"] = {}
+ virtual_cpu = vcd["virtual-cpu"]
+ virtual_cpu["pinning"] = {}
+
+ cpu_override_string = "virtual-compute-desc.{}.virtual-cpu={};"\
+ .format(vcd_number, quote(yaml.safe_dump(virtual_cpu)))
+ memory_override_string = "virtual-compute-desc.{}.virtual-memory={};"\
+ .format(vcd_number, quote(yaml.safe_dump(virtual_memory)))
+ special_override_string = "{}{}{}".format(special_override_string,
+ cpu_override_string, memory_override_string)
+
+ if override_paravirt:
+ for vdu_number, vdu in enumerate(vdu_list):
+ for cpd_number, cpd in enumerate(vdu["int-cpd"]):
+ for vnir_number, vnir in enumerate(cpd['virtual-network-interface-requirement']):
+ special_override_string = "{}vdu.{}.int-cpd.{}.virtual-network-interface-" \
+ "requirement.{}.virtual-interface.type=PARAVIRT;"\
+ .format(special_override_string, vdu_number, cpd_number, vnir_number)
+
+ special_override_string = special_override_string.rstrip(";")
headers["Content-File-MD5"] = utils.md5(filename)
http_header = ['{}: {}'.format(key, val)
for (key, val) in list(headers.items())]
+
self._http.set_http_header(http_header)
if update_endpoint:
http_code, resp = self._http.put_cmd(endpoint=update_endpoint, filename=filename)
else:
ow_string = ''
- if special_ow_string:
+ if special_override_string:
if overwrite:
- overwrite = "{};{}".format(overwrite, special_ow_string)
+ overwrite = "{};{}".format(overwrite, special_override_string)
else:
- overwrite = special_ow_string
+ overwrite = special_override_string
+
if overwrite:
ow_string = '?{}'.format(overwrite)
self._apiResource = '/vnf_packages_content'