--- /dev/null
+From f20723e25d5b12edc57b2a1fd0901bd3ee7c91a7 Mon Sep 17 00:00:00 2001
+From: Alexandre Derumier <aderumier@odiso.com>
+Date: Mon, 3 Feb 2020 05:56:49 +0100
+Subject: [PATCH] execute addons scripts before modules
+
+ip address are now setup in pre-up,
+but ovs interfaces are created in pre-up script too. (but after address module)
+
+We need to be sure than addons scripts are executed before modules
+
+Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
+---
+ ifupdown2/ifupdown/scheduler.py | 35 +++++++++++++++++----------------
+ 1 file changed, 18 insertions(+), 17 deletions(-)
+
+diff --git a/ifupdown2/ifupdown/scheduler.py b/ifupdown2/ifupdown/scheduler.py
+index 00130ad..8b78f05 100644
+--- a/ifupdown2/ifupdown/scheduler.py
++++ b/ifupdown2/ifupdown/scheduler.py
+@@ -84,6 +84,24 @@ class ifaceScheduler():
+ query_ifaceobj.set_state_n_status(ifaceState.from_str(op),
+ ifaceStatus.NOTFOUND)
+ return
++
++ if ifupdownobj.config.get('addon_scripts_support', '0') == '1':
++ # execute /etc/network/ scripts
++ os.environ['IFACE'] = ifaceobj.name if ifaceobj.name else ''
++ os.environ['LOGICAL'] = ifaceobj.name if ifaceobj.name else ''
++ os.environ['METHOD'] = ifaceobj.addr_method if ifaceobj.addr_method else ''
++ os.environ['ADDRFAM'] = ','.join(ifaceobj.addr_family) if ifaceobj.addr_family else ''
++ for mname in ifupdownobj.script_ops.get(op, []):
++ ifupdownobj.logger.debug('%s: %s : running script %s'
++ %(ifacename, op, mname))
++ try:
++ utils.exec_command(mname, env=cenv)
++ except Exception, e:
++ if "permission denied" in str(e).lower():
++ ifupdownobj.logger.warning('%s: %s %s' % (ifacename, op, str(e)))
++ else:
++ ifupdownobj.log_error('%s: %s %s' % (ifacename, op, str(e)))
++
+ for mname in ifupdownobj.module_ops.get(op):
+ m = ifupdownobj.modules.get(mname)
+ err = 0
+@@ -126,23 +144,6 @@ class ifaceScheduler():
+ ifaceobj.set_state_n_status(ifaceState.from_str(op),
+ status)
+
+- if ifupdownobj.config.get('addon_scripts_support', '0') == '1':
+- # execute /etc/network/ scripts
+- os.environ['IFACE'] = ifaceobj.name if ifaceobj.name else ''
+- os.environ['LOGICAL'] = ifaceobj.name if ifaceobj.name else ''
+- os.environ['METHOD'] = ifaceobj.addr_method if ifaceobj.addr_method else ''
+- os.environ['ADDRFAM'] = ','.join(ifaceobj.addr_family) if ifaceobj.addr_family else ''
+- for mname in ifupdownobj.script_ops.get(op, []):
+- ifupdownobj.logger.debug('%s: %s : running script %s'
+- %(ifacename, op, mname))
+- try:
+- utils.exec_command(mname, env=cenv)
+- except Exception, e:
+- if "permission denied" in str(e).lower():
+- ifupdownobj.logger.warning('%s: %s %s' % (ifacename, op, str(e)))
+- else:
+- ifupdownobj.log_error('%s: %s %s' % (ifacename, op, str(e)))
+-
+ @classmethod
+ def run_iface_list_ops(cls, ifupdownobj, ifaceobjs, ops):
+ """ Runs all operations on a list of interface
+--
+2.20.1
+