RIFT-14553: Datacenters are now listed under ro-accounts 16/316/1
authorVarun Prasad <varun.prasad@riftio.com>
Sat, 10 Sep 2016 10:29:21 +0000 (06:29 -0400)
committerprasadv <varun.prasad@riftio.com>
Mon, 12 Sep 2016 19:39:51 +0000 (15:39 -0400)
Signed-off-by: Varun Prasad <varun.prasad@riftio.com>
common/python/CMakeLists.txt
common/python/rift/mano/dts/__init__.py
common/python/rift/mano/dts/subscriber/ro_account.py [new file with mode: 0644]
rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/datacenters.py
rwlaunchpad/plugins/rwlaunchpadtasklet/rift/tasklets/rwlaunchpad/tasklet.py
rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py
rwlaunchpad/plugins/yang/rw-launchpad.yang

index 658d525..85ead68 100644 (file)
@@ -41,6 +41,7 @@ rift_python_install_tree(
     rift/mano/dts/subscriber/store.py
     rift/mano/dts/subscriber/ns_subscriber.py
     rift/mano/dts/subscriber/vnf_subscriber.py
+    rift/mano/dts/subscriber/ro_account.py
   COMPONENT ${PKG_LONG_NAME}
   PYTHON3_ONLY
   )
index e523034..a56fa04 100644 (file)
@@ -21,4 +21,5 @@ from .core import DtsHandler
 from .subscriber.core import AbstractOpdataSubscriber, AbstractConfigSubscriber
 from .subscriber.vnf_subscriber import VnfdCatalogSubscriber, VnfrCatalogSubscriber
 from .subscriber.ns_subscriber import NsrCatalogSubscriber, NsdCatalogSubscriber
-from .subscriber.store import SubscriberStore
\ No newline at end of file
+from .subscriber.store import SubscriberStore
+from .subscriber.ro_account import ROAccountConfigSubscriber
\ No newline at end of file
diff --git a/common/python/rift/mano/dts/subscriber/ro_account.py b/common/python/rift/mano/dts/subscriber/ro_account.py
new file mode 100644 (file)
index 0000000..575d649
--- /dev/null
@@ -0,0 +1,36 @@
+"""
+# 
+#   Copyright 2016 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.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+@file ro_account.py
+@author Varun Prasad (varun.prasad@riftio.com)
+@date 09-Jul-2016
+
+"""
+
+import gi
+gi.require_version('RwDts', '1.0')
+from gi.repository import RwDts as rwdts
+
+from . import core
+
+class ROAccountConfigSubscriber(core.AbstractConfigSubscriber):
+
+    def key_name(self):
+        return "name"
+
+    def get_xpath(self):
+        return("C,/rw-launchpad:resource-orchestrator")
\ No newline at end of file
index 84fddb6..05731a6 100644 (file)
@@ -22,11 +22,12 @@ from gi.repository import (
     RwLaunchpadYang,
 )
 
+import rift.mano.dts as mano_dts
 import rift.openmano.openmano_client as openmano_client
 import rift.tasklets
 
 
