X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwnsm%2Frift%2Ftasklets%2Frwnsmtasklet%2Fcloud.py;h=32efff2ada23f6814c86858e3c948ae606806b9f;hb=be1e629393e7dda443902f0eec78be5436acb6dc;hp=6be37611cf9b8ddbf46e7724ec8ff9cebe8524d4;hpb=8c799681ac1cf3383807d6eb404f56b71f938aba;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py index 6be37611..32efff2a 100644 --- a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py +++ b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py @@ -177,22 +177,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 +216,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()