X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fv1%2Fpackage.py;h=f1a4bf49022ac9b2a2725fa6bb43be0693af5fc2;hb=4054a86e8a9e206b36c53d84d67035646f0beee9;hp=48e69ffd3dad17729c194fa2bdb2beab6a9659a0;hpb=4c7e237e45bc6fe209006b4837a8e6b031e78e1c;p=osm%2Fosmclient.git diff --git a/osmclient/v1/package.py b/osmclient/v1/package.py index 48e69ff..f1a4bf4 100644 --- a/osmclient/v1/package.py +++ b/osmclient/v1/package.py @@ -18,9 +18,6 @@ OSM package API handling """ -import tarfile -import re -import yaml from osmclient.common.exceptions import ClientException from osmclient.common.exceptions import NotFound from osmclient.common import utils @@ -33,9 +30,9 @@ class Package(object): self._upload_http = upload_http def _wait_for_package(self, pkg_type): - if 'vnfd' in pkg_type['type']: + if "vnfd" in pkg_type["type"]: get_method = self._client.vnfd.get - elif 'nsd' in pkg_type['type']: + elif "nsd" in pkg_type["type"]: get_method = self._client.nsd.get else: raise ClientException("no valid package type found") @@ -48,59 +45,26 @@ class Package(object): return False return True - return utils.wait_for_value(lambda: - check_exists(lambda: - get_method(pkg_type['name']))) + return utils.wait_for_value( + lambda: check_exists(lambda: get_method(pkg_type["name"])) + ) - # method opens up a package and finds the name of the resulting - # descriptor (vnfd or nsd name) - def get_descriptor_type_from_pkg(self, descriptor_file): - tar = tarfile.open(descriptor_file) - yamlfile = None - for member in tar.getmembers(): - if (re.match('.*.yaml', member.name) and - len(member.name.split('/')) == 2): - yamlfile = member.name - break - if yamlfile is None: - return None - - dict = yaml.load(tar.extractfile(yamlfile)) - result = {} - for k1, v1 in dict.items(): - if not k1.endswith('-catalog'): - continue - for k2, v2 in v1.items(): - if not k2.endswith('nsd') and not k2.endswith('vnfd'): - continue - - if 'nsd' in k2: - result['type'] = 'nsd' - else: - result['type'] = 'vnfd' - - for entry in v2: - for k3, v3 in entry.items(): - if k3 == 'name' or k3.endswith(':name'): - result['name'] = v3 - return result - tar.close() - return None + def get_key_val_from_pkg(self, descriptor_file): + return utils.get_key_val_from_pkg(descriptor_file) def wait_for_upload(self, filename): """wait(block) for an upload to succeed. - The filename passed is assumed to be a descriptor tarball. + The filename passed is assumed to be a descriptor tarball. """ - pkg_type = self.get_descriptor_type_from_pkg(filename) + pkg_type = utils.get_key_val_from_pkg(filename) if pkg_type is None: raise ClientException("Cannot determine package type") if not self._wait_for_package(pkg_type): - raise ClientException("package {} failed to upload" - .format(filename)) + raise ClientException("package {} failed to upload".format(filename)) def upload(self, filename): - resp = self._upload_http.post_cmd(formfile=('package', filename)) - if not resp or 'transaction_id' not in resp: + resp = self._upload_http.post_cmd(formfile=("package", filename)) + if not resp or "transaction_id" not in resp: raise ClientException("failed to upload package")