#
-# 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.
class VnffgMgr(object):
""" Implements the interface to backend plugins to fetch topology """
- def __init__(self, dts, log, log_hdl, loop):
+ def __init__(self, dts, log, log_hdl, loop, project):
self._account = {}
self._dts = dts
self._log = log
self._log_hdl = log_hdl
self._loop = loop
+ self._project = project
self._sdn = {}
- self._sdn_handler = SDNAccountDtsHandler(self._dts,self._log,self)
+ self._sdn_handler = SDNAccountDtsHandler(self._dts, self._log, self)
self._vnffgr_list = {}
@asyncio.coroutine
def register(self):
yield from self._sdn_handler.register()
+ def deregister(self):
+ self._log.debug("Project {} de-register vnffgmgr".
+ format(self._project.name))
+ self._sdn_handler.deregister()
+
def set_sdn_account(self,account):
if (account.name in self._account):
self._log.error("SDN Account is already set")
vnfr.mgmt_address = cp_ref.connection_point_params.mgmt_address
vnfr.mgmt_port = 5000
vnfr_list.append(vnfr)
-
+
vdu = vnfr.vdu_list.add()
vdu.name = cp_ref.connection_point_params.name
vdu.port_id = cp_ref.connection_point_params.port_id
if(len(classifier_list) == 2):
meta[vnffgr.classifier[0].id] = '0x' + ''.join(str("%0.2X"%int(i)) for i in vnffgr.classifier[1].ip_address.split('.'))
meta[vnffgr.classifier[1].id] = '0x' + ''.join(str("%0.2X"%int(i)) for i in vnffgr.classifier[0].ip_address.split('.'))
-
+
self._log.debug("VNFFG Meta VNFFG chain is {}".format(meta))
-
+
for classifier in classifier_list:
vnffgr_cl = [_classifier for _classifier in vnffgr.classifier if classifier.id == _classifier.id]
if len(vnffgr_cl) > 0:
vnffgcl.port_id = vnffgr_cl[0].port_id
vnffgcl.vm_id = vnffgr_cl[0].vm_id
# Get the symmetric classifier endpoint ip and set it in nsh ctx1
-
- vnffgcl.vnffg_metadata.ctx1 = meta.get(vnffgr_cl[0].id,'0')
+
+ vnffgcl.vnffg_metadata.ctx1 = meta.get(vnffgr_cl[0].id,'0')
vnffgcl.vnffg_metadata.ctx2 = '0'
vnffgcl.vnffg_metadata.ctx3 = '0'
vnffgcl.vnffg_metadata.ctx4 = '0'
del self._vnffgr_list[vnffgr_id]
class SDNAccountDtsHandler(object):
- XPATH = "C,/rw-sdn:sdn-account"
+ XPATH = "C,/rw-sdn:sdn/rw-sdn:account"
def __init__(self, dts, log, parent):
self._dts = dts
self._log = log
self._parent = parent
+ self._project = self._parent._project
self._sdn_account = {}
+ self._reg = None
def _set_sdn_account(self, account):
self._log.info("Setting sdn account: {}".format(account))
if msg.has_field("account_type"):
errmsg = "Cannot update SDN account's account-type."
self._log.error(errmsg)
- xact_info.send_error_xpath(RwTypes.RwStatus.FAILURE,
- SDNAccountDtsHandler.XPATH,
- errmsg)
+ xact_info.send_error_xpath(
+ RwTypes.RwStatus.FAILURE,
+ self._project.add_project(SDNAccountDtsHandler.XPATH),
+ errmsg
+ )
raise SdnAccountError(errmsg)
# Update the sdn account record
if not msg.has_field('account_type'):
errmsg = "New SDN account must contain account-type field."
self._log.error(errmsg)
- xact_info.send_error_xpath(RwTypes.RwStatus.FAILURE,
- SDNAccountDtsHandler.XPATH,
- errmsg)
+ xact_info.send_error_xpath(
+ RwTypes.RwStatus.FAILURE,
+ self._project.add_project(SDNAccountDtsHandler.XPATH),
+ errmsg
+ )
raise SdnAccountError(errmsg)
# Set the sdn account record
xact_info.respond_xpath(rwdts.XactRspCode.ACK)
- self._log.debug("Registering for Sdn Account config using xpath: %s",
- SDNAccountDtsHandler.XPATH,
- )
+ xpath = self._project.add_project(SDNAccountDtsHandler.XPATH)
+ self._log.debug("Registering for Sdn Account config using xpath: {}".
+ format(xpath))
acg_handler = rift.tasklets.AppConfGroup.Handler(
on_apply=apply_config,
)
with self._dts.appconf_group_create(acg_handler) as acg:
- acg.register(
- xpath=SDNAccountDtsHandler.XPATH,
- flags=rwdts.Flag.SUBSCRIBER | rwdts.Flag.DELTA_READY,
- on_prepare=on_prepare
- )
-
-
-
+ self._reg = acg.register(
+ xpath=xpath,
+ flags=rwdts.Flag.SUBSCRIBER | rwdts.Flag.DELTA_READY,
+ on_prepare=on_prepare
+ )
+
+ def deregister(self):
+ self._log.debug("De-register SDN Account handler in vnffg for project".
+ format(self._project.name))
+ self._reg.deregister()
+ self._reg = None