X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fcommon%2Fpackage_tool.py;h=7d582ecd1ca205fe07af67fb82132259da221337;hb=refs%2Fchanges%2F53%2F10053%2F1;hp=ec0a6d4c7f8d9eef313c18d72a62174588f9186d;hpb=60c9220d34b8e3a123837909999f88490ea5b561;p=osm%2Fosmclient.git diff --git a/osmclient/common/package_tool.py b/osmclient/common/package_tool.py index ec0a6d4..7d582ec 100644 --- a/osmclient/common/package_tool.py +++ b/osmclient/common/package_tool.py @@ -15,19 +15,19 @@ # License for the specific language governing permissions and limitations # under the License. -from osmclient.common.exceptions import ClientException -import os import glob -import time -import tarfile import hashlib -from osm_im.validation import Validation as validation_im -from jinja2 import Environment, PackageLoader -import subprocess +import logging +import os import shutil +import subprocess +import tarfile +import time + +from jinja2 import Environment, PackageLoader +from osm_im.validation import Validation as validation_im +from osmclient.common.exceptions import ClientException import yaml -import logging -import pathlib class PackageTool(object): @@ -285,18 +285,18 @@ class PackageTool(object): listCharms = self.charms_search(file, 'ns') print("List of charms in the descriptor: {}".format(listCharms)) if not descriptor_file: - raise ClientException ('descriptor name is not correct in: {}'.format(package_folder)) + raise ClientException('descriptor name is not correct in: {}'.format(package_folder)) if listCharms and not skip_charm_build: for charmName in listCharms: - if os.path.isdir('{}/charms/layers/{}'.format(package_folder,charmName)): + if os.path.isdir('{}/charms/layers/{}'.format(package_folder, charmName)): print('Building charm {}/charms/layers/{}'.format(package_folder, charmName)) self.charm_build(package_folder, charmName) print('Charm built: {}'.format(charmName)) else: - if not os.path.isdir('{}/charms/{}'.format(package_folder,charmName)): - raise ClientException ('The charm: {} referenced in the descriptor file ' - 'is not present either in {}/charms or in {}/charms/layers'. - format(charmName, package_folder,package_folder)) + if not os.path.isdir('{}/charms/{}'.format(package_folder, charmName)): + raise ClientException('The charm: {} referenced in the descriptor file ' + 'is not present either in {}/charms or in {}/charms/layers'. + format(charmName, package_folder, package_folder)) self._logger.debug("Return list of charms: {}".format(listCharms)) return listCharms @@ -427,55 +427,59 @@ class PackageTool(object): shutil.copytree(s_charm, d_temp, symlinks=True, ignore=ignore) self._logger.debug("DONE") else: - self._logger.debug("Copying tree: {} -> {}".format(s,d)) + self._logger.debug("Copying tree: {} -> {}".format(s, d)) shutil.copytree(s, d, symlinks=True, ignore=ignore) self._logger.debug("DONE") else: if item in ignore_patterns: continue - self._logger.debug("Copying file: {} -> {}".format(s,d)) + self._logger.debug("Copying file: {} -> {}".format(s, d)) shutil.copy2(s, d) self._logger.debug("DONE") return directory_name, package_name def charms_search(self, descriptor_file, desc_type): self._logger.debug("") - - descriptor_dict = {} - charm_list = [] - bundle_list = [] - with open("{}".format(descriptor_file)) as yaml_desc: descriptor_dict = yaml.safe_load(yaml_desc) - for _, v1 in descriptor_dict.items(): - for _, v2 in v1.items(): - for entry in v2: - if "{}-configuration".format(desc_type) in entry: - name = entry["{}-configuration".format(desc_type)] - for _, v3 in name.items(): - if "charm" in v3: - charm_list.append((v3["charm"])) - if "vdu" in entry: - name = entry["vdu"] - for vdu in name: - if "vdu-configuration" in vdu: - for _, v4 in vdu["vdu-configuration"].items(): - if "charm" in v4: - charm_list.append((v4["charm"])) - if "kdu" in entry: - name = entry["kdu"] - for kdu in name: - if "juju-bundle" in kdu: - bundle_list.append(kdu["juju-bundle"]) - - path = pathlib.Path(descriptor_file).parent - for bundle in bundle_list: - descriptor_dict = {} - with open("{}/juju-bundles/{}".format(path, bundle)) as yaml_desc: - descriptor_dict = yaml.safe_load(yaml_desc) - if "applications" in descriptor_dict: - for _, v in descriptor_dict["applications"].items(): - charm_list.append(pathlib.Path(v["charm"]).name) - - return charm_list - + if "catalog" in descriptor_dict: # Match OSM-IM vnfd-catalog and nsd-catalog + charms_list = self._charms_search_on_sol006_dict(descriptor_dict, desc_type) + else: + charms_list = self._charms_search_on_osm_im_dict(descriptor_dict, desc_type) + + return charms_list + + def _charms_search_on_osm_im_dict(self, osm_im_dict, desc_type): + charms_list = [] + for k1, v1 in osm_im_dict.items(): + for k2, v2 in v1.items(): + for entry in v2: + if '{}-configuration'.format(desc_type) in entry: + vnf_config = entry['{}-configuration'.format(desc_type)] + for k3, v3 in vnf_config.items(): + if 'charm' in v3: + charms_list.append((v3['charm'])) + if 'vdu' in entry: + vdus = entry['vdu'] + for vdu in vdus: + if 'vdu-configuration' in vdu: + for k4, v4 in vdu['vdu-configuration'].items(): + if 'charm' in v4: + charms_list.append((v4['charm'])) + return charms_list + + def _charms_search_on_sol006_dict(self, sol006_dict, desc_type): + charms_list = [] + for k1, v1 in sol006_dict.items(): + for k2, v2 in v1.items(): + if '{}-configuration'.format(desc_type) in k2: + for vnf_config in v2: + for k3, v3 in vnf_config.items(): + if 'charm' in v3: + charms_list.append((v3['charm'])) + if 'vdu-configuration' in k2: + for vdu_config in v2: + for k3, v3 in vdu_config.items(): + if 'charm' in v3: + charms_list.append((v3['charm'])) + return charms_list