X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fsol005%2Fvnfd.py;h=e32ac832375f128c37fb8f448fda723f261cab5e;hb=refs%2Fchanges%2F48%2F10048%2F7;hp=159205af710867153208318915c4ca29b4ef7ae6;hpb=23e596547276c40031363a9400dc754eb4702c43;p=osm%2Fosmclient.git diff --git a/osmclient/sol005/vnfd.py b/osmclient/sol005/vnfd.py index 159205a..e32ac83 100644 --- a/osmclient/sol005/vnfd.py +++ b/osmclient/sol005/vnfd.py @@ -51,6 +51,7 @@ class Vnfd(object): if filter: filter_string = '?{}'.format(filter) _, resp = self._http.get2_cmd('{}{}'.format(self._apiBase, filter_string)) + if resp: return json.loads(resp) return list() @@ -64,7 +65,9 @@ class Vnfd(object): 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)) @@ -128,6 +131,7 @@ class Vnfd(object): 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, @@ -151,9 +155,10 @@ class Vnfd(object): "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: @@ -176,47 +181,81 @@ class Vnfd(object): 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'