devstack/.zuul.yaml
Andrea Frittoli 5e714d3308 Fix multinode mode for devstack
Extend the devstack job so that it can support both single and multinode
cases.  Multinode mode require extra settings in devstack configuration,
some of which as subnode specific, some controller specific.

Also keep a simple devstack-multinode job defined for now so we can run
a multinode job in devstack gate, until the full tempest multinode job
is ready to match the old
gate-tempest-dsvm-neutron-multinode-full-ubuntu-xenial-nv.

Fixing multinode also requires sharing the CA configuration between
controller and peers, overlay network configuration for communication
between virtual machines and running discover_hosts for nova after the
subnode has been setup.

The extra orchestration required for multinode is encoded in a
dedicated role to allow for jobs in other repos to re-use it.

Change-Id: I2dcbd9bdb401860820e655d97aa3c4775af2827f
2018-03-07 12:47:55 +00:00

368 lines
12 KiB
YAML

- nodeset:
name: openstack-single-node
nodes:
- name: controller
label: ubuntu-xenial
groups:
- name: tempest
nodes:
- controller
- nodeset:
name: openstack-two-node
nodes:
- name: controller
label: ubuntu-xenial
- name: compute1
label: ubuntu-xenial
groups:
# Node where tests are executed and test results collected
- name: tempest
nodes:
- controller
# Nodes running the compute service
- name: compute
nodes:
- controller
- compute1
# Nodes that are not the controller
- name: subnode
nodes:
- compute1
# Switch node for multinode networking setup
- name: switch
nodes:
- controller
# Peer nodes for multinode networking setup
- name: peers
nodes:
- compute1
- job:
name: devstack-base
parent: multinode
abstract: true
description: |
Base abstract Devstack job.
Defines plays and base variables, but it does not include any project
and it does not run any service by default. This is a common base for
all single Devstack jobs, single or multinode.
Variables are defined in job.vars, which is what is then used by single
node jobs and by multi node jobs for the controller, as well as in
job.group-vars.peers, which is what is used by multi node jobs for subnode
nodes (everything but the controller).
required-projects:
- openstack-dev/devstack
roles:
- zuul: openstack-infra/devstack-gate
- zuul: openstack-infra/openstack-zuul-jobs
vars:
devstack_localrc:
DATABASE_PASSWORD: secretdatabase
RABBIT_PASSWORD: secretrabbit
ADMIN_PASSWORD: secretadmin
SERVICE_PASSWORD: secretservice
NETWORK_GATEWAY: 10.1.0.1
FIXED_RANGE: 10.1.0.0/20
IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
FLOATING_RANGE: 172.24.5.0/24
PUBLIC_NETWORK_GATEWAY: 172.24.5.1
LOGFILE: /opt/stack/logs/devstacklog.txt
LOG_COLOR: false
VERBOSE: true
VERBOSE_NO_TIMESTAMP: true
NOVNC_FROM_PACKAGE: true
ERROR_ON_CLONE: true
# Gate jobs can't deal with nested virt. Disable it.
LIBVIRT_TYPE: qemu
# NOTE(dims): etcd 3.x is not available in debian/ubuntu
# etc. As a stop gap measure, devstack uses wget to download
# from the location below for all the CI jobs.
ETCD_DOWNLOAD_URL: http://tarballs.openstack.org/etcd/
devstack_services:
# Ignore any default set by devstack. Emit a "disable_all_services".
base: false
zuul_copy_output:
'{{ devstack_conf_dir }}/local.conf': 'logs'
'{{ devstack_conf_dir }}/localrc': 'logs'
'{{ devstack_conf_dir }}/.stackenv': 'logs'
'{{ devstack_log_dir }}/dstat-csv.log': 'logs'
'{{ devstack_log_dir }}/devstacklog.txt': 'logs'
'{{ devstack_log_dir }}/devstacklog.txt.summary': 'logs'
'{{ devstack_full_log}}': 'logs'
'{{ stage_dir }}/verify_tempest_conf.log': 'logs'
'{{ stage_dir }}/apache': 'logs'
'{{ stage_dir }}/apache_config': 'logs'
'{{ stage_dir }}/etc': 'logs'
'/var/log/rabbitmq': 'logs'
'/var/log/postgresql': 'logs'
'/var/log/mysql.err': 'logs'
'/var/log/mysql.log': 'logs'
'/var/log/libvirt': 'logs'
'/etc/sudoers': 'logs'
'/etc/sudoers.d': 'logs'
'{{ stage_dir }}/iptables.txt': 'logs'
'{{ stage_dir }}/df.txt': 'logs'
'{{ stage_dir }}/pip2-freeze.txt': 'logs'
'{{ stage_dir }}/pip3-freeze.txt': 'logs'
'{{ stage_dir }}/dpkg-l.txt': 'logs'
'{{ stage_dir }}/rpm-qa.txt': 'logs'
'{{ stage_dir }}/core': 'logs'
'{{ stage_dir }}/listen53.txt': 'logs'
'{{ stage_dir }}/deprecations.log': 'logs'
'/var/log/ceph': 'logs'
'/var/log/openvswitch': 'logs'
'/var/log/glusterfs': 'logs'
'/etc/glusterfs/glusterd.vol': 'logs'
'/etc/resolv.conf': 'logs'
'/var/log/unbound.log': 'logs'
extensions_to_txt:
conf: True
log: True
localrc: True
stackenv: True
group-vars:
subnode:
devstack_localrc:
DATABASE_PASSWORD: secretdatabase
RABBIT_PASSWORD: secretrabbit
ADMIN_PASSWORD: secretadmin
SERVICE_PASSWORD: secretservice
NETWORK_GATEWAY: 10.1.0.1
FIXED_RANGE: 10.1.0.0/20
IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
FLOATING_RANGE: 172.24.5.0/24
PUBLIC_NETWORK_GATEWAY: 172.24.5.1
LOGFILE: /opt/stack/logs/devstacklog.txt
LOG_COLOR: false
VERBOSE: true
VERBOSE_NO_TIMESTAMP: true
NOVNC_FROM_PACKAGE: true
ERROR_ON_CLONE: true
LIBVIRT_TYPE: qemu
ETCD_DOWNLOAD_URL: http://tarballs.openstack.org/etcd/
devstack_services:
base: false
pre-run: playbooks/pre.yaml
run: playbooks/devstack.yaml
post-run: playbooks/post.yaml
irrelevant-files:
# Documentation related
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^releasenotes/.*$
# Translations
- ^.*/locale/.*po$
- job:
name: devstack
parent: devstack-base
description: |
Base devstack job for integration gate.
This base job can be used for single node and multinode devstack jobs.
nodeset: openstack-single-node
required-projects:
- openstack/cinder
- openstack/glance
- openstack/keystone
- openstack/neutron
- openstack/nova
- openstack/requirements
- openstack/swift
timeout: 7200
vars:
devstack_localrc:
# Common OpenStack services settings
SWIFT_REPLICAS: 1
SWIFT_START_ALL_SERVICES: false
SWIFT_HASH: 1234123412341234
CINDER_PERIODIC_INTERVAL: 10
DEBUG_LIBVIRT_COREDUMPS: True
NOVA_VNC_ENABLED: true
VNCSERVER_LISTEN: 0.0.0.0
VNCSERVER_PROXYCLIENT_ADDRESS: "{{ hostvars[inventory_hostname]['nodepool']['private_ipv4'] }}"
# Multinode specific settings
SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
HOST_IP: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
PUBLIC_BRIDGE_MTU: "{{ external_bridge_mtu }}"
devstack_localconf:
post-config:
$NEUTRON_CONF:
DEFAULT:
global_physnet_mtu: "{{ external_bridge_mtu }}"
devstack_services:
# Core services enabled for this branch.
# This list replaces the test-matrix.
# Shared services
dstat: true
etcd3: true
mysql: true
peakmem_tracker: true
rabbit: true
tls-proxy: true
# Keystone services
key: true
# Glance services
g-api: true
g-reg: true
# Nova services
n-api: true
n-api-meta: true
n-cauth: true
n-cond: true
n-cpu: true
n-novnc: true
n-obj: true
n-sch: true
placement-api: true
# Neutron services
neutron-api: true
neutron-agent: true
neutron-dhcp: true
neutron-l3: true
neutron-metadata-agent: true
neutron-metering: true
# Swift services
s-account: true
s-container: true
s-object: true
s-proxy: true
# Cinder services
c-api: true
c-bak: true
c-sch: true
c-vol: true
cinder: true
# Services we don't need.
# This section is not really needed, it's for readability.
horizon: false
tempest: false
# Test matrix emits ceilometer but ceilomenter is not installed in the
# integrated gate, so specifying the services has not effect.
# ceilometer-*: false
group-vars:
subnode:
devstack_services:
# Core services enabled for this branch.
# This list replaces the test-matrix.
# Shared services
dstat: true
peakmem_tracker: true
tls-proxy: true
# Nova services
n-cpu: true
placement-client: true
# Neutron services
neutron-agent: true
# Cinder services
c-bak: true
c-vol: true
# Services we don't run at all on subnode.
# This section is not really needed, it's for readability.
# keystone: false
# s-*: false
horizon: false
tempest: false
# Test matrix emits ceilometer but ceilomenter is not installed in the
# integrated gate, so specifying the services has not effect.
# ceilometer-*: false
devstack_localrc:
# Multinode specific settings
HOST_IP: "{{ hostvars[inventory_hostname]['nodepool']['private_ipv4'] }}"
SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
PUBLIC_BRIDGE_MTU: "{{ external_bridge_mtu }}"
# Subnode specific settings
DATABASE_TYPE: mysql
GLANCE_HOSTPORT: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}:9292"
Q_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
RABBIT_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
DATABASE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
- job:
name: devstack-multinode
parent: devstack
nodeset: openstack-two-node
description: |
Simple multinode test to verify multinode functionality on devstack side.
This is not meant to be used as a parent job.
- job:
name: devstack-tox-base
parent: devstack
description: |
Base job for devstack-based functional tests that use tox.
This job is not intended to be run directly. It's just here
for organizational purposes for devstack-tox-functional and
devstack-tox-functional-consumer.
post-run: playbooks/tox/post.yaml
vars:
tox_envlist: functional
tox_install_siblings: false
- job:
name: devstack-tox-functional
parent: devstack-tox-base
description: |
Base job for devstack-based functional tests that use tox.
Runs devstack, then runs the tox ``functional`` environment,
then collects tox/testr build output like normal tox jobs.
Turns off tox sibling installation. Projects may be involved
in the devstack deployment and so may be in the required-projects
list, but may not want to test against master of the other
projects in their tox env. Child jobs can set tox_install_siblings
to True to re-enable sibling processing.
run: playbooks/tox/run-both.yaml
- job:
name: devstack-tox-functional-consumer
parent: devstack
description: |
Base job for devstack-based functional tests for projects that
consume the devstack cloud.
This base job should only be used by projects that are not involved
in the devstack deployment step, but are instead projects that are using
devstack to get a cloud against which they can test things.
Runs devstack in pre-run, then runs the tox ``functional`` environment,
then collects tox/testr build output like normal tox jobs.
Turns off tox sibling installation. Projects may be involved
in the devstack deployment and so may be in the required-projects
list, but may not want to test against master of the other
projects in their tox env. Child jobs can set tox_install_siblings
to True to re-enable sibling processing.
pre-run:
- playbooks/devstack.yaml
- playbooks/tox/pre.yaml
run: playbooks/tox/run.yaml
- job:
name: devstack-unit-tests
description: |
Runs unit tests on devstack project.
It runs ``run_tests.sh``.
pre-run: playbooks/unit-tests/pre.yaml
run: playbooks/unit-tests/run.yaml
- project:
check:
jobs:
- devstack
- devstack-multinode
- devstack-unit-tests
gate:
jobs:
- devstack
- devstack-unit-tests
experimental:
jobs:
- nova-next