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