Manage a pool of nodes for a distributed test infrastructure
Go to file
James E. Blair 91804a5e16 Azure: switch to Azul
The Azure SDK for Python uses threads to manage async operations.
Every time a virtual machine is created, a new thread is spawned
to wait for it to finish (whether we actually end up polling it or
not).  This will cause the Azure driver to have significant
scalability limits compared to other drivers, possibly limiting
the number of simultaneous nodes to 50% compared to others.

To address this, switch to using a very simple requests-based
REST client I'm calling Azul.  The consistency of the Azure API
makes this simple.  As a bonus, we can use the excellent Azure
REST API documentation directly, rather that mapping attribute
names through the Python SDK (which has subtle differences).

A new fake Azure test fixture is also created in order to make
the current unit test a more thorough exercise of the code.

Finally, the "zuul-private-key" attribute is misnamed since we
have a policy of a one-way dependency from Zuul -> Nodepool.  It's
name is updated to match the GCE driver ("key") and moved to the
cloud-image section so that different images may be given different

Change-Id: I87bfa65733b2a71b294ebe2cf0d3404d0e4333c5
2021-03-08 14:58:31 -08:00
contrib/statsd_exporter Add statsd_exporter mapping 2019-09-29 09:30:45 +00:00
doc Azure: switch to Azul 2021-03-08 14:58:31 -08:00
etc Merge "Add systemd drop-in file for CentOS 7" 2018-05-09 18:09:54 +00:00
nodepool Azure: switch to Azul 2021-03-08 14:58:31 -08:00
playbooks Require TLS 2021-02-19 18:42:33 +00:00
releasenotes/notes Azure: switch to Azul 2021-03-08 14:58:31 -08:00
roles/nodepool-zuul-functional Upgrade pip before installing zuul 2021-02-14 09:21:02 +01:00
tools Add 2021-02-24 17:21:01 -08:00
.coveragerc Switch to stestr 2018-04-26 11:52:17 -05:00
.dockerignore Build images with Dockerfile instead of pbrx 2019-01-24 16:11:12 +00:00
.gitignore Require TLS 2021-02-19 18:42:33 +00:00
.gitreview OpenDev Migration Patch 2019-04-19 19:25:31 +00:00
.stestr.conf Switch to stestr 2018-04-26 11:52:17 -05:00
.zuul.yaml Increase timeout of docker release job 2021-02-22 11:07:23 -08:00
Dockerfile Dockerfile: add xz-utils 2020-09-10 08:50:08 +10:00
LICENSE license: remove dos line break 2018-01-19 00:30:22 +00:00
README.rst Update devstack settings and docs for opendev 2019-04-23 13:03:21 +00:00
TESTING.rst Add more detail to TESTING.rst 2020-06-09 08:48:43 -07:00
bindep.txt Require TLS 2021-02-19 18:42:33 +00:00
requirements.txt Require diskimage-builder 3.6.0 2021-01-21 09:35:42 +11:00
setup.cfg Drop python 3.5 support 2020-11-26 10:20:54 +01:00 Bump pbr requirements to >=1.3 2015-09-14 16:19:13 -04:00
test-requirements.txt Azure: switch to Azul 2021-03-08 14:58:31 -08:00
tox.ini Require TLS 2021-02-19 18:42:33 +00:00



Nodepool is a system for managing test node resources. It supports launching single-use test nodes from cloud providers as well as managing access to pre-defined pre-existing nodes. Nodepool is part of a suite of tools that form a comprehensive test system, including Zuul.

The latest documentation for Nodepool is published at:

The latest documentation for Zuul is published at:

Getting Help

There are two Zuul-related mailing lists:


A low-traffic announcement-only list to which every Zuul operator or power-user should subscribe.


General discussion about Zuul, including questions about how to use it, and future development.

You will also find Zuul developers in the #zuul channel on Freenode IRC.


To browse the latest code, see: To clone the latest code, use git clone

Bugs are handled at:!/project/zuul/nodepool

Code reviews are handled by gerrit at

After creating a Gerrit account, use git review to submit patches. Example:

# Do your commits
$ git review
# Enter your username if prompted

Join #zuul on Freenode to discuss development or usage.


Nodepool is free software, licensed under the Apache License, version 2.0.

Python Version Support

Nodepool requires Python 3. It does not support Python 2.