-class DataCenterPublisher(object):
+class DataCenterPublisher(mano_dts.DtsHandler):
     """
     This class is reponsible for exposing the data centers associated with an
     openmano cloud account.
@@ -34,44 +35,33 @@ class DataCenterPublisher(object):
 
     XPATH = "D,/rw-launchpad:datacenters"
 
-    def __init__(self, tasklet):
+    def __init__(self, log, dts, loop):
         """Creates an instance of a DataCenterPublisher
 
         Arguments:
             tasklet - the tasklet that this publisher is registered for
 
         """
-        self.tasklet = tasklet
-        self.reg = None
-
-    @property
-    def dts(self):
-        """The DTS instance used by this tasklet"""
-        return self.tasklet.dts
-
-    @property
-    def log(self):
-        """The logger used by this tasklet"""
-        return self.tasklet.log
-
-    @property
-    def loop(self):
-        """The event loop used by this tasklet"""
-        return self.tasklet.loop
-
-    @property
-    def accounts(self):
-        """The known openmano cloud accounts"""
-        accounts = list()
-        for acc in self.tasklet.cloud_accounts:
-            if acc.account_type == "openmano":
-                accounts.append(acc.account_msg)
-
-        return accounts
+        super().__init__(log, dts, loop)
+
+        self._ro_sub = mano_dts.ROAccountConfigSubscriber(
+                        self.log,
+                        self.dts,
+                        self.loop,
+                        callback=self.on_ro_account_change
+                        )
+        self.ro_accounts = {}
+
+    def on_ro_account_change(self, ro_account, action):
+        if action in  [ RwDts.QueryAction.CREATE, RwDts.QueryAction.UPDATE ]:
+            self.ro_accounts[ro_account.name] = ro_account
+        elif action == RwDts.QueryAction.DELETE and ro_account.name in self.ro_accounts:
+            del self.ro_accounts[ro_account.name]
 
     @asyncio.coroutine
     def register(self):
         """Registers the publisher with DTS"""
+        yield from self._ro_sub.register()
 
         @asyncio.coroutine
         def on_prepare(xact_info, action, ks_path, msg):
@@ -82,10 +72,13 @@ class DataCenterPublisher(object):
 
                 # Iterate over the known openmano accounts and populate cloud
                 # account instances with the corresponding data center info
-                for account in self.accounts:
+                for _, account in self.ro_accounts.items():
+                    if account.account_type != "openmano":
+                        continue
+
                     try:
-                        cloud_account = RwLaunchpadYang.CloudAccount()
-                        cloud_account.name = account.name
+                        ro_account = RwLaunchpadYang.ROAccount()
+                        ro_account.name = account.name
 
                         # Create a client for this cloud account to query for
                         # the associated data centers
@@ -98,14 +91,14 @@ class DataCenterPublisher(object):
 
                         # Populate the cloud account with the data center info
                         for uuid, name in client.datacenter_list():
-                            cloud_account.datacenters.append(
+                            ro_account.datacenters.append(
                                     RwLaunchpadYang.DataCenter(
                                         uuid=uuid,
                                         name=name,
                                         )
                                     )
 
-                        datacenters.cloud_accounts.append(cloud_account)
+                        datacenters.ro_accounts.append(ro_account)
 
                     except Exception as e:
                         self.log.exception(e)
index ca09d33..9bcb2d3 100644 (file)
@@ -405,7 +405,7 @@ class LaunchpadTasklet(rift.tasklets.Tasklet):
         yield from self.vnfd_catalog_handler.register()
 
         self.log.debug("creating datacenter handler")
-        self.datacenter_handler = datacenters.DataCenterPublisher(self)
+        self.datacenter_handler = datacenters.DataCenterPublisher(self.log, self.dts, self.loop)
         yield from self.datacenter_handler.register()
 
         self.log.debug("creating cloud account handler")
index 5326ca1..5d73680 100644 (file)
@@ -124,15 +124,6 @@ class NsmPlugins(object):
         return self._plugin_classes[name]
 
 
-class ROAccountConfigSubscriber(mano_dts.AbstractConfigSubscriber):
-
-    def key_name(self):
-        return "name"
-
-    def get_xpath(self):
-        return("C,/rw-launchpad:resource-orchestrator")
-
-
 class CloudAccountConfigSubscriber:
     def __init__(self, log, dts, log_hdl):
         self._dts = dts
@@ -180,7 +171,7 @@ class ROAccountPluginSelector(object):
 
         self._nsm_plugins = NsmPlugins()
 
-        self._ro_sub = ROAccountConfigSubscriber(
+        self._ro_sub = mano_dts.ROAccountConfigSubscriber(
                 self._log,
                 self._dts,
                 self._loop,
index 37a9c85..454aec1 100644 (file)
@@ -104,18 +104,18 @@ module rw-launchpad
     rwpb:msg-new DataCenters;
     config false;
 
-    list cloud-accounts {
+    list ro-accounts {
       description
           "A list of OpenMano cloud accounts that have data centers associated
           with them";
 
-      rwpb:msg-new CloudAccount;
+      rwpb:msg-new ROAccount;
       key "name";
 
       leaf name {
         description "The name of the cloud account";
         type leafref {
-          path "/rw-cloud:cloud/rw-cloud:account/rw-cloud:name";
+          path "/rw-launchpad:resource-orchestrator/rw-launchpad:name";
         }
       }