]> git.proxmox.com Git - mirror_ifupdown2.git/commitdiff
addon: handle unsupported modules
authorRoopa Prabhu <roopa@cumulusnetworks.com>
Mon, 11 Jul 2016 03:23:17 +0000 (20:23 -0700)
committerJulien Fortin <julien@cumulusnetworks.com>
Fri, 15 Jul 2016 12:16:21 +0000 (13:16 +0100)
Example: If /sbin/ethtool is not installed dont run the
ethtool addon module.

Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
addons/ethtool.py
ifupdown/exceptions.py
ifupdown/ifupdownmain.py
ifupdownaddons/modulebase.py

index 948c91e3b964a674c572c747409ad244ed1f87fc..7ee564d753be8eb87941a6509b57ec862e0ca0a0 100644 (file)
@@ -7,12 +7,14 @@ import json
 import ifupdown.policymanager as policymanager
 
 try:
+    import os
     from ipaddr import IPNetwork
     from sets import Set
     from ifupdown.iface import *
+    from ifupdown.exceptions import moduleNotSupported
     from ifupdown.utils import utils
     from ifupdownaddons.utilsbase import *
-    from ifupdownaddons.modulebase import moduleBase
+    from ifupdownaddons.modulebase import moduleBase, NotSupported
     from ifupdownaddons.iproute2 import iproute2
     import ifupdown.ifupdownflags as ifupdownflags
 except ImportError, e:
@@ -41,6 +43,8 @@ class ethtool(moduleBase,utilsBase):
 
     def __init__(self, *args, **kargs):
         moduleBase.__init__(self, *args, **kargs)
+        if not os.path.exists('/sbin/ethtool'):
+            raise moduleNotSupported('module init failed: no /sbin/ethtool found')
         self.ipcmd = None
         # keep a list of iface objects who have modified link attributes
         self.ifaceobjs_modified_configs = []
index f6cc8b730f8e6cd2a188645510af7d2c970ff44e..68d3b7f5d9202b48a2ff41e3fae1a8b45df7c3fb 100644 (file)
@@ -21,3 +21,6 @@ class invalidValueError(Error):
 
 class errorReadingStateError(Error):
     pass
+
+class moduleNotSupported(Error):
+    pass
index c5ca77ae5672362674c9406f38edd013394f7df8..15c39ed47c9a46000a5ed1bdbbb2ac2f8649f04f 100644 (file)
@@ -24,6 +24,7 @@ from scheduler import *
 from collections import deque
 from collections import OrderedDict
 from graph import *
+from exceptions import *
 from sets import Set
 
 """
@@ -822,7 +823,15 @@ class ifupdownMain(ifupdownBase):
                             mclass = getattr(m, mname)
                         except:
                             raise
-                        minstance = mclass()
+                        try:
+                            minstance = mclass()
+                        except moduleNotSupported, e:
+                            self.logger.info('module %s not loaded (%s)\n'
+                                             %(mname, str(e)))
+                            pass
+                            continue
+                        except:
+                            raise
                         self.modules[mname] = minstance
                         try:
                             self.module_attrs[mname] = minstance.get_modinfo()
index 63332700d63656a9b9b933f2c98b0949d2e0b84f..fe3d9e5d9528cb08727e76f197859095172e8c6c 100644 (file)
@@ -15,6 +15,9 @@ from ifupdown.iface import *
 import ifupdown.policymanager as policymanager
 import ifupdown.ifupdownflags as ifupdownflags
 
+class NotSupported(Exception):
+    pass
+
 class moduleBase(object):
     """ Base class for ifupdown addon modules