1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

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 <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2016-09-27 11:05:37 +02:00
parent 8252491ed0
commit b6b8bd2b77
3 changed files with 16 additions and 5 deletions

View File

@ -17,6 +17,9 @@ from ifupdown.utils import utils
class bond(moduleBase): class bond(moduleBase):
""" ifupdown2 addon module to configure bond interfaces """ """ ifupdown2 addon module to configure bond interfaces """
overrides_ifupdown_scripts = ['ifenslave', ]
_modinfo = { 'mhelp' : 'bond configuration module', _modinfo = { 'mhelp' : 'bond configuration module',
'attrs' : { 'attrs' : {
'bond-use-carrier': 'bond-use-carrier':

View File

@ -222,7 +222,8 @@ class ifupdownMain(ifupdownBase):
self.pp = pprint.PrettyPrinter(indent=4) self.pp = pprint.PrettyPrinter(indent=4)
self.modules = OrderedDict({}) self.modules = OrderedDict({})
self.module_attrs = {} self.module_attrs = {}
self.overridden_ifupdown_scripts = []
if self.config.get('addon_python_modules_support', '1') == '1': if self.config.get('addon_python_modules_support', '1') == '1':
self.load_addon_modules(self.addon_modules_dir) self.load_addon_modules(self.addon_modules_dir)
if self.config.get('addon_scripts_support', '0') == '1': if self.config.get('addon_scripts_support', '0') == '1':
@ -1198,10 +1199,11 @@ class ifupdownMain(ifupdownBase):
raise raise
try: try:
minstance = mclass() minstance = mclass()
script_override = minstance.get_overrides_ifupdown_scripts()
self.overridden_ifupdown_scripts.extend(script_override)
except moduleNotSupported, e: except moduleNotSupported, e:
self.logger.info('module %s not loaded (%s)\n' self.logger.info('module %s not loaded (%s)\n'
%(mname, str(e))) %(mname, str(e)))
pass
continue continue
except: except:
raise raise
@ -1281,10 +1283,9 @@ class ifupdownMain(ifupdownBase):
try: try:
module_list = os.listdir(msubdir) module_list = os.listdir(msubdir)
for module in module_list: 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 continue
self.script_ops[op].append( self.script_ops[op].append(msubdir + '/' + module)
msubdir + '/' + module)
except: except:
# continue reading # continue reading
pass pass

View File

@ -333,6 +333,13 @@ class moduleBase(object):
except: except:
return None 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): def _get_reserved_vlan_range(self):
start = end = 0 start = end = 0
get_resvvlan = '/var/lib/ifupdown2/hooks/get_reserved_vlan_range.sh' get_resvvlan = '/var/lib/ifupdown2/hooks/get_reserved_vlan_range.sh'