Fixed breakage in function proto-types due to scaling changes
[osm/SO.git] / rwlaunchpad / plugins / rwnsm / rift / tasklets / rwnsmtasklet / cloud.py
index 5d73680..343f809 100644 (file)
@@ -1,5 +1,5 @@
 
-# 
+#
 #   Copyright 2016 RIFT.IO Inc
 #
 #   Licensed under the Apache License, Version 2.0 (the "License");
@@ -40,7 +40,10 @@ class RwNsPlugin(rwnsmplugin.NsmPluginBase):
         self._log = log
         self._loop = loop
 
-    def create_nsr(self, nsr_msg, nsd):
+    def set_state(self, nsr_id, state):
+        pass
+
+    def create_nsr(self, nsr_msg, nsd,key_pairs=None):
         """
         Create Network service record
         """
@@ -58,7 +61,7 @@ class RwNsPlugin(rwnsmplugin.NsmPluginBase):
         yield from nsr.instantiate(config_xact)
 
     @asyncio.coroutine
-    def instantiate_vnf(self, nsr, vnfr):
+    def instantiate_vnf(self, nsr, vnfr, scaleout=False):
         """
         Instantiate NSR with the passed nsr id
         """
@@ -140,7 +143,7 @@ class CloudAccountConfigSubscriber:
         if account_name in self._cloud_sub.accounts:
             self._log.debug("Cloud accnt msg is %s",self._cloud_sub.accounts[account_name].account_msg)
             if self._cloud_sub.accounts[account_name].account_msg.has_field("sdn_account"):
-                sdn_account = self._cloud_sub.accounts[account_name].account_msg.sdn_account 
+                sdn_account = self._cloud_sub.accounts[account_name].account_msg.sdn_account
                 self._log.info("SDN associated with Cloud name %s is %s", account_name, sdn_account)
                 return sdn_account
             else:
@@ -177,22 +180,33 @@ class ROAccountPluginSelector(object):
                 self._loop,
                 callback=self.on_ro_account_change
                 )
+        self._nsr_sub = mano_dts.NsrCatalogSubscriber(
+                self._log,
+                self._dts,
+                self._loop,
+                self.handle_nsr)
 
         # The default plugin will be RwNsPlugin
-        self._plugin_instances = {}
         self._ro_plugin = self._create_plugin(self.DEFAULT_PLUGIN, None)
+        self.live_instances = 0
 
     @property
     def ro_plugin(self):
         return self._ro_plugin
 
-    def on_ro_account_change(self, ro_account, action):
+    def handle_nsr(self, nsr, action):
         if action == rwdts.QueryAction.CREATE:
-            self._on_ro_account_added(ro_account)
+            self.live_instances += 1
+        elif action == rwdts.QueryAction.DELETE:
+            self.live_instances -= 1
+
+    def on_ro_account_change(self, ro_account, action):
+        if action in [rwdts.QueryAction.CREATE, rwdts.QueryAction.UPDATE]:
+            self._on_ro_account_change(ro_account)
         elif action == rwdts.QueryAction.DELETE:
             self._on_ro_account_deleted(ro_account)
 
-    def _on_ro_account_added(self, ro_account):
+    def _on_ro_account_change(self, ro_account):
         self._log.debug("Got nsm plugin RO account: %s", ro_account)
         try:
             nsm_cls = self._nsm_plugins.class_by_plugin_name(
@@ -205,25 +219,24 @@ class ROAccountPluginSelector(object):
                 )
             nsm_cls = self.DEFAULT_PLUGIN
 
-        self._ro_plugin = self._create_plugin(nsm_cls, ro_account)
+        ro_plugin = self._create_plugin(nsm_cls, ro_account)
+        if self.live_instances == 0:
+            self._ro_plugin = ro_plugin
+        else:
+            raise ValueError("Unable to change the plugin when live NS instances exists!")
 
     def _on_ro_account_deleted(self, ro_account):
         self._ro_plugin = None
 
     def _create_plugin(self, nsm_cls, ro_account):
-        # Check to see if the plugin was already instantiated
-        if nsm_cls in self._plugin_instances:
-            self._log.debug("RO account nsm plugin already instantiated.  Using existing.")
-            return self._plugin_instances[nsm_cls]
 
-        # Otherwise, instantiate a new plugin using the cloud account
         self._log.debug("Instantiating new RO account using class: %s", nsm_cls)
         nsm_instance = nsm_cls(self._dts, self._log, self._loop,
                                self._records_publisher, ro_account)
 
-        self._plugin_instances[nsm_cls] = nsm_instance
         return nsm_instance
 
     @asyncio.coroutine
     def register(self):
         yield from self._ro_sub.register()
+        yield from self._nsr_sub.register()