From 82858a1eeda1618a9b2d08bbb3aae4965dd4ab70 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Mon, 25 Feb 2013 23:14:01 +0000 Subject: Allow zk driver be imported without zookeeper The zookeeper python module isn't widely available (e.g. not available on Fedora), so allow the zk servicegroup driver be imported even if the module isn't found. This helps allow the generate_sample.sh script generate a sample config file even without zookeeper installed. Change-Id: Ic3b3bb75bcd2003150909ebd2c5724fa5093c346 --- nova/servicegroup/drivers/zk.py | 9 ++++++--- nova/tests/servicegroup/test_zk_driver.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/nova/servicegroup/drivers/zk.py b/nova/servicegroup/drivers/zk.py index b3c2ba965..24963b7fb 100644 --- a/nova/servicegroup/drivers/zk.py +++ b/nova/servicegroup/drivers/zk.py @@ -19,16 +19,17 @@ import os import eventlet -import evzookeeper -from evzookeeper import membership from oslo.config import cfg -import zookeeper from nova import exception +from nova.openstack.common import importutils from nova.openstack.common import log as logging from nova.servicegroup import api from nova import utils +evzookeeper = importutils.try_import('evzookeeper') +membership = importutils.try_import('evzookeeper.membersip') +zookeeper = importutils.try_import('zookeeper') zk_driver_opts = [ cfg.StrOpt('address', @@ -58,6 +59,8 @@ class ZooKeeperDriver(api.ServiceGroupDriver): def __init__(self, *args, **kwargs): """Create the zk session object.""" + if not all([evzookeeper, membership, zookeeper]): + raise ImportError('zookeeper module not found') null = open(os.devnull, "w") self._session = evzookeeper.ZKSession(CONF.zookeeper.address, recv_timeout= diff --git a/nova/tests/servicegroup/test_zk_driver.py b/nova/tests/servicegroup/test_zk_driver.py index 7330da66a..a33b4b0cd 100644 --- a/nova/tests/servicegroup/test_zk_driver.py +++ b/nova/tests/servicegroup/test_zk_driver.py @@ -38,7 +38,7 @@ class ZKServiceGroupTestCase(test.TestCase): servicegroup.API._driver = None try: from nova.servicegroup.drivers import zk - _unused = zk + _unused = zk.ZooKeeperDriver() except ImportError: self.skipTest("Unable to test due to lack of ZooKeeper") self.flags(servicegroup_driver='zk') -- cgit