X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=common%2Fpython%2Frift%2Fmano%2Fsdn%2Fconfig.py;h=20b17cc4536d7d5f1a7bac66dc0e4ef41ce9986d;hb=refs%2Fchanges%2F35%2F1535%2F1;hp=a9de01b56da0350bb2893460df943146d0fe389d;hpb=5a660df2c93308dc82a1bd31b8eb000558910ee9;p=osm%2FSO.git diff --git a/common/python/rift/mano/sdn/config.py b/common/python/rift/mano/sdn/config.py index a9de01b5..20b17cc4 100644 --- a/common/python/rift/mano/sdn/config.py +++ b/common/python/rift/mano/sdn/config.py @@ -26,6 +26,8 @@ from gi.repository import ( ProtobufC, ) +from rift.mano.utils.project import get_add_delete_update_cfgs + from . import accounts @@ -37,32 +39,6 @@ class SDNAccountError(Exception): pass -def get_add_delete_update_cfgs(dts_member_reg, xact, key_name): - # Unforunately, it is currently difficult to figure out what has exactly - # changed in this xact without Pbdelta support (RIFT-4916) - # As a workaround, we can fetch the pre and post xact elements and - # perform a comparison to figure out adds/deletes/updates - xact_cfgs = list(dts_member_reg.get_xact_elements(xact)) - curr_cfgs = list(dts_member_reg.elements) - - xact_key_map = {getattr(cfg, key_name): cfg for cfg in xact_cfgs} - curr_key_map = {getattr(cfg, key_name): cfg for cfg in curr_cfgs} - - # Find Adds - added_keys = set(xact_key_map) - set(curr_key_map) - added_cfgs = [xact_key_map[key] for key in added_keys] - - # Find Deletes - deleted_keys = set(curr_key_map) - set(xact_key_map) - deleted_cfgs = [curr_key_map[key] for key in deleted_keys] - - # Find Updates - updated_keys = set(curr_key_map) & set(xact_key_map) - updated_cfgs = [xact_key_map[key] for key in updated_keys if xact_key_map[key] != curr_key_map[key]] - - return added_cfgs, deleted_cfgs, updated_cfgs - - class SDNAccountConfigCallbacks(object): def __init__(self, on_add_apply=None, on_add_prepare=None, @@ -143,6 +119,11 @@ class SDNAccountConfigSubscriber(object): self.delete_account(account_msg.name) self.add_account(account_msg) + def deregister(self): + if self._reg: + self._reg.deregister() + self._reg = None + def register(self): @asyncio.coroutine def apply_config(dts, acg, xact, action, _):