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
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.
"""
- 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")