X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwvns%2Frift%2Ftasklets%2Frwvnstasklet%2Frwvnstasklet.py;h=ba3c5a25f9658043ac66ed043d814cf0b5447916;hb=a3bb91f092d378448cb870eccd45d43865de143c;hp=6ec2421e32f69b120ce07bfb0d56800abacb14cc;hpb=5a660df2c93308dc82a1bd31b8eb000558910ee9;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwvns/rift/tasklets/rwvnstasklet/rwvnstasklet.py b/rwlaunchpad/plugins/rwvns/rift/tasklets/rwvnstasklet/rwvnstasklet.py index 6ec2421e..ba3c5a25 100755 --- a/rwlaunchpad/plugins/rwvns/rift/tasklets/rwvnstasklet/rwvnstasklet.py +++ b/rwlaunchpad/plugins/rwvns/rift/tasklets/rwvnstasklet/rwvnstasklet.py @@ -1,6 +1,6 @@ # -# Copyright 2016 RIFT.IO Inc +# Copyright 2016-2017 RIFT.IO Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -28,6 +28,10 @@ from gi.repository import ( ) import rift.tasklets +from rift.mano.utils.project import ( + ManoProject, + ProjectHandler, +) import rift.mano.sdn from rift.vlmgr import ( @@ -54,16 +58,17 @@ class VlRecordNotFound(Exception): class SDNAccountHandlers(object): - def __init__(self, dts, log, log_hdl, acctstore, loop): + def __init__(self, dts, log, log_hdl, acctstore, loop, project): self._log = log self._log_hdl = log_hdl self._dts = dts self._loop = loop self._acctstore = acctstore + self._project = project self._log.debug("Creating SDN account config handler") self.sdn_cfg_handler = rift.mano.sdn.SDNAccountConfigSubscriber( - self._dts, self._log, self._log_hdl, + self._dts, self._log, project, self._log_hdl, rift.mano.sdn.SDNAccountConfigCallbacks( on_add_apply=self.on_sdn_account_added, on_delete_apply=self.on_sdn_account_deleted, @@ -74,7 +79,7 @@ class SDNAccountHandlers(object): self._log.debug("Creating SDN account opdata handler") self.sdn_operdata_handler = rift.mano.sdn.SDNAccountDtsOperdataHandler( - self._dts, self._log, self._loop, + self._dts, self._log, self._loop, project, ) def on_sdn_account_deleted(self, account_name): @@ -90,21 +95,28 @@ class SDNAccountHandlers(object): self.sdn_cfg_handler.register() yield from self.sdn_operdata_handler.register() + def deregister(self): + self.sdn_cfg_handler.deregister() + self.sdn_operdata_handler.deregister() + class VnsManager(object): """ The Virtual Network Service Manager """ - def __init__(self, dts, log, log_hdl, loop): + def __init__(self, dts, log, log_hdl, loop, project): self._dts = dts self._log = log self._log_hdl = log_hdl self._loop = loop + self._project = project self._acctstore = {} self._vlr_handler = VlrDtsHandler(dts, log, loop, self) self._vld_handler = VldDtsHandler(dts, log, loop, self) - self._sdn_handlers = SDNAccountHandlers(dts, log, log_hdl, self._acctstore, loop) + self._sdn_handlers = SDNAccountHandlers(dts, log, log_hdl, self._acctstore, loop, project) self._nwtopdata_store = NwtopDataStore(log) - self._nwtopdiscovery_handler = NwtopDiscoveryDtsHandler(dts, log, loop, self._acctstore, self._nwtopdata_store) - self._nwtopstatic_handler = NwtopStaticDtsHandler(dts, log, loop, self._acctstore, self._nwtopdata_store) + self._nwtopdiscovery_handler = NwtopDiscoveryDtsHandler(dts, log, loop, project, + self._acctstore, self._nwtopdata_store) + self._nwtopstatic_handler = NwtopStaticDtsHandler(dts, log, loop, project, + self._acctstore, self._nwtopdata_store) self._vlrs = {} @asyncio.coroutine @@ -146,6 +158,13 @@ class VnsManager(object): yield from self.register_nwtopstatic_handler() yield from self.register_nwtopdiscovery_handler() + def deregister(self): + self._nwtopdiscovery_handler.deregister() + self._nwtopstatic_handler.deregister() + self._vld_handler.deregister() + self._vlr_handler.deregister() + self._sdn_handlers.deregister() + def create_vlr(self, msg): """ Create VLR """ if msg.id in self._vlrs: @@ -199,19 +218,52 @@ class VnsManager(object): return False @asyncio.coroutine - def publish_vlr(self, xact, path, msg): + def publish_vlr(self, xact, xpath, msg): """ Publish a VLR """ + path = self._project.add_project(xpath) self._log.debug("Publish vlr called with path %s, msg %s", path, msg) yield from self._vlr_handler.update(xact, path, msg) @asyncio.coroutine - def unpublish_vlr(self, xact, path): + def unpublish_vlr(self, xact, xpath): """ Publish a VLR """ + path = self._project.add_project(xpath) self._log.debug("Unpublish vlr called with path %s", path) yield from self._vlr_handler.delete(xact, path) +class VnsProject(ManoProject): + + def __init__(self, name, tasklet, **kw): + super(VnsProject, self).__init__(tasklet.log, name) + self.update(tasklet) + + self._vlr_handler = None + self._vnsm = None + # A mapping of instantiated vlr_id's to VirtualLinkRecord objects + self._vlrs = {} + + @asyncio.coroutine + def register (self): + self._vnsm = VnsManager(dts=self._dts, + log=self.log, + log_hdl=self._log_hdl, + loop=self._loop, + project=self) + yield from self._vnsm.run() + + # NSM needs to detect VLD deletion that has active VLR + # self._vld_handler = VldDescriptorConfigDtsHandler( + # self._dts, self.log, self.loop, self._vlrs, + # ) + # yield from self._vld_handler.register() + + def deregister(self): + self._log.debug("De-register project {}".format(self.name)) + self._vnsm.deregister() + + class VnsTasklet(rift.tasklets.Tasklet): """ The VNS tasklet class """ def __init__(self, *args, **kwargs): @@ -220,11 +272,12 @@ class VnsTasklet(rift.tasklets.Tasklet): self.rwlog.set_subcategory("vns") self._dts = None - self._vlr_handler = None + self._project_handler = None + self.projects = {} - self._vnsm = None - # A mapping of instantiated vlr_id's to VirtualLinkRecord objects - self._vlrs = {} + @property + def dts(self): + return self._dts def start(self): super(VnsTasklet, self).start() @@ -252,17 +305,9 @@ class VnsTasklet(rift.tasklets.Tasklet): @asyncio.coroutine def init(self): """ task init callback""" - self._vnsm = VnsManager(dts=self._dts, - log=self.log, - log_hdl=self.log_hdl, - loop=self.loop) - yield from self._vnsm.run() - - # NSM needs to detect VLD deletion that has active VLR - # self._vld_handler = VldDescriptorConfigDtsHandler( - # self._dts, self.log, self.loop, self._vlrs, - # ) - # yield from self._vld_handler.register() + self.log.debug("creating project handler") + self.project_handler = ProjectHandler(self, VnsProject) + self.project_handler.register() @asyncio.coroutine def run(self):