From b6b8bd2b773f5bb9433052ae6be037e65ab6c423 Mon Sep 17 00:00:00 2001 From: Julien Fortin Date: Tue, 27 Sep 2016 11:05:37 +0200 Subject: [PATCH] addons may provide a list of ifupdown scripts to ignore Ticket: Reviewed By: Roopa, Nikhil G Testing Done: ifupdown2's python addons are replacing some/most of the old ifupdown shell scripts. When addon_scripts_support is set to 1, ifupdown2 will execute every scripts present in /etc/network/if-$ACTION.d/ if a script exists with a name identical to an ifupdown2 addon, this script won't be executed. Sometimes an ifupdown2 addons doesn't have the same name as the ifupdown script it's supposed to replace. Or maybe one addon is replacing several scripts. For example: bond.py is replacing /etc/network/if-*.d/ifenslave Now each addon is able to provide a list of script to ignore. [16:54:40] root:ifupdown2 # ifquery bond0 iface bond0 bond-slaves tap0 tap1 [16:54:49] root:ifupdown2 # ifreload -a -d &> /tmp/ifreload.log [16:54:54] root:ifupdown2 # cat /tmp/ifreload.log | grep ifenslave debug: tap1: pre-up : running script /etc/network/if-pre-up.d/ifenslave info: executing /etc/network/if-pre-up.d/ifenslave debug: tap1: up : running script /etc/network/if-up.d/ifenslave info: executing /etc/network/if-up.d/ifenslave debug: lo: pre-up : running script /etc/network/if-pre-up.d/ifenslave info: executing /etc/network/if-pre-up.d/ifenslave debug: lo: up : running script /etc/network/if-up.d/ifenslave info: executing /etc/network/if-up.d/ifenslave debug: eth0: pre-up : running script /etc/network/if-pre-up.d/ifenslave info: executing /etc/network/if-pre-up.d/ifenslave debug: eth0: up : running script /etc/network/if-up.d/ifenslave info: executing /etc/network/if-up.d/ifenslave debug: tap0: pre-up : running script /etc/network/if-pre-up.d/ifenslave info: executing /etc/network/if-pre-up.d/ifenslave debug: tap0: up : running script /etc/network/if-up.d/ifenslave info: executing /etc/network/if-up.d/ifenslave [16:54:55] root:ifupdown2 # ... apply patch ... [16:55:16] root:ifupdown2 # ifreload -a -d &> /tmp/ifreload.log [16:55:18] root:ifupdown2 # cat /tmp/ifreload.log | grep ifenslave [16:55:19] root:ifupdown2 # Signed-off-by: Julien Fortin --- addons/bond.py | 3 +++ ifupdown/ifupdownmain.py | 11 ++++++----- ifupdownaddons/modulebase.py | 7 +++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/addons/bond.py b/addons/bond.py index 5fb3a45..0f7c3fa 100644 --- a/addons/bond.py +++ b/addons/bond.py @@ -17,6 +17,9 @@ from ifupdown.utils import utils class bond(moduleBase): """ ifupdown2 addon module to configure bond interfaces """ + + overrides_ifupdown_scripts = ['ifenslave', ] + _modinfo = { 'mhelp' : 'bond configuration module', 'attrs' : { 'bond-use-carrier': diff --git a/ifupdown/ifupdownmain.py b/ifupdown/ifupdownmain.py index c11e7ac..f086b97 100644 --- a/ifupdown/ifupdownmain.py +++ b/ifupdown/ifupdownmain.py @@ -222,7 +222,8 @@ class ifupdownMain(ifupdownBase): self.pp = pprint.PrettyPrinter(indent=4) self.modules = OrderedDict({}) self.module_attrs = {} - + self.overridden_ifupdown_scripts = [] + if self.config.get('addon_python_modules_support', '1') == '1': self.load_addon_modules(self.addon_modules_dir) if self.config.get('addon_scripts_support', '0') == '1': @@ -1198,10 +1199,11 @@ class ifupdownMain(ifupdownBase): raise try: minstance = mclass() + script_override = minstance.get_overrides_ifupdown_scripts() + self.overridden_ifupdown_scripts.extend(script_override) except moduleNotSupported, e: self.logger.info('module %s not loaded (%s)\n' %(mname, str(e))) - pass continue except: raise @@ -1281,10 +1283,9 @@ class ifupdownMain(ifupdownBase): try: module_list = os.listdir(msubdir) for module in module_list: - if self.modules.get(module) is not None: + if self.modules.get(module) or module in self.overridden_ifupdown_scripts: continue - self.script_ops[op].append( - msubdir + '/' + module) + self.script_ops[op].append(msubdir + '/' + module) except: # continue reading pass diff --git a/ifupdownaddons/modulebase.py b/ifupdownaddons/modulebase.py index 5b7840a..96f07ef 100644 --- a/ifupdownaddons/modulebase.py +++ b/ifupdownaddons/modulebase.py @@ -333,6 +333,13 @@ class moduleBase(object): except: return None + def get_overrides_ifupdown_scripts(self): + """ return the ifupdown scripts replaced by the current module """ + try: + return self.overrides_ifupdown_scripts + except: + return [] + def _get_reserved_vlan_range(self): start = end = 0 get_resvvlan = '/var/lib/ifupdown2/hooks/get_reserved_vlan_range.sh'