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/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
   )
   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.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,
 )
 
     RwLaunchpadYang,
 )
 
+import rift.mano.dts as mano_dts
 import rift.openmano.openmano_client as openmano_client
 import rift.tasklets
 
 
 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.
     """
     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"
 
 
     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
 
         """
         """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"""
 
     @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):
 
         @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
 
                 # 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:
                     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
 
                         # 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():
 
                         # 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,
                                         )
                                     )
 
                                     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)
 
                     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")
         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")
         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]
 
 
         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
 class CloudAccountConfigSubscriber:
     def __init__(self, log, dts, log_hdl):
         self._dts = dts
@@ -180,7 +171,7 @@ class ROAccountPluginSelector(object):
 
         self._nsm_plugins = NsmPlugins()
 
 
         self._nsm_plugins = NsmPlugins()
 
-        self._ro_sub = ROAccountConfigSubscriber(
+        self._ro_sub = mano_dts.ROAccountConfigSubscriber(
                 self._log,
                 self._dts,
                 self._loop,
                 self._log,
                 self._dts,
                 self._loop,
index 37a9c85..454aec1 100644 (file)
@@ -104,18 +104,18 @@ module rw-launchpad
     rwpb:msg-new DataCenters;
     config false;
 
     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";
 
       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 {
       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";
         }
       }
 
         }
       }