X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwnsm%2Frift%2Ftasklets%2Frwnsmtasklet%2Fcloud.py;h=007e62ca9460416cfd5de2e22d606532cf0fae6e;hb=5a660df2c93308dc82a1bd31b8eb000558910ee9;hp=5326ca128c75d724aec1441aee952465a0642452;hpb=6f07e6f33f751ab4ffe624f6037f887b243bece2;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 5326ca12..007e62ca 100644 --- a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py +++ b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py @@ -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 """ @@ -124,15 +127,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,28 +174,39 @@ class ROAccountPluginSelector(object): self._nsm_plugins = NsmPlugins() - self._ro_sub = ROAccountConfigSubscriber( + self._ro_sub = mano_dts.ROAccountConfigSubscriber( self._log, self._dts, 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( @@ -214,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()