# Subscribers
from .subscriber.core import AbstractOpdataSubscriber, AbstractConfigSubscriber
from .subscriber.vnf_subscriber import VnfdCatalogSubscriber, VnfrCatalogSubscriber
-from .subscriber.ns_subscriber import (
- NsrCatalogSubscriber,
- NsdCatalogSubscriber,
- NsInstanceConfigSubscriber)
+from .subscriber.ns_subscriber import NsrCatalogSubscriber, NsdCatalogSubscriber
from .subscriber.store import SubscriberStore
from .subscriber.ro_account import ROAccountConfigSubscriber
\ No newline at end of file
def get_xpath(self):
return "C,/nsd:nsd-catalog/nsd:nsd"
-
-
-class NsInstanceConfigSubscriber(core.AbstractConfigSubscriber):
- """ The network service descriptor DTS handler """
-
- def key_name(self):
- return "id"
-
- def get_xpath(self):
- return "C,/nsr:ns-instance-config/nsr:nsr"
self._loop,
callback=self.on_ro_account_change
)
- self._nsr_sub = mano_dts.NsInstanceConfigSubscriber(
- 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 handle_nsr(self, nsr, action):
- if action == rwdts.QueryAction.CREATE:
- 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)
+ if action == rwdts.QueryAction.CREATE:
+ self._on_ro_account_added(ro_account)
elif action == rwdts.QueryAction.DELETE:
self._on_ro_account_deleted(ro_account)
- def _on_ro_account_change(self, ro_account):
+ def _on_ro_account_added(self, ro_account):
self._log.debug("Got nsm plugin RO account: %s", ro_account)
try:
nsm_cls = self._nsm_plugins.class_by_plugin_name(
)
nsm_cls = self.DEFAULT_PLUGIN
- 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!")
+ self._ro_plugin = self._create_plugin(nsm_cls, ro_account)
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()
${CMAKE_CURRENT_SOURCE_DIR}/utest_rwnsm.py
)
-rift_py3test(utest_ro_account
- TEST_ARGS
- ${CMAKE_CURRENT_SOURCE_DIR}/utest_ro_account.py
- )
-
rift_py3test(tosca_ut
TEST_ARGS
${CMAKE_CURRENT_SOURCE_DIR}/tosca_ut.py
mock_orch_acc = launchpadyang.ResourceOrchestrator.from_dict(
{'name': 'rift-ro', 'account_type': 'rift_ro', 'rift_ro': {'rift_ro': True}})
- # Test rift-ro plugin CREATE
+ # Test rift-ro plugin
w_xpath = "C,/rw-launchpad:resource-orchestrator"
xpath = w_xpath
yield from self.publisher.publish(w_xpath, xpath, mock_orch_acc)
assert type(orch.ro_plugin) is cloud.RwNsPlugin
- # Test Openmano plugin CREATE
+ # Test Openmano plugin
mock_orch_acc = launchpadyang.ResourceOrchestrator.from_dict(
{'name': 'openmano',
'account_type': 'openmano',
- 'openmano': {'tenant_id': "abc",
- "port": 9999,
- "host": "10.64.11.77"}})
+ 'openmano': {'tenant_id': "abc"}})
yield from self.publisher.publish(w_xpath, xpath, mock_orch_acc)
yield from asyncio.sleep(5, loop=self.loop)
+ print (type(orch.ro_plugin))
assert type(orch.ro_plugin) is openmano_nsm.OpenmanoNsPlugin
- assert orch.ro_plugin._cli_api._port == mock_orch_acc.openmano.port
- assert orch.ro_plugin._cli_api._host == mock_orch_acc.openmano.host
-
- # Test update
- mock_orch_acc.openmano.port = 9789
- mock_orch_acc.openmano.host = "10.64.11.78"
- yield from self.dts.query_update("C,/rw-launchpad:resource-orchestrator",
- rwdts.XactFlag.ADVISE, mock_orch_acc)
- assert orch.ro_plugin._cli_api._port == mock_orch_acc.openmano.port
- assert orch.ro_plugin._cli_api._host == mock_orch_acc.openmano.host
-
- # Test update when a live instance exists
- # Exception should be thrown
- orch.handle_nsr(None, rwdts.QueryAction.CREATE)
- mock_orch_acc.openmano.port = 9788
-
- with self.assertRaises(Exception):
- yield from self.dts.query_update("C,/rw-launchpad:resource-orchestrator",
- rwdts.XactFlag.ADVISE, mock_orch_acc)
# Test delete
yield from self.dts.query_delete("C,/rw-launchpad:resource-orchestrator",