X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwnsm%2Frift%2Ftasklets%2Frwnsmtasklet%2Fcloud.py;h=343f80940a536e72a96f3b5538bac701393c50d0;hb=ed78a8c7aed612db8bf2621bb8ab130aed709a47;hp=5d73680b47e4f31e906675a2bf4b49223496640b;hpb=07da3570c19de04f015ade251dba8412daf2e280;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 5d73680b..343f8094 100644 --- a/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py +++ b/rwlaunchpad/plugins/rwnsm/rift/tasklets/rwnsmtasklet/cloud.py @@ -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()