X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwpkgmgr%2Frift%2Ftasklets%2Frwpkgmgr%2Fsubscriber%2Fdownload_status.py;h=b4acb5f5523760e5e81f0bc4921be79091f9e53f;hb=57c99722a731df6c9541423ff7a1f05b0fe18c86;hp=c4a5a5315c6ad5b4f78b4e2d05fa7ca38ac8e05b;hpb=411ef48f19a20a7a15d29c391c23a3bf6042e000;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py index c4a5a531..b4acb5f5 100644 --- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py +++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py @@ -17,12 +17,92 @@ # Creation Date: 09/25/2016 # +import os +import io +import shutil + import rift.mano.dts as mano_dts +import rift.package.package as package +import rift.package.store as store +import rift.package.convert as convert +from gi.repository import ( + RwYang, + NsdYang, + RwNsdYang, + VnfdYang, + RwVnfdYang, + RwDts +) class DownloadStatusSubscriber(mano_dts.AbstractOpdataSubscriber): - def __init__(self, log, dts, loop, callback=None): - super().__init__(log, dts, loop, callback) - def get_xpath(self): + def __init__(self, log, dts, loop, callback): + super().__init__(log, dts, loop, callback) + + def get_xpath(self): return ("D,/rw-pkg-mgmt:download-jobs/rw-pkg-mgmt:job") + +class VnfdStatusSubscriber(DownloadStatusSubscriber): + DOWNLOAD_DIR = store.VnfdPackageFilesystemStore.DEFAULT_ROOT_DIR + MODULE_DESC = 'vnfd rw-vnfd'.split() + DESC_TYPE = 'vnfd' + + def __init__(self, log, dts, loop): + super().__init__(log, dts, loop, self.on_change) + self.subscriber = mano_dts.VnfdCatalogSubscriber(log, dts, loop) + + def on_change(self, msg, action): + log_msg = "1. Vnfd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action)) + self.log.debug(log_msg) + if action == RwDts.QueryAction.UPDATE: + actionCreate(self, msg) + else: + self.log.debug("VnfdStatusSubscriber: No action for ", action) + pass + + def get_xpath(self): + return self.subscriber.get_xpath() + + +class NsdStatusSubscriber(DownloadStatusSubscriber): + DOWNLOAD_DIR = store.NsdPackageFilesystemStore.DEFAULT_ROOT_DIR + MODULE_DESC = 'nsd rw-nsd'.split() + DESC_TYPE = 'nsd' + + def __init__(self, log, dts, loop): + super().__init__(log, dts, loop, self.on_change) + self.subscriber = mano_dts.NsdCatalogSubscriber(log, dts, loop) + + def on_change(self, msg, action): + log_msg = "1. Nsd called w/ msg attributes: {} id {} name {} action: {}".format(repr(msg), msg.id, msg.name, repr(action)) + self.log.debug(log_msg) + if action == RwDts.QueryAction.UPDATE: + actionCreate(self, msg) + else: + self.log.debug("NsdStatusSubscriber: No action for ", action) + pass + + def get_xpath(self): + return self.subscriber.get_xpath() + + +def actionCreate(descriptor, msg): + ''' Create folder structure if it doesn't exist: id/vnf name OR id/nsd name + Serialize the Vnfd/Nsd object to yaml and store yaml file in the created folder. + ''' + + desc_name = msg.name if msg.name else "" + download_dir = os.path.join(descriptor.DOWNLOAD_DIR, msg.id, desc_name) + + if not os.path.exists(download_dir): + os.makedirs(download_dir) + descriptor.log.debug("Created directory {}".format(download_dir)) + + model = RwYang.Model.create_libncx() + for module in descriptor.MODULE_DESC: model.load_module(module) + + yaml_path = "{base}/{name}_{type}.yaml".format(base=download_dir, name=msg.name, type=descriptor.DESC_TYPE) + with open(yaml_path,"w") as fh: + fh.write(msg.to_yaml(model)) +