Change in vdsm[master]: net_configurators: Fix optional configurator importing
asegurap at redhat.com
asegurap at redhat.com
Fri Aug 1 11:09:06 UTC 2014
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: net_configurators: Fix optional configurator importing
......................................................................
net_configurators: Fix optional configurator importing
With the arrival of the first truly optional (its dependencies do not
need to be installed) configurator, i.e., pyroute_two, a flaw in my
getConfiguratorClass was exposed.
With this patch, configurators that deem themselves to be optional
can raise a vdsm.network.configurators.OptionalConfigurator if some
of the dependencies they have are missing and their usage should be
prevented
Change-Id: Iff38f5e334167e34ba379be164e690f2888f5fea
Signed-off-by: Antoni S. Puimedon <asegurap at redhat.com>
---
M vdsm/network/configurators/__init__.py
M vdsm/network/configurators/pyroute_two.py
M vdsm/vdsm-restore-net-config
3 files changed, 20 insertions(+), 2 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/24/30924/1
diff --git a/vdsm/network/configurators/__init__.py b/vdsm/network/configurators/__init__.py
index 2923290..e6d80b5 100644
--- a/vdsm/network/configurators/__init__.py
+++ b/vdsm/network/configurators/__init__.py
@@ -33,6 +33,12 @@
pass
+class OptionalConfigurator(ImportError):
+ """Configurator modules should raise this exception if they fail to import
+ their dependencies and are truly optional configurators"""
+ pass
+
+
class Configurator(object):
def __init__(self, configApplier, inRollback=False):
self.configApplier = configApplier
diff --git a/vdsm/network/configurators/pyroute_two.py b/vdsm/network/configurators/pyroute_two.py
index bd7e9b0..5524295 100644
--- a/vdsm/network/configurators/pyroute_two.py
+++ b/vdsm/network/configurators/pyroute_two.py
@@ -23,10 +23,17 @@
from vdsm import ipwrapper
from vdsm.netconfpersistence import RunningConfig
from . import libvirt
+from . import OptionalConfigurator
from .dhclient import DhcpClient
-from pyroute2 import IPDB
from .iproute2 import Iproute2
+try:
+ from pyroute2 import IPDB
+except ImportError as ie:
+ oce = OptionalConfigurator('Failed to import the pyroute2_two '
+ 'configurator', *ie.args)
+ raise oce
+
class PyrouteTwo(Iproute2):
def __init__(self, inRollback=False):
diff --git a/vdsm/vdsm-restore-net-config b/vdsm/vdsm-restore-net-config
index f933547..bdb6b6f 100755
--- a/vdsm/vdsm-restore-net-config
+++ b/vdsm/vdsm-restore-net-config
@@ -112,7 +112,12 @@
prefix = configurators.__name__ + '.'
for importer, moduleName, isPackage in pkgutil.iter_modules(
configurators.__path__, prefix):
- __import__(moduleName, fromlist="_")
+ try:
+ __import__(moduleName, fromlist="_")
+ except configurators.OptionalConfigurator as oce:
+ logging.debug('Ignoring optional configurator: %s. Reason: %r',
+ moduleName, oce.args)
+ continue
for cls in configurators.Configurator.__subclasses__():
yield cls
--
To view, visit http://gerrit.ovirt.org/30924
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iff38f5e334167e34ba379be164e690f2888f5fea
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap at redhat.com>
More information about the vdsm-patches
mailing list