if self.flags.STATEMANAGER_ENABLE and ops[0] == 'query-savedstate':
return self.statemanager.dump_pretty(ifacenames)
self.flags.STATEMANAGER_UPDATE = False
+
+ iface_read_ret = True
+
if auto:
self.logger.debug('setting flag ALL')
ifupdownflags.flags.ALL = True
ifacePrivFlags(False, True)), ifacenames)
else:
try:
- self.read_iface_config()
+ iface_read_ret = self.read_iface_config()
except Exception:
raise
if ops[0] == 'query' and ifupdownflags.flags.WITHDEFAULTS:
return self.print_ifaceobjs_pretty(filtered_ifacenames, format)
elif ops[0] == 'query-checkcurr':
- ret = self.print_ifaceobjscurr_pretty(filtered_ifacenames, format)
- if ret != 0:
+ if self.print_ifaceobjscurr_pretty(filtered_ifacenames, format):
# if any of the object has an error, signal that silently
raise Exception('')
elif ops[0] == 'query-running':
self.print_ifaceobjsrunning_pretty(filtered_ifacenames, format)
return
+ if not iface_read_ret or not ret:
+ raise Exception()
+
def _reload_currentlyup(self, upops, downops, auto=False, allow=None,
ifacenames=None, excludepats=None, usecurrentconfig=False,
syntaxcheck=False, **extra_args):
not self.is_ifaceobj_builtin(newifaceobjlist[0]) and
lastifaceobjlist[0].is_config_present() and
lastifaceobjlist[0].link_kind):
- self.logger.warn('%s: misconfig ? removed but still exists '
- 'as a dependency of %s.\nPlease remove '
- 'the dependency manually `ifdown %s` if '
- 'it is being picked up as part of a regex'
- % (newifaceobjlist[objidx].name,
- str(newifaceobjlist[objidx].upperifaces),
- newifaceobjlist[objidx].name))
- if (lastifaceobjlist[0].link_kind and
+
+ # Check if interface is picked up by a regex in the upperifaces.
+ print_warning = True
+
+ for upper in newifaceobjlist[objidx].upperifaces or []:
+ slaves = []
+ for upper_ifaceobj in self.ifaceobjdict.get(upper):
+ slaves.extend(upper_ifaceobj.get_attr_value("bond-slaves") or [])
+ slaves.extend(upper_ifaceobj.get_attr_value("bridge-ports") or [])
+ slaves_string = " ".join(slaves)
+ if newifaceobjlist[objidx].name not in slaves_string:
+ print_warning = "regex" not in slaves_string
+ if not print_warning:
+ break
+ ###############################################################
+
+ warning_no_config_regex = (
+ "%s: misconfig ? removed but still exists as a dependency of %s.\n"
+ "Please remove the dependency manually `ifdown %s` if it is being "
+ "picked up as part of a regex" % (
+ newifaceobjlist[objidx].name,
+ str(newifaceobjlist[objidx].upperifaces),
+ newifaceobjlist[objidx].name
+ )
+ )
+
+ if print_warning:
+ self.logger.warn(warning_no_config_regex)
+ else:
+ # The warning shouldn't be printed because we've detected that this
+ # interface was pick up as part of a regex but the config doesn't
+ # exist anymore. It was most likely removed from the config file itself
+ # We should down this interface and remove it from the ifaceobjdict
+ # and dependency graph used for the following ifreload.
+ ifname_to_remove = newifaceobjlist[objidx].name
+ ifacedownlist.append(ifname_to_remove)
+
+ try:
+ if new_ifaceobjdict:
+ del new_ifaceobjdict[ifname_to_remove]
+
+ for k, v in new_dependency_graph.iteritems():
+ if ifname_to_remove in v:
+ v.remove(ifname_to_remove)
+ del new_dependency_graph[ifname_to_remove]
+ except Exception as e:
+ self.logger.warning(warning_no_config_regex)
+ self.logger.warning("while trying to fix this situation "
+ "we ran into the following issues: %s" % str(e))
+
+ elif (lastifaceobjlist[0].link_kind and
not newifaceobjlist[0].link_kind):
self.logger.warn('%s: moved from being a %s to a'
' physical interface (non-logical interface).'