A Nodeset is a named collection of nodes for use by a job. Jobs may specify what nodes they require individually, however, by defining groups of node types once and referring to them by name, job configuration may be simplified.

Nodesets, like most configuration items, are unique within a tenant, though a nodeset may be defined on multiple branches of the same project as long as the contents are the same. This is to aid in branch maintenance, so that creating a new branch based on an existing branch will not immediately produce a configuration error.

- nodeset:
    name: nodeset1
      - name: controller
        label: controller-label
      - name: compute1
        label: compute-label
      - name:
          - compute2
          - web
        label: compute-label
      - name: ceph-osd
          - controller
      - name: ceph-monitor
          - controller
          - compute1
          - compute2
       - name: ceph-web
           - web

A Nodeset requires two attributes: (required)

The name of the Nodeset, to be referenced by a Job.

nodeset.nodes (required)

A list of node definitions, each of which has the following format: (required)

The name of the node. This will appear in the Ansible inventory for the job.

This can also be as a list of strings. If so, then the list of hosts in the Ansible inventory will share a common ansible_host address.

nodeset.nodes.label (required)

The Nodepool label for the node. Zuul will request a node with this label.


Additional groups can be defined which are accessible from the ansible playbooks. (required)

The name of the group to be referenced by an ansible playbook.

nodeset.groups.nodes (required)

The nodes that shall be part of the group. This is specified as a list of strings.