Commit to master [RIFT 15737] Remove logic for deletion of folder on deletion of descriptor catalog in UI. Protect against a null catalog name that comes when a field in catalog is updated.
Signed-off-by: sinhan <nandan.sinha@riftio.com>
diff --git a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
index 34fff1c..9ebd03c 100644
--- a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
+++ b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/store.py
@@ -110,6 +110,8 @@
Raises:
PackageStoreError- The package could not be retrieved
"""
+ self.refresh()
+
if package_id not in self._package_dirs:
msg = "Package %s not found in %s" % (package_id, self._root_dir)
raise PackageNotFoundError(msg)
diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
index d4e5736..b302b46 100644
--- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
+++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/rwpkgmgr.py
@@ -30,14 +30,14 @@
from gi.repository import (
RwDts as rwdts,
- RwPkgMgmtYang)
+ RwPkgMgmtYang)
import rift.tasklets
from . import rpc
from .proxy import filesystem
from . import publisher as pkg_publisher
-
+from . import subscriber
class PackageManagerTasklet(rift.tasklets.Tasklet):
def __init__(self, *args, **kwargs):
@@ -66,6 +66,10 @@
args = [self.log, self.dts, self.loop]
self.job_handler = pkg_publisher.DownloadStatusPublisher(*args)
+ # create catalog subscribers
+ self.vnfd_catalog_sub = subscriber.VnfdStatusSubscriber(*args)
+ self.nsd_catalog_sub = subscriber.NsdStatusSubscriber(*args)
+
args.append(proxy)
self.endpoint_rpc = rpc.EndpointDiscoveryRpcHandler(*args)
self.schema_rpc = rpc.SchemaRpcHandler(*args)
@@ -87,6 +91,8 @@
yield from self.pkg_op.register()
yield from self.job_handler.register()
yield from self.delete_rpc.register()
+ yield from self.vnfd_catalog_sub.register()
+ yield from self.nsd_catalog_sub.register()
@asyncio.coroutine
def run(self):
diff --git a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
index f305f2f..14c3dc1 100644
--- a/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
+++ b/rwlaunchpad/plugins/rwpkgmgr/rift/tasklets/rwpkgmgr/subscriber/__init__.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-from .download_status import DownloadStatusSubscriber
+from .download_status import DownloadStatusSubscriber, VnfdStatusSubscriber, NsdStatusSubscriber
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 c4a5a53..b4acb5f 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 rift.mano.dts as mano_dts
+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))
+
diff --git a/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang b/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
index 8370c1b..de56e55 100644
--- a/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
+++ b/rwlaunchpad/plugins/yang/rw-pkg-mgmt.yang
@@ -53,6 +53,13 @@
prefix "manotypes";
}
+ import rw-vnfd {
+ prefix "rwvnfd";
+ }
+ import rw-nsd {
+ prefix "rwnsd";
+ }
+
revision 2016-06-01 {
description
"Initial revision.";
@@ -340,4 +347,4 @@
}
}
-}
\ No newline at end of file
+}