mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
continue passing the object to other modules if one of the modules fails
Ticket: CM-4336 Reviewed By: Testing Done: Tested with the missing port testcase from CM-4336
This commit is contained in:
@@ -245,25 +245,6 @@ class mstpctl(moduleBase):
|
|||||||
def _apply_bridge_settings(self, ifaceobj):
|
def _apply_bridge_settings(self, ifaceobj):
|
||||||
check = False if self.PERFMODE else True
|
check = False if self.PERFMODE else True
|
||||||
try:
|
try:
|
||||||
bridgeattrs = {k:v for k,v in
|
|
||||||
{'treeprio' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-treeprio'),
|
|
||||||
'ageing' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-ageing'),
|
|
||||||
'maxage' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-maxage'),
|
|
||||||
'fdelay' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-fdelay'),
|
|
||||||
'maxhops' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-maxhops'),
|
|
||||||
'txholdcount' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-txholdcount'),
|
|
||||||
'forcevers' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-forcevers'),
|
|
||||||
'hello' :
|
|
||||||
ifaceobj.get_attr_value_first('mstpctl-hello')
|
|
||||||
}.items() if v}
|
|
||||||
|
|
||||||
# set bridge attributes
|
# set bridge attributes
|
||||||
for attrname, dstattrname in self._attrs_map.items():
|
for attrname, dstattrname in self._attrs_map.items():
|
||||||
try:
|
try:
|
||||||
@@ -346,6 +327,10 @@ class mstpctl(moduleBase):
|
|||||||
for bport in bridgeports:
|
for bport in bridgeports:
|
||||||
self.logger.info('%s: processing mstp config for port %s'
|
self.logger.info('%s: processing mstp config for port %s'
|
||||||
%(ifaceobj.name, bport))
|
%(ifaceobj.name, bport))
|
||||||
|
if not self.ipcmd.link_exists(bport):
|
||||||
|
self.logger.warn('%s: port %s does not exist' %(ifaceobj.name,
|
||||||
|
bport))
|
||||||
|
continue
|
||||||
bportifaceobjlist = ifaceobj_getfunc(bport)
|
bportifaceobjlist = ifaceobj_getfunc(bport)
|
||||||
if not bportifaceobjlist:
|
if not bportifaceobjlist:
|
||||||
continue
|
continue
|
||||||
@@ -604,7 +589,7 @@ class mstpctl(moduleBase):
|
|||||||
|
|
||||||
def _query_check_bridge_port(self, ifaceobj, ifaceobjcurr):
|
def _query_check_bridge_port(self, ifaceobj, ifaceobjcurr):
|
||||||
if not self.ipcmd.link_exists(ifaceobj.name):
|
if not self.ipcmd.link_exists(ifaceobj.name):
|
||||||
self.logger.debug('bridge port %s does not exist' %ifaceobj.name)
|
#self.logger.debug('bridge port %s does not exist' %ifaceobj.name)
|
||||||
ifaceobjcurr.status = ifaceStatus.NOTFOUND
|
ifaceobjcurr.status = ifaceStatus.NOTFOUND
|
||||||
return
|
return
|
||||||
# Check if this is a bridge port
|
# Check if this is a bridge port
|
||||||
@@ -764,6 +749,8 @@ class mstpctl(moduleBase):
|
|||||||
of interfaces. status is success if the running state is same
|
of interfaces. status is success if the running state is same
|
||||||
as user required state in ifaceobj. error otherwise.
|
as user required state in ifaceobj. error otherwise.
|
||||||
"""
|
"""
|
||||||
|
if ifaceobj.type == ifaceType.BRIDGE_VLAN:
|
||||||
|
return
|
||||||
op_handler = self._run_ops.get(operation)
|
op_handler = self._run_ops.get(operation)
|
||||||
if not op_handler:
|
if not op_handler:
|
||||||
return
|
return
|
||||||
|
@@ -43,7 +43,7 @@ class ifaceScheduler():
|
|||||||
""" Runs sub operation on an interface """
|
""" Runs sub operation on an interface """
|
||||||
ifacename = ifaceobj.name
|
ifacename = ifaceobj.name
|
||||||
|
|
||||||
if ifupdownobj.type and ifupdownobj.type != ifaceobj.Type:
|
if ifupdownobj.type and ifupdownobj.type != ifaceobj.type:
|
||||||
return
|
return
|
||||||
|
|
||||||
if (cls._STATE_CHECK and
|
if (cls._STATE_CHECK and
|
||||||
@@ -76,12 +76,14 @@ class ifaceScheduler():
|
|||||||
ifaceobj_getfunc=ifupdownobj.get_ifaceobjs)
|
ifaceobj_getfunc=ifupdownobj.get_ifaceobjs)
|
||||||
else:
|
else:
|
||||||
ifupdownobj.logger.debug(msg)
|
ifupdownobj.logger.debug(msg)
|
||||||
m.run(ifaceobj, op, ifaceobj_getfunc=ifupdownobj.get_ifaceobjs)
|
m.run(ifaceobj, op,
|
||||||
|
ifaceobj_getfunc=ifupdownobj.get_ifaceobjs)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
err = 1
|
if not ifupdownobj.ignore_error(str(e)):
|
||||||
ifupdownobj.log_error(str(e))
|
err = 1
|
||||||
err = 0 # error can be ignored by log_error, in which case
|
ifupdownobj.logger.warn(str(e))
|
||||||
# reset err flag
|
# Continue with rest of the modules
|
||||||
|
pass
|
||||||
finally:
|
finally:
|
||||||
if err or ifaceobj.status == ifaceStatus.ERROR:
|
if err or ifaceobj.status == ifaceStatus.ERROR:
|
||||||
ifaceobj.set_state_n_status(ifaceState.from_str(op),
|
ifaceobj.set_state_n_status(ifaceState.from_str(op),
|
||||||
@@ -89,8 +91,13 @@ class ifaceScheduler():
|
|||||||
if 'up' in op or 'down' in op:
|
if 'up' in op or 'down' in op:
|
||||||
cls._SCHED_RETVAL = False
|
cls._SCHED_RETVAL = False
|
||||||
else:
|
else:
|
||||||
|
# Mark success only if the interface was not already
|
||||||
|
# marked with error
|
||||||
|
status = (ifaceobj.status
|
||||||
|
if ifaceobj.status == ifaceStatus.ERROR
|
||||||
|
else ifaceStatus.SUCCESS)
|
||||||
ifaceobj.set_state_n_status(ifaceState.from_str(op),
|
ifaceobj.set_state_n_status(ifaceState.from_str(op),
|
||||||
ifaceStatus.SUCCESS)
|
status)
|
||||||
|
|
||||||
if ifupdownobj.config.get('addon_scripts_support', '0') == '1':
|
if ifupdownobj.config.get('addon_scripts_support', '0') == '1':
|
||||||
# execute /etc/network/ scripts
|
# execute /etc/network/ scripts
|
||||||
|
Reference in New Issue
Block a user