X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwpkgmgr%2Frift%2Ftasklets%2Frwpkgmgr%2Fsubscriber%2Fdownload_status.py;fp=rwlaunchpad%2Fplugins%2Frwpkgmgr%2Frift%2Ftasklets%2Frwpkgmgr%2Fsubscriber%2Fdownload_status.py;h=50c8d7f415ef9d7a178dc60b57086f09e9bc4e65;hb=4870d0ee29789b859931e4e2c73e13dcb29537d5;hp=042efa6f0ee8d3b3b98ae739e96c7d979d86935b;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;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 042efa6f..50c8d7f4 100644 --- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py +++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/download_status.py @@ -1,5 +1,5 @@ -# -# Copyright 2016 RIFT.IO Inc +# +# Copyright 2016-2017 RIFT.IO Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,101 +15,91 @@ # # Author(s): Varun Prasad # Creation Date: 09/25/2016 -# +# +import gi 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 +import rift.package.store as store +from rift.package.convert import ( + RwVnfdSerializer, + RwNsdSerializer, +) from gi.repository import ( RwYang, - NsdYang, - RwNsdYang, - VnfdYang, - RwVnfdYang, RwDts ) class DownloadStatusSubscriber(mano_dts.AbstractOpdataSubscriber): + def __init__(self, log, dts, loop, project, callback): + super().__init__(log, dts, loop, project, callback) - 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") + def get_xpath(self): + return self._project.add_project( + "D,/rw-pkg-mgmt:download-jobs/rw-pkg-mgmt:job") -class VnfdStatusSubscriber(DownloadStatusSubscriber): + +class VnfdStatusSubscriber(mano_dts.VnfdCatalogSubscriber): 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) + SERIALIZER = RwVnfdSerializer() + + def __init__(self, log, dts, loop, project): + super().__init__(log, dts, loop, project, callback=self.on_change) - 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)) + 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) + if action == RwDts.QueryAction.UPDATE or action == RwDts.QueryAction.CREATE: + actionCreate(self, msg, self.project.name) else: self.log.debug("VnfdStatusSubscriber: No action for {}".format(repr(action))) pass - def get_xpath(self): - return self.subscriber.get_xpath() - -class NsdStatusSubscriber(DownloadStatusSubscriber): +class NsdStatusSubscriber(mano_dts.NsdCatalogSubscriber): 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) + SERIALIZER = RwNsdSerializer() - 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)) + def __init__(self, log, dts, loop, project): + super().__init__(log, dts, loop, project, callback=self.on_change) + + 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) + if action == RwDts.QueryAction.UPDATE or action == RwDts.QueryAction.CREATE: + actionCreate(self, msg, self.project.name) else: self.log.debug("NsdStatusSubscriber: No action for {}".format(repr(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 +def actionCreate(descriptor, msg, project_name=None): + ''' 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) + download_dir = os.path.join( + descriptor.DOWNLOAD_DIR, + project_name if project_name else "", + msg.id) - # If a download dir is present with contents, then we know it has been created in the - # upload path. + # If a download dir is present with contents, then we know it has been created in the + # upload path. if os.path.exists(download_dir) and os.listdir(download_dir): descriptor.log.debug("Skpping folder creation, {} already present".format(download_dir)) return - else: + else: # Folder structure is based on top-level package-id directory 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)) - + yaml_path = "{base}/{name}_{type}.yaml". \ + format(base=download_dir, name=msg.name[0:50], type=descriptor.DESC_TYPE) + with open(yaml_path,"w") as fh: + fh.write(descriptor.SERIALIZER.to_yaml_string(msg))