Add config support for ZooKeeper servers

Allows defining a cluster of ZooKeeper servers within the nodepool
configuration file. Validation of the new config values is supported,
and the new values are documented.

Change-Id: I24401d08135a071dee1d00711fdd82c1d728b31a
This commit is contained in:
David Shrewsbury 2016-08-03 10:40:47 -04:00
parent 3c8bfe5e82
commit 9126b47650
6 changed files with 41 additions and 4 deletions

View File

@ -152,6 +152,21 @@ Example::
The ``port`` key is optional (default: 4730).
zookeeper-servers
-----------------
Lists the ZooKeeper servers uses for coordinating information between
nodepool workers. Example::
zookeeper-servers:
- host: zk1.example.com
port: 2181
chroot: /nodepool
The ``port`` key is optional (default: 2181).
The ``chroot`` key, used for interpreting ZooKeeper paths relative to
the supplied root path, is also optional and has no default.
.. _labels:
labels

View File

@ -122,6 +122,11 @@ class ConfigValidator:
'host': str,
'port': int,
}],
'zookeeper-servers': [{
'host': str,
'port': int,
'chroot': str,
}],
'cron': cron,
'providers': [providers],
'labels': [labels],

View File

@ -102,6 +102,10 @@ class GearmanServer(ConfigValue):
pass
class ZooKeeperServer(ConfigValue):
pass
class DiskImage(ConfigValue):
pass
@ -128,6 +132,7 @@ def loadConfig(config_path):
newconfig.jenkins_managers = {}
newconfig.zmq_publishers = {}
newconfig.gearman_servers = {}
newconfig.zookeeper_servers = {}
newconfig.diskimages = {}
newconfig.crons = {}
@ -155,6 +160,14 @@ def loadConfig(config_path):
g.name = g.host + '_' + str(g.port)
newconfig.gearman_servers[g.name] = g
for server in config.get('zookeeper-servers', []):
z = ZooKeeperServer()
z.host = server['host']
z.port = server.get('port', 2181)
z.chroot = server.get('chroot', '')
z.name = z.host + '_' + str(z.port)
newconfig.zookeeper_servers[z.name] = z
for provider in config.get('providers', []):
p = Provider()
p.name = provider['name']

View File

@ -19,6 +19,11 @@ zmq-publishers:
gearman-servers:
- host: zuul.openstack.org
zookeeper-servers:
- host: zk1.openstack.org
port: 2181
chroot: /test
labels:
- name: devstack-precise
image: devstack-precise

View File

@ -19,6 +19,9 @@ zmq-publishers:
gearman-servers:
- host: zuul.openstack.org
zookeeper-servers:
- host: zk1.openstack.org
labels:
- name: devstack-precise
image: devstack-precise

View File

@ -147,7 +147,3 @@ class TestNodepoolBuilder(tests.DBTestCase):
# We failed to upload first_fail_id and have
# moved onto another upload that will fail.
break
class TestZookeeper(tests.ZKTestCase):
def test_zk(self):
self.zkclient.get('/')