Files
ironic/zuul.d/ironic-jobs.yaml
Julia Kreger b87b970e30 ci: disable the novnc service on multinode
It appears we have an address conflict as it relates to the
ir-novnc service, but we don't need it for these jobs.

So, disable the extra service.

Change-Id: I28fc766f62d9dda93f2d3469eaaec73e63057415
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-26 13:53:58 -07:00

1489 lines
55 KiB
YAML

---
# NOTE(TheJulia): Based upon openstack-single-node-noble's nodeset definition,
# but copied and the base label changed to match what we need for higher mem
# jobs.
- nodeset:
# Base tenant node for high memory ironic jobs.
name: ironic-single-node-noble
nodes:
- name: controller
label: ubuntu-noble-32GB
groups:
- name: tempest
nodes:
- controller
# NOTE(TheJulia): Based upon openstack-two-node-noble, but modeled
# for Ironic's multinode jobs.
- nodeset:
name: ironic-three-node-noble
nodes:
- name: controller
label: ubuntu-noble
- name: compute0
label: ubuntu-noble
- name: compute1
label: ubuntu-noble
groups:
# Node where tests are executed and test results collected
- name: tempest
nodes:
- controller
# Nodes running the compute service
- name: compute
nodes:
- controller
- compute0
- compute1
# Nodes that are not the controller
- name: subnode
nodes:
- compute0
- compute1
# Switch node for multinode networking setup
- name: switch
nodes:
- controller
# Peer nodes for multinode networking setup
- name: peers
nodes:
- compute0
- compute1
- job:
name: ironic-base
abstract: true
description: Base job for devstack/tempest based ironic jobs.
parent: devstack-tempest
nodeset: openstack-single-node-noble
post-run: playbooks/ci-workarounds/get_extra_logging.yaml
timeout: 10800
required-projects:
# TODO(TheJulia): Explicitly pull in DIB until we get a release cut.
- opendev.org/openstack/diskimage-builder
- opendev.org/openstack/ironic
- opendev.org/openstack/ironic-python-agent
- opendev.org/openstack/ironic-python-agent-builder
- opendev.org/openstack/ironic-tempest-plugin
- opendev.org/openstack/virtualbmc
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^driver-requirements.txt$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^\.pre-commit-config\.yaml$
- ^redfish-interop-profiles/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^test-requirements.txt$
- ^tox.ini$
vars:
tox_envlist: all
tempest_test_timeout: 2600
tempest_test_regex: ironic_tempest_plugin.tests.scenario
tempest_concurrency: 1
devstack_localrc:
DEFAULT_INSTANCE_TYPE: baremetal
FORCE_CONFIG_DRIVE: True
INSTALL_TEMPEST: False # Don't install a tempest package globally
VIRT_DRIVER: ironic
BUILD_TIMEOUT: 2000
IRONIC_BAREMETAL_BASIC_OPS: True
IRONIC_BUILD_DEPLOY_RAMDISK: False
IRONIC_CALLBACK_TIMEOUT: 1800
IRONIC_DEPLOY_DRIVER: ipmi
IRONIC_INSPECTOR_BUILD_RAMDISK: False
IRONIC_INSPECTOR_TEMPEST_INTROSPECTION_TIMEOUT: 1200
IRONIC_LOG_STEPS_TO_SYSLOG: True
IRONIC_TEMPEST_BUILD_TIMEOUT: 2000
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: False
IRONIC_VM_COUNT: 2
IRONIC_VM_EPHEMERAL_DISK: 1
IRONIC_VM_SPECS_RAM: 2750
IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
# NOTE(dtantsur): in some jobs we end up with 12 disks total, so reduce
# each of them. For don't need all 10 GiB for CirrOS anyway.
IRONIC_VM_SPECS_DISK: 4
IRONIC_VM_SPECS_CPU: 2
Q_AGENT: openvswitch
Q_ML2_TENANT_NETWORK_TYPE: vxlan
Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
SERVICE_TIMEOUT: 90
# NOTE(TheJulia): Devstack default glance limit is 1GB, we need
# something more like 5GB for baremetal jobs due to image sizes
# with firmware.
GLANCE_LIMIT_IMAGE_SIZE_TOTAL: 5000
# NOTE(TheJulia): Disable neutron firewall as bug
# https://bugs.launchpad.net/neutron/+bug/1944201
# causes us an abnormally high job failure rate due to the ports
# not being found (as neutron crashed on initialization).
Q_USE_SECGROUP: False
# Default API workers is 2, however only 1 is needed,
# which cuts API memory utilziation in half reducing the risk of
# oom-killer events in CI.
API_WORKERS: 1
CIRROS_VERSION: 0.6.1
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
tempest_plugins:
- ironic-tempest-plugin
zuul_copy_output:
'{{ devstack_base_dir }}/ironic-bm-logs': 'logs'
'{{ devstack_base_dir }}/data/networking-generic-switch/netmiko_session.log': 'logs'
devstack_services:
# TODO: re-enable dstat once https://storyboard.openstack.org/#!/story/2008185
# is resolved
dstat: false
atop: True
q-agt: true
q-dhcp: true
q-l3: true
q-meta: true
q-svc: true
ovn-controller: false
ovn-northd: false
q-ovn-metadata-agent: false
c-api: False
c-bak: False
c-sch: False
c-vol: False
cinder: False
s-account: False
s-container: False
s-object: False
s-proxy: False
openstack-cli-server: True
- job:
name: ironic-standalone-aarch64
description:
Test ironic standalone configured with redfish hardware type, ramdisk
and direct deploy interfaces, rescue enabled using ARM64 VMs as deploy
targets. If this job fails alone, there may be an issue with ARM support
specifically.
parent: ironic-base
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^\.pre-commit-config\.yaml$
- ^releasenotes/.*$
- ^setup.cfg$
- ^test-requirements.txt$
- ^tools/.*$
- ^tox.ini$
vars:
tempest_test_regex: BaremetalDriverDirectWholedisk
tempest_concurrency: 2
devstack_localrc:
FORCE_CONFIG_DRIVE: False
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: http
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_BUILD_DEPLOY_RAMDISK: False
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_DEFAULT_RESCUE_INTERFACE: agent
IRONIC_ENABLED_BOOT_INTERFACES: "ipxe,redfish-virtual-media,http-ipxe,pxe,http"
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_ENABLED_DEPLOY_INTERFACES: "direct,ramdisk"
IRONIC_ENABLED_RESCUE_INTERFACES: "agent,no-rescue"
IRONIC_BOOT_MODE: uefi
IRONIC_CALLBACK_TIMEOUT: 800
IRONIC_GRUB2_SHIM_FILE: https://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/EFI/BOOT/BOOTAA64.EFI
IRONIC_GRUB2_FILE: https://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/EFI/BOOT/grubaa64.efi
IRONIC_HW_ARCH: aarch64
IRONIC_DIB_RAMDISK_OS: debian-arm64
IRONIC_VM_SPECS_RAM: 4096
IRONIC_VM_SPECS_CPU: 1
IRONIC_VM_COUNT: 1
IRONIC_VM_VOLUME_COUNT: 2
# We're using a lot of disk space in this job. Some testing nodes have
# a small root partition, so use /opt which is mounted from a bigger
# ephemeral partition on such nodes
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
devstack_services:
atop: True
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
s-account: False
s-container: False
s-object: False
s-proxy: False
# NOTE(TheJulia): This job is being phased out as it ends up executing
# the wholedisk standalone deploy, the partition standalone deploy,
# software raid tests, and ramdisk iso boot tests. All of this while in
# UEFI mode. Although the redfish test runs the exact same tests and *more*.
# On top of that, there really is not a good variation which would be
# impacted through IPMI while we keep other ipmi jobs in our CI config.
# NOTE(JayF) 2025 Apr 7 noticed usage in IPA; removal in
# https://review.opendev.org/c/openstack/ironic-python-agent/+/946580
- job:
name: ironic-standalone
description:
Deprecated standalone job. Do not use this as a parent or run it.
Scheduled for removal.
parent: ironic-base
nodeset: ironic-single-node-noble
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^\.pre-commit-config\.yaml$
- ^redfish-interop-profiles/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^test-requirements.txt$
- ^tools/.*$
- ^tox.ini$
vars:
tempest_test_regex: ironic_standalone
tempest_concurrency: 3
devstack_localrc:
FORCE_CONFIG_DRIVE: False
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: http
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_DEFAULT_RESCUE_INTERFACE: agent
IRONIC_ENABLED_HARDWARE_TYPES: ipmi
IRONIC_ENABLED_DEPLOY_INTERFACES: "direct,ramdisk"
IRONIC_ENABLED_RESCUE_INTERFACES: "agent,no-rescue"
IRONIC_JSON_RPC_AUTH_STRATEGY: 'http_basic'
IRONIC_RPC_TRANSPORT: json-rpc
IRONIC_VM_SPECS_CPU: 1
IRONIC_VM_COUNT: 5
IRONIC_VM_VOLUME_COUNT: 2
# We're using a lot of disk space in this job. Some testing nodes have
# a small root partition, so use /opt which is mounted from a bigger
# ephemeral partition on such nodes
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
Q_AGENT: ovn
Q_ML2_TENANT_NETWORK_TYPE: vlan
Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
ENABLE_CHASSIS_AS_GW: True
ML2_L3_PLUGIN: "ovn-router,trunk"
OVN_DBS_LOG_LEVEL: dbg
devstack_services:
atop: True
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
s-account: False
s-container: False
s-object: False
s-proxy: False
q-agt: False
q-dhcp: False
q-l3: False
ovn-controller: True
ovn-northd: True
q-ovn-metadata-agent: True
- job:
name: ironic-standalone-redfish
parent: ironic-base
nodeset: ironic-single-node-noble
description:
Test ironic standalone configured with redfish hardware type,
direct, and ansible deploy interfaces, rescue is not enabled.
If this job fails alone, look for regressions in the ansible deploy
interfaces.
required-projects:
- opendev.org/openstack/sushy-tools
- opendev.org/openstack/ironic-python-agent-builder
vars:
tempest_test_regex: ironic_standalone
tempest_concurrency: 3
devstack_localrc:
FORCE_CONFIG_DRIVE: False
# NOTE(TheJulia): Change IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE back to http
# once https://bugs.launchpad.net/ironic/+bug/2116135 has been fixed in IPA
# Images used by CI.
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: local
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_DEPLOY_DRIVER: redfish
# NOTE(TheJulia): We test numerous boot interfaces here, but "http"
# with "grub2" is functionally unstable. Basically high odds of failure
# with VMs in EFI request handling with VMs.
# FIXME(dtantsur): add back the pxe interface once it actually works
# and the boot interface handling in the tempest plugin is fixed.
IRONIC_ENABLED_BOOT_INTERFACES: "ipxe,redfish-virtual-media,http-ipxe"
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_POWER_INTERFACES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_ENABLED_DEPLOY_INTERFACES: "direct,ansible,ramdisk"
IRONIC_RPC_TRANSPORT: json-rpc
IRONIC_VM_COUNT: 5
IRONIC_VM_VOLUME_COUNT: 2
IRONIC_VM_SPECS_CPU: 1
# We're using a lot of disk space in this job. Some testing nodes have
# a small root partition, so use /opt which is mounted from a bigger
# ephemeral partition on such nodes
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
# Always build IPA ramdisks, to enable key injection for ansible
# deploy interface testing.
IRONIC_BUILD_DEPLOY_RAMDISK: True
devstack_services:
atop: True
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
s-account: False
s-container: False
s-object: False
s-proxy: False
- job:
# NOTE(TheJulia): While a standalone job, this really only runs 1 test.
# Or at least, should only run one test.
name: ironic-standalone-anaconda
parent: ironic-standalone-redfish
nodeset: openstack-single-node-noble
description:
Test Ironic with the anaconda deployment interface. If this fails alone,
check for regressions in the anaconda deployment interface. Also,
this job uses external, third-party mirrors and is susceptible to
network failures.
required-projects:
- opendev.org/openstack/sushy-tools
vars:
tempest_test_regex: BaremetalRedfishIPxeAnacondaNoGlance
tempest_test_timeout: 4800
tempest_concurrency: 1
devstack_localrc:
IRONIC_ENABLED_DEPLOY_INTERFACES: "anaconda"
IRONIC_VM_COUNT: 2
IRONIC_VM_VOLUME_COUNT: 1
IRONIC_VM_SPECS_RAM: 3192
IRONIC_VM_SPECS_CPU: 3
# We're using a lot of disk space in this job. Some testing nodes have
# a small root partition, so use /opt which is mounted from a bigger
# ephemeral partition on such nodes
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
IRONIC_ANACONDA_IMAGE_REF: https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/
IRONIC_ANACONDA_KERNEL_REF: https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/images/pxeboot/vmlinuz
IRONIC_ANACONDA_RAMDISK_REF: https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/images/pxeboot/initrd.img
IRONIC_ANACONDA_INSECURE_HEARTBEAT: True
IRONIC_DEPLOY_CALLBACK_WAIT_TIMEOUT: 3600
IRONIC_PXE_BOOT_RETRY_TIMEOUT: 3600
FORCE_CONFIG_DRIVE: False
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: http
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_DEPLOY_DRIVER: redfish
# NOTE(TheJulia): We test numerous boot interfaces here, but "http"
# with "grub2" is functionally unstable. Basically high odds of failure
# with VMs in EFI request handling with VMs.
# FIXME(dtantsur): add back the pxe interface once it actually works
# and the boot interface handling in the tempest plugin is fixed.
IRONIC_ENABLED_BOOT_INTERFACES: "ipxe,redfish-virtual-media,http-ipxe"
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_POWER_INTERFACES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_RPC_TRANSPORT: json-rpc
devstack_services:
atop: True
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
s-account: False
s-container: False
s-object: False
s-proxy: False
- job:
name: ironic-tempest-bios-redfish-pxe
description: Ironic configured with legacy BIOS boot, a minimal
redfish bmc, and shards. If this job fails alone, check for regressions
around legacy bios booting or an accidental requirement of some advanced
redfish feature.
parent: ironic-tempest-uefi-redfish-vmedia
required-projects:
- opendev.org/openstack/sushy-tools
vars:
devstack_localrc:
IRONIC_ENABLED_BOOT_INTERFACES: ipxe
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
SWIFT_ENABLE_TEMPURLS: False
SWIFT_TEMPURL_KEY: ''
# Parent job has a longer timeout due to vmedia usage,
# Reset the callback to a normal-ish value.
IRONIC_CALLBACK_TIMEOUT: 600
IRONIC_BOOT_MODE: bios
# Make sure this feature works even with the minimum implementation
IRONIC_REDFISH_EMULATOR_FEATURE_SET: minimum
# Test sharding support
IRONIC_SHARDS: 1
devstack_services:
atop: True
# Parent job uses swift, this one does not, thus we can turn it off.
s-account: False
s-container: False
s-object: False
s-proxy: False
- job:
name: ironic-tempest-uefi-redfish-vmedia
description: Happy path virtual media deploy over Redfish using UEFI boot
mode. If this job fails alone, it indicates a failure either with grub
booting, an issue with swift, or an issue with virtual media support.
parent: ironic-base
vars:
# NOTE(iurygregory): switch to only wholedisk test, since the
# partition test is failing randomly.
tempest_test_regex: test_baremetal_server_ops_wholedisk_image
devstack_localrc:
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_POWER_INTERFACES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ENABLED_BOOT_INTERFACES: redfish-virtual-media
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
# Ironic has to master a new image, and this CAN take longer as a
# result and makes this job VERY sensitive to heavy disk IO of the
# underlying hypervisor/cloud.
IRONIC_CALLBACK_TIMEOUT: 800
IRONIC_GRUB2_SHIM_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/BOOTX64.EFI"
IRONIC_GRUB2_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/grubx64.efi"
IRONIC_GRUB2_CONFIG_PATH: EFI/BOOT/grub.cfg
IRONIC_REDFISH_EMULATOR_FEATURE_SET: vmedia
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
- job:
name: ironic-tempest-uefi-redfish-https
description: Identical to ironic-tempest-uefi-redfish-vmedia except
instead of virtual media, uefi http(s) boot is used. If only this
job fails, it's likely a regression in EDK2 (QEMU VM firmware) or
our UEFI http(s) boot support.
parent: ironic-base
required-projects:
- opendev.org/openstack/sushy
- opendev.org/openstack/sushy-tools
vars:
tempest_test_regex: test_baremetal_server_ops_wholedisk_image
devstack_localrc:
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_POWER_INTERFACES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ENABLED_BOOT_INTERFACES: redfish-https
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
# Ironic has to master a new image, and this CAN take longer as a
# result and makes this job VERY sensitive to heavy disk IO of the
# underlying hypervisor/cloud.
IRONIC_CALLBACK_TIMEOUT: 800
IRONIC_GRUB2_SHIM_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/BOOTX64.EFI"
IRONIC_GRUB2_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/grubx64.efi"
IRONIC_GRUB2_CONFIG_PATH: EFI/BOOT/grub.cfg
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
# NOTE(JayF) Ironic inspector is deprecated and pending removal.
# TODO(JayF) Remove this job.
- job:
name: ironic-inspector-tempest-uefi-redfish-vmedia
description: "Inspect and deploy ironic node over Redfish virtual media using UEFI"
parent: ironic-tempest-uefi-redfish-vmedia
required-projects:
- opendev.org/openstack/ironic-inspector
vars:
# NOTE(dtantsur): the inspector job includes booting an instance too.
# Excluding the abort tests since it hits "node locked" too often.
tempest_test_regex: test_baremetal_introspection
devstack_localrc:
IRONIC_INSPECTOR_MANAGED_BOOT: True
IRONIC_INSPECTOR_NODE_NOT_FOUND_HOOK: ''
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_VM_COUNT: 1
devstack_plugins:
ironic-inspector: https://opendev.org/openstack/ironic-inspector
devstack_services:
atop: True
ironic-inspector: True
ironic-inspector-dhcp: True
# NOTE(rpittau): converted job but not running for now as there
# could be an issue with the lookup in ironic-python-agent
# NOTE(JayF): ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa
# is based on this job, and is used by Nova, Glance, and Neutron as a
# basis for their CI jobs.
- job:
name: ironic-tempest-ipa-wholedisk-bios-agent_ipmitool
description: Base for
ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa, which is used
by Nova, Glance, and Neutron as a basis for their CI jobs. Not used in
any Ironic project.
parent: ironic-base
vars:
devstack_localrc:
IRONIC_DEFAULT_RESCUE_INTERFACE: agent
IRONIC_ENABLED_RESCUE_INTERFACES: "fake,agent,no-rescue"
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_SPECS_RAM: 3096
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
IRONIC_BOOT_MODE: bios
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
# TODO(JayF): Tempest CI for SNMP is on its last legs; we are holding back
# all openstack projects from updating pyasn1* packages due to our use of
# pysnmp-lextudio instead of modern pysnmp. This job should be reworked to
# no longer require SNMP and instead test the other items this job is for
# and a mail sent to the list asking for action to keep it alive.
- job:
name: ironic-tempest-ramdisk-bios-snmp-pxe
description: SNMP power, iPXE, OVN, no-op management and whole disk images.
parent: ironic-base
vars:
# NOTE(TheJulia): No reason to go much further than the network boot,
# Hence the use of the ramdisk test scenario as opposed to the others.
tempest_test_regex: test_ramdisk_iso
devstack_localrc:
IRONIC_ENABLED_HARDWARE_TYPES: snmp
IRONIC_DEPLOY_DRIVER: snmp
IRONIC_ENABLED_DEPLOY_INTERFACES: "ramdisk"
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ALLOW_UNSUPPORTED_DRIVERS: True
# NOTE(TheJulia): Explicitly set scope enforcement to False until we
# remove the legacy policies.
IRONIC_ENFORCE_SCOPE: False
IRONIC_BOOT_MODE: bios
Q_AGENT: ovn
Q_ML2_TENANT_NETWORK_TYPE: vlan
Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
ENABLE_CHASSIS_AS_GW: True
ML2_L3_PLUGIN: "ovn-router,trunk"
OVN_DBS_LOG_LEVEL: dbg
devstack_services:
atop: True
q-agt: False
q-dhcp: False
q-l3: False
ovn-controller: True
ovn-northd: True
q-ovn-metadata-agent: True
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
s-account: False
s-container: False
s-object: False
s-proxy: False
- job:
name: ironic-tempest-ovn-uefi-ipmi-pxe
description: IPMI power, UEFI, iPXE, OVN, image-based deployment. A
failure in only this and other *ovn* jobs is likely a regression in
Ironic or Neutron support for OVN.
parent: ironic-base
vars:
# NOTE(iurygregory): switch to only wholedisk test, since the
# partition test is failing randomly.
tempest_test_regex: test_baremetal_server_ops_wholedisk_image
devstack_localrc:
IRONIC_AUTOMATED_CLEAN_ENABLED: False
Q_AGENT: ovn
Q_ML2_TENANT_NETWORK_TYPE: vlan
Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
ENABLE_CHASSIS_AS_GW: True
ML2_L3_PLUGIN: "ovn-router,trunk"
OVN_DBS_LOG_LEVEL: dbg
devstack_services:
atop: True
q-agt: False
q-dhcp: False
q-l3: False
ovn-controller: True
ovn-northd: True
ovn-vswitchd: True
q-ovn-metadata-agent: True
- job:
name: ironic-tempest-bfv
description: Chainloads from iPXE into a cinder iSCSI volume. If this job
fails alone, it likely indicates a regression in boot from volume
support in Ironic, Nova virt driver, or Cinder, iPXE changes,
or some combination of them.
parent: ironic-base
vars:
tempest_test_regex: baremetal_boot_from_volume
devstack_localrc:
IRONIC_ENABLED_STORAGE_INTERFACES: cinder,noop
IRONIC_STORAGE_INTERFACE: cinder
IRONIC_ENABLED_BOOT_INTERFACES: http-ipxe,ipxe,pxe,fake
IRONIC_DEFAULT_BOOT_INTERFACE: http-ipxe
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_COUNT: 3
IRONIC_AUTOMATED_CLEAN_ENABLED: False
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
devstack_services:
atop: True
c-api: True
c-bak: True
c-sch: True
c-vol: True
cinder: True
# TODO(JayF): Ironic inspector is deprecated and scheduled for retirement
# we should remove this job soon. Apr 7 2025
- job:
name: ironic-inspector-tempest
description: ironic-inspector-tempest
parent: ironic-base
required-projects:
- opendev.org/openstack/ironic-inspector
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^driver-requirements.txt$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
# This job is also run on inspector
- ^ironic_inspector/locale/.*$
- ^ironic_inspector/test/.*$
- ^\.pre-commit-config\.yaml$
- ^redfish-interop-profiles/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^test-requirements.txt$
- ^tools/.*$
- ^tox.ini$
vars:
tempest_test_regex: InspectorBasicTest
devstack_localrc:
IRONIC_INSPECTOR_MANAGE_FIREWALL: True
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_COUNT: 1
IRONIC_AUTOMATED_CLEAN_ENABLED: False
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
devstack_plugins:
ironic-inspector: https://opendev.org/openstack/ironic-inspector
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
# TODO(JayF): Ironic inspector is deprecated and scheduled for retirement
# we should remove this job soon. Apr 7 2025
- job:
name: ironic-tempest-functional-python3
description: This runs the API-based tempest tests from
ironic-tempest-plugin. A failure here is likely a violation
of our API contract in some way or a default configuration
being changed.
parent: ironic-base
pre-run: playbooks/ci-workarounds/etc-neutron.yaml
vars:
tempest_test_regex: ironic_tempest_plugin.tests.api
devstack_localrc:
IRONIC_BAREMETAL_BASIC_OPS: False
IRONIC_DEFAULT_DEPLOY_INTERFACE: ""
IRONIC_DEFAULT_NETWORK_INTERFACE: noop
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_RPC_TRANSPORT: json-rpc
devstack_services:
atop: True
rabbit: True
g-api: False
n-api: False
n-api-meta: False
n-cond: False
n-cpu: False
n-novnc: False
n-sch: False
nova: False
placement-api: False
# NOTE(TheJulia): This job runs neutron so neutron dependent
# tests can also exercised as part of CI.
- job:
name: ironic-tempest-ipa-wholedisk-direct-multinode
description: Utilizes multiple devstack nodes to test
ML2 integration between Ironic, Neutron, and
networking-generic-switch. Most common cause of failure is
resource contention with other jobs, causing cross-node
communication failures or DHCP issues.
parent: tempest-multinode-full-base
nodeset: ironic-three-node-noble
pre-run: playbooks/ci-workarounds/pre.yaml
post-run: playbooks/ci-workarounds/get_extra_logging.yaml
required-projects:
- opendev.org/openstack/ironic
- opendev.org/openstack/ironic-python-agent
- opendev.org/openstack/ironic-python-agent-builder
- opendev.org/openstack/ironic-tempest-plugin
- opendev.org/openstack/sushy-tools
- opendev.org/openstack/networking-generic-switch
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^driver-requirements.txt$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^\.pre-commit-config\.yaml$
- ^redfish-interop-profiles/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^tools/.*$
- ^tox.ini$
roles:
- zuul: opendev.org/zuul/zuul-jobs
vars:
tox_envlist: all
tempest_concurrency: 3
tempest_test_regex: "BaremetalMultitenancy"
tempest_test_timeout: 2400
devstack_localrc:
BUILD_TIMEOUT: 2400
DEFAULT_INSTANCE_TYPE: baremetal
ENABLE_TENANT_TUNNELS: False
ENABLE_TENANT_VLANS: True
FORCE_CONFIG_DRIVE: True
GENERIC_SWITCH_KEY_FILE: /opt/stack/.ssh/id_rsa
HOST_TOPOLOGY: multinode
HOST_TOPOLOGY_ROLE: primary
INSTALL_TEMPEST: False # Don't install a tempest package globally
IRONIC_AUTOMATED_CLEAN_ENABLED: False
# NOTE(TheJulia): We *MUST* list all of the hosts in this list,
# this drives the configuration of switch references on the controller
# node. Furthermore, this job will fail if there is not a public IPv4
# address available for the SSH access to manage port configurations.
HOST_TOPOLOGY_SUBNODES: "{{ hostvars['compute0']['nodepool']['public_ipv4'] }} {{ hostvars['compute1']['nodepool']['public_ipv4'] }}"
IRONIC_BAREMETAL_BASIC_OPS: True
IRONIC_BUILD_DEPLOY_RAMDISK: False
IRONIC_CALLBACK_TIMEOUT: 600
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_BOOT_INTERFACES: "redfish-virtual-media"
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_REDFISH_EMULATOR_FEATURE_SET: vmedia
IRONIC_ENABLED_NETWORK_INTERFACES: flat,neutron
IRONIC_INSPECTOR_BUILD_RAMDISK: False
IRONIC_NETWORK_INTERFACE: neutron
IRONIC_PROVISION_NETWORK_NAME: ironic-provision
IRONIC_PROVISION_SUBNET_GATEWAY: 10.0.5.1
IRONIC_PROVISION_SUBNET_PREFIX: 10.0.5.0/24
IRONIC_TEMPEST_BUILD_TIMEOUT: 600
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_USE_LINK_LOCAL: True
IRONIC_VM_COUNT: 1
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
IRONIC_VM_SPECS_DISK: 10
OVS_BRIDGE_MAPPINGS: 'mynetwork:brbm,public:br-infra'
OVS_PHYSICAL_BRIDGE: brbm
PHYSICAL_NETWORK: mynetwork
PUBLIC_BRIDGE: br-infra
Q_AGENT: openvswitch
Q_ML2_TENANT_NETWORK_TYPE: vlan
Q_PLUGIN: ml2
Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
TENANT_VLAN_RANGE: 100:150
VIRT_DRIVER: ironic
# We're using a lot of disk space in this job. Some testing nodes have
# a small root partition, so use /opt which is mounted from a bigger
# ephemeral partition on such nodes
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
ML2_L3_PLUGIN: router,trunk
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
networking-generic-switch: https://opendev.org/openstack/networking-generic-switch
tempest_plugins:
- ironic-tempest-plugin
zuul_copy_output:
'{{ devstack_base_dir }}/ironic-bm-logs': 'logs'
'{{ devstack_base_dir }}/data/networking-generic-switch/netmiko_session.log': 'logs'
devstack_services:
atop: True
c-api: False
c-bak: False
c-sch: False
c-vol: False
cinder: False
ir-novnc: False
s-account: True
s-container: True
s-object: True
s-proxy: True
dstat: True
g-api: True
key: True
mysql: True
n-api: True
n-api-meta: True
n-cond: True
n-cpu: True
n-novnc: True
n-sch: True
placement-api: True
q-agt: True
q-dhcp: True
q-l3: True
q-meta: True
q-metering: True
q-svc: True
ovn-controller: False
ovn-northd: False
q-ovn-metadata-agent: False
rabbit: True
tls-proxy: False
group-vars:
# Turns out, devstack looks for the subnode group name.
subnode:
devstack_services:
atop: True
c-api: False
c-bak: False
c-sch: False
c-vol: False
cinder: False
q-agt: True
ovn-controller: False
ovn-northd: False
q-ovn-metadata-agent: False
n-cpu: True
tls-proxy: False
ir-novnc: False
devstack_localrc:
ENABLE_TENANT_TUNNELS: False
ENABLE_TENANT_VLANS: True
FORCE_CONFIG_DRIVE: True
HOST_TOPOLOGY: multinode
HOST_TOPOLOGY_ROLE: subnode
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_BAREMETAL_BASIC_OPS: True
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_BOOT_INTERFACES: "redfish-virtual-media"
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_REDFISH_EMULATOR_FEATURE_SET: vmedia
IRONIC_ENABLED_NETWORK_INTERFACES: flat,neutron
IRONIC_NETWORK_INTERFACE: neutron
IRONIC_PROVISION_NETWORK_NAME: ironic-provision
IRONIC_USE_LINK_LOCAL: True
IRONIC_VM_COUNT: 3
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_LOG_DIR: '{{ devstack_base_dir }}/ironic-bm-logs'
PHYSICAL_NETWORK: mynetwork
Q_AGENT: openvswitch
Q_ML2_TENANT_NETWORK_TYPE: vlan
VIRT_DRIVER: ironic
PUBLIC_BRIDGE: br-infra
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
OVS_BRIDGE_MAPPINGS: 'mynetwork:brbm,public:br-infra'
OVS_PHYSICAL_BRIDGE: brbm
- job:
# NOTE(TheJulia): Compatibility job definition, can be removed.
name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode
description: ironic-tempest-ipa-wholedisk-direct-multinode
parent: ironic-tempest-ipa-wholedisk-direct-multinode
- job:
# NOTE(TheJulia): Compatibility job definition, can be removed.
name: ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode-shard
description: ironic-tempest-ipa-wholedisk-direct-multinode-shard
parent: ironic-tempest-ipa-wholedisk-direct-multinode-shard
# TODO(JayF): This job should be consolidaated into the
# ironic-tempest-ipa-wholedisk-direct-tinyipa-multinode -- there is no
# value in running a separate unsharded multinode test.
- job:
# NOTE(JayF) This job sets up two nova-computes with two different shards
# TODO(JayF) Add a post-run validation to ensure the two n-cpus did not
# see each others' nodes
name: ironic-tempest-ipa-wholedisk-direct-multinode-shard
description: ironic-tempest-ipa-wholedisk-direct-multinode-shard
with automated cleaning enabled.
parent: ironic-tempest-ipa-wholedisk-direct-multinode
nodeset: ironic-three-node-noble
vars:
tempest_test_regex: "BaremetalBasicOps"
devstack_localrc:
IRONIC_SHARDS: 1
IRONIC_SHARD_1_NAME: "main-node"
IRONIC_AUTOMATED_CLEAN_ENABLED: True
# Let the local services ignore the controller node,
# but focus on managing the nodes on the subnode, since
# we have greater resources on the other nodes.
IRONIC_NODE_SHARD_NAME: "subnode"
group-vars:
subnode:
devstack_localrc:
IRONIC_SHARDS: 1
IRONIC_SHARD_1_NAME: "subnode"
IRONIC_NODE_SHARD_NAME: "main-node"
- job:
name: ironic-tox-unit-with-driver-libs
parent: openstack-tox
description: |
Run python 3 unit tests with driver dependencies installed.
vars:
tox_envlist: unit-with-driver-libs
# TODO(JayF): We likely no longer need to segregate these.
- job:
name: ironic-tox-unit-mysql-migrations
parent: openstack-tox
description: |
Run MySQL based data model migrations. These are excluded from
typical unit test runs.
vars:
tox_envlist: mysql-migrations
# TODO(JayF): Ironic inspector is deprecated and scheduled for retirement
# we should restructure and rename this job to ensure it keeps working.
# This is the only job that tests fast track. Apr 7 2025
- job:
name: ironic-inspector-tempest-discovery-fast-track
description: ironic-inspector-tempest-discovery-fast-track
parent: ironic-inspector-tempest-discovery
vars:
tempest_test_regex: BareMetalFastTrackTest
devstack_localrc:
IRONIC_INSPECTOR_POWER_OFF: False
IRONIC_DEPLOY_FAST_TRACK: True
IRONIC_DEPLOY_FAST_TRACK_CLEANING: True
- job:
name: ironic-tempest-ipa-partition-uefi-pxe-grub2
description: Ironic tempest scenario test utilizing PXE (NOT iPXE),
UEFI, and grub2. If this job fails alone, it indicates grub2 network
booting or UEFI-based network booting is failed.
parent: ironic-base
vars:
devstack_localrc:
IRONIC_ENABLED_HARDWARE_TYPES: ipmi
IRONIC_ENABLED_BOOT_INTERFACES: pxe
IRONIC_IPXE_ENABLED: False
IRONIC_AUTOMATED_CLEAN_ENABLED: False
# NOTE(JayF): This is when pairing stopped
# TODO(JayF): Remove ^^^^ once reviewed by Julia
- job:
name: ironic-tempest-ipa-wholedisk-bios-ipmi-direct-dib
description: Tests whole disk booting with swift and an image
built using ironic-python-agent-builder with diskimage-builder.
If this job fails alone, ensure the DIB image our CI is using from
tarballs.openstack.org is valid and that there was enough resources
to run it in the test VM.
parent: ironic-base
vars:
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
devstack_localrc:
IRONIC_DIB_RAMDISK_OS: centos9
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_INTERFACE_COUNT: 1
IRONIC_AUTOMATED_CLEAN_ENABLED: False
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
IRONIC_BOOT_MODE: bios
# NOTE(TheJulia): This job does not work on Ubuntu Noble, much less
# newer EDK2 images when in UEFI mode. As such is being disabled.
# Reasons: EDK2 has a ton of ipv6 bugs. IPv6 support not in qemu/ipxe
# bios roms *either*. Concurrently, this means we can't test realistic
# deployment and booting, nor can we test a short circuited ipxe workflow
# upstream. In case this situation changes, keeping the job configuration
# below.
- job:
name: ironic-tempest-ipxe-ipv6
description: Test ironic workflows with IPv6 enabled tests. If this job
fails alone, ensure Ironic, Neutron, or networking-generic-switch has
not introduced changes to regress IPv6 support. Also beware of bugs in
EDK2 (VM firmware) images causing false failures in this job.
parent: ironic-base
required-projects:
- opendev.org/openstack/networking-generic-switch
vars:
tempest_test_timeout: 2400
devstack_services:
atop: True
# NOTE(TheJulia): It seems our devstack plugin does not play well
# with multitenancy and the newer neutron service names.
q-agt: True
q-dhcp: True
q-l3: True
q-meta: False
q-metering: False
q-svc: True
swift: True
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
networking-generic-switch: https://opendev.org/openstack/networking-generic-switch
# NOTE(TheJulia): Nova default behavior is to rely upon stack defaults, v6 needs to
# be explicit. This is the best place to wire it in.
tempest_test_regex: BaremetalSingleTenant
devstack_localrc:
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: http
IPV6_ENABLED: True
IRONIC_IP_VERSION: 6
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ENABLED_BOOT_INTERFACES: ipxe,pxe
IRONIC_DEFAULT_BOOT_INTERFACE: ipxe
IRONIC_IPXE_ENABLED: True
IRONIC_PROVISION_NETWORK_NAME: ironic-provision
OVS_PHYSICAL_BRIDGE: brbm
PHYSICAL_NETWORK: mynetwork
TENANT_VLAN_RANGE: 100:150
IRONIC_ENABLED_NETWORK_INTERFACES: flat,neutron
IRONIC_NETWORK_INTERFACE: neutron
IRONIC_DEFAULT_RESCUE_INTERFACE: no-rescue
IRONIC_USE_LINK_LOCAL: True
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_INTERFACE_COUNT: 1
IRONIC_VM_SPECS_CPU: 2
Q_PLUGIN: ml2
ENABLE_TENANT_VLANS: True
Q_ML2_TENANT_NETWORK_TYPE: vlan
OVS_BRIDGE_MAPPINGS: "public:br-ex,mynetwork:brbm"
USE_PROVIDER_NETWORKING: True
PUBLIC_PHYSICAL_NETWORK: public
PUBLIC_PROVIDERNET_TYPE: flat
Q_USE_PROVIDERNET_FOR_PUBLIC: True
BUILD_TIMEOUT: 2000
IRONIC_TEMPEST_BUILD_TIMEOUT: 2000
IRONIC_PING_TIMEOUT: 1440
IRONIC_BOOT_MODE: bios
- job:
name: ironic-tempest-ovn-uefi-ipxe-ipv6
description: Test ironic with OVN and IPv6. If this job fails alone,
it may indicate a regression in IPv6 support generally with Ironic,
Neutron, OVN, networking-generic-switch, or the EDK2 firmware running
on qemu test vms.
parent: ironic-base
required-projects:
- opendev.org/openstack/networking-generic-switch
vars:
tempest_test_timeout: 2400
devstack_services:
atop: True
q-agt: false
q-dhcp: false
q-l3: false
ovn-controller: true
ovn-northd: true
ovsdb-server: true
q-ovn-metadata-agent: true
q-metering: false
swift: true
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
networking-generic-switch: https://opendev.org/openstack/networking-generic-switch
tempest_test_regex: BaremetalSingleTenant
devstack_localrc:
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: http
IRONIC_RAMDISK_TYPE: dib
IRONIC_DIB_RAMDISK_OS: centos9
IPV6_ENABLED: True
IRONIC_IP_VERSION: 6
IRONIC_IPV6_ADDRESS_MODE: dhcpv6-stateful
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ENABLED_BOOT_INTERFACES: ipxe,pxe
IRONIC_DEFAULT_BOOT_INTERFACE: ipxe
IRONIC_IPXE_ENABLED: True
IRONIC_PROVISION_NETWORK_NAME: ironic-provision
OVS_PHYSICAL_BRIDGE: brbm
PHYSICAL_NETWORK: mynetwork
OVN_BRIDGE_MAPPINGS: "public:br-ex,mynetwork:brbm"
TENANT_VLAN_RANGE: 100:150
IRONIC_ENABLED_NETWORK_INTERFACES: flat,neutron
IRONIC_NETWORK_INTERFACE: neutron
IRONIC_DEFAULT_RESCUE_INTERFACE: no-rescue
IRONIC_USE_LINK_LOCAL: True
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_INTERFACE_COUNT: 1
IRONIC_VM_SPECS_CPU: 2
Q_AGENT: ovn
ENABLE_CHASSIS_AS_GW: true
Q_ML2_PLUGIN_MECHANISM_DRIVERS: ovn
ML2_L3_PLUGIN: ovn-router,trunk
ENABLE_TENANT_VLANS: True
Q_ML2_TENANT_NETWORK_TYPE: vlan
PUBLIC_PHYSICAL_NETWORK: public
PUBLIC_PROVIDERNET_TYPE: flat
BUILD_TIMEOUT: 2000
IRONIC_TEMPEST_BUILD_TIMEOUT: 2000
IRONIC_PING_TIMEOUT: 1440
- job:
name: ironic-tempest-standalone-advanced
description: ironic-tempest-standalone-advanced test cases
parent: ironic-base
required-projects:
- opendev.org/openstack/diskimage-builder
- opendev.org/openstack/networking-generic-switch
- opendev.org/openstack/ironic-python-agent-builder
vars:
tempest_test_timeout: 2800
devstack_services:
# NOTE(TheJulia): We could likely change this over to OVN,
# but it really doesn't matter. We're using vmedia here.
q-agt: True
q-dhcp: True
q-l3: True
q-meta: False
q-metering: False
q-svc: True
swift: True
s-account: True
s-container: True
s-object: True
s-proxy: True
n-api: False
n-api-meta: False
n-cauth: False
n-cond: False
n-cpu: False
n-novnc: False
n-obj: False
n-sch: False
nova: False
placement-api: False
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
networking-generic-switch: https://opendev.org/openstack/networking-generic-switch
# NOTE(TheJulia): Nova default behavior is to rely upon stack defaults, v6 needs to
# be explicit. This is the best place to wire it in.
tempest_test_regex: ironic_standalone.test_advanced_ops
devstack_localrc:
IRONIC_RAMDISK_TYPE: dib
# known working path
# The options below are known working, and leverage simple-init element
# (glean) to perform initial configuration. Ironic's dib element
# removes cloud-init, and upon re-install it just doesn't work for
# unknown reasons.
IRONIC_DIB_RAMDISK_OPTIONS: centos simple-init
IRONIC_DIB_OPTIONS: centos simple-init
IRONIC_BUILD_DEPLOY_RAMDISK: True
IRONIC_BUILD_WHOLEDISK: True
IRONIC_DIB_RAMDISK_OS: centos9
IRONIC_DIB_OS: centos9
IRONIC_DIB_RAMDISK_RELEASE: 9-stream
IRONIC_DIB_RELEASE: 9-stream
IRONIC_DEPLOY_DRIVER: redfish
IRONIC_ENABLED_HARDWARE_TYPES: redfish
IRONIC_ENABLED_POWER_INTERFACES: redfish
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_ENABLED_BOOT_INTERFACES: redfish-virtual-media
SWIFT_ENABLE_TEMPURLS: False
IRONIC_CALLBACK_TIMEOUT: 800
IRONIC_GRUB2_SHIM_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/BOOTX64.EFI"
IRONIC_GRUB2_FILE: "https://{{ zuul_site_mirror_fqdn }}/centos-stream/9-stream/BaseOS/x86_64/os/EFI/BOOT/grubx64.efi"
IRONIC_GRUB2_CONFIG_PATH: EFI/BOOT/grub.cfg
IRONIC_PROVISION_NETWORK_NAME: ironic-provision
# Cache the image locally so we convert it to raw,
# allowing it to be streamed. Otherwise the ramdisk
# will run out of RAM.
IRONIC_AGENT_IMAGE_DOWNLOAD_SOURCE: local
OVS_PHYSICAL_BRIDGE: brbm
PHYSICAL_NETWORK: mynetwork
TENANT_VLAN_RANGE: 100:150
IRONIC_ENABLED_NETWORK_INTERFACES: neutron
IRONIC_NETWORK_INTERFACE: neutron
IRONIC_DEFAULT_RESCUE_INTERFACE: no-rescue
IRONIC_USE_LINK_LOCAL: True
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_INTERFACE_COUNT: 1
# This will swap and needs to get to tinycore soon.
IRONIC_VM_SPECS_CPU: 2
IRONIC_VM_SPECS_DISK: 8
Q_PLUGIN: ml2
ENABLE_TENANT_VLANS: True
Q_ML2_TENANT_NETWORK_TYPE: vlan
OVS_BRIDGE_MAPPINGS: "public:br-ex,mynetwork:brbm"
USE_PROVIDER_NETWORKING: True
PUBLIC_PHYSICAL_NETWORK: public
PUBLIC_PROVIDERNET_TYPE: flat
Q_USE_PROVIDERNET_FOR_PUBLIC: True
BUILD_TIMEOUT: 2000
IRONIC_TEMPEST_BUILD_TIMEOUT: 2000
IRONIC_PING_TIMEOUT: 1440
# NOTE(rpittau): OLD TINYIPA JOBS
# Those jobs are used by other projects, we leave them here until
# we can convert them to dib.
# Used by devstack/ironic/nova/neutron
- job:
name: ironic-tempest-bios-ipmi-direct
description: ironic-tempest-wholedisk-bios-ipmi-direct that also tests cleaning.
parent: ironic-base
vars:
tempest_test_regex: test_baremetal_server_ops_wholedisk_image
devstack_localrc:
IRONIC_DEFAULT_RESCUE_INTERFACE: agent
IRONIC_ENABLED_RESCUE_INTERFACES: "fake,agent,no-rescue"
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_EPHEMERAL_DISK: 0
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
IRONIC_BOOT_MODE: bios
IRONIC_VM_COUNT: 1
devstack_services:
atop: True
s-account: True
s-container: True
s-object: True
s-proxy: True
# FIXME(TheJulia): We need to fix this name.....
- job:
name: ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa
description: Alias for ironic-tempest-wholedisk-bios-ipmi-direct-tinyipa
parent: ironic-tempest-bios-ipmi-direct
- job:
name: ironic-tempest-uefi-redfish-vmedia-4k
description: "Build 4k disk artifacts with 4k VMs"
parent: ironic-tempest-uefi-redfish-vmedia
vars:
tempest_test_timeout: 2800
devstack_localrc:
# NOTE(TheJulia): This job takes a while because it is blending
# vmedia *and* 4k block device layouts which requires mastering and
# streaming a real image as opposed to cirros.
BUILD_TIMEOUT: 2400
IRONIC_AUTOMATED_CLEAN_ENABLED: False
IRONIC_VM_COUNT: 1
IRONIC_VM_SPECS_DISK: 20
IRONIC_VM_BLOCK_SIZE: 4096
IRONIC_BUILD_DIB_IMAGE: True
SWIFT_ENABLE_TEMPURLS: False
# This job by defaults deploys a dib cirros image,
# and to do so, the instance user is not cirros.
DEFAULT_INSTANCE_USER: "cloud-user"
IRONIC_DEFAULT_RESCUE_INTERFACE: "no-rescue"
IRONIC_ENABLED_RESCUE_INTERFACES: "fake,no-rescue"
- job:
name: ironic-grenade
description: This job deploys the previous release of Ironic with devstack,
then runs scripts to upgrade it to the master release. If this job fails
alone, it indicates we may have broken upgrading Ironic. This job is also
more likely to be the victim of resource contention as it is one of the
longest running jobs.
parent: grenade
timeout: 10800
irrelevant-files:
- ^driver-requirements.txt$
- ^.*\.rst$
- ^api-ref/.*$
- ^doc/.*$
- ^install-guide/.*$
- ^ironic/locale/.*$
- ^ironic/tests/.*$
- ^\.pre-commit-config\.yaml$
- ^redfish-interop-profiles/.*$
- ^releasenotes/.*$
- ^setup.cfg$
- ^tools/.*$
- ^tox.ini$
required-projects:
- opendev.org/openstack/grenade
- opendev.org/openstack/ironic
- opendev.org/openstack/ironic-python-agent
- opendev.org/openstack/ironic-python-agent-builder
- opendev.org/openstack/ironic-tempest-plugin
- opendev.org/openstack/virtualbmc
vars:
grenade_devstack_localrc:
shared:
#NOTE: when in UEFI mode, TFTP packets don't get tracked nor
#pass between original and upgrade networks. Switch to BIOS
#until we can fix this properly.
IRONIC_BOOT_MODE: bios
DEFAULT_INSTANCE_TYPE: baremetal
FORCE_CONFIG_DRIVE: True
INSTALL_TEMPEST: False
VIRT_DRIVER: ironic
BUILD_TIMEOUT: 1200
IRONIC_TEMPEST_BUILD_TIMEOUT: 1200
IRONIC_BAREMETAL_BASIC_OPS: True
IRONIC_BUILD_DEPLOY_RAMDISK: False
IRONIC_CALLBACK_TIMEOUT: 600
IRONIC_DEPLOY_DRIVER: ipmi
IRONIC_INSPECTOR_BUILD_RAMDISK: False
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
IRONIC_VM_COUNT: 2
IRONIC_VM_EPHEMERAL_DISK: 0
IRONIC_VM_SPECS_RAM: 2600
IRONIC_AUTOMATED_CLEAN_ENABLED: False
Q_AGENT: openvswitch
Q_ML2_TENANT_NETWORK_TYPE: vxlan
Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
SWIFT_ENABLE_TEMPURLS: True
SWIFT_TEMPURL_KEY: secretkey
EBTABLES_RACE_FIX: True
LIBVIRT_STORAGE_POOL_PATH: /opt/libvirt/images
INSTANCE_WAIT: 120
MYSQL_GATHER_PERFORMANCE: False
CIRROS_VERSION: 0.6.1
# Required as different access rights are used by default
# and the classic devstack config which is defaulted doesn't work.
NEUTRON_ENDPOINT_SERVICE_NAME: networking
# This option is being removed in 2025.2 devstack,
# but is applicable for 2025.1.
NEUTRON_DEPLOY_MOD_WSGI: True
old:
IRONIC_VM_LOG_DIR: '{{ devstack_bases.old }}/ironic-bm-logs'
grenade_localrc:
BASE_RUN_SMOKE: False
grenade_tempest_concurrency: 1
grenade_test_timeout: 2600
devstack_plugins:
ironic: https://opendev.org/openstack/ironic
devstack_services:
c-api: False
c-bak: False
c-sch: False
c-vol: False
cinder: False
ir-api: True
ir-cond: True
# Neutron services
# In the Ironic grenade job we want to explicitly enable ML2/OVS agents
# and disable OVN
q-agt: true
q-dhcp: true
q-l3: true
q-meta: true
q-svc: true
q-metering: true
ovn-controller: false
ovn-northd: false
q-ovn-metadata-agent: false
tempest_plugins:
- ironic-tempest-plugin
tempest_test_regex: ironic_tempest_plugin.tests.scenario
tox_envlist: all
tempest_concurrency: 1
zuul_copy_output:
'{{ devstack_bases.old }}/ironic-bm-logs': logs
- job:
name: ironic-cross-sushy
nodeset: ubuntu-noble
description: Ironic unit tests run with Sushy from source
parent: openstack-tox
required-projects:
- opendev.org/openstack/ironic
- opendev.org/openstack/sushy
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
- ^devstack/.*$
- ^doc/.*$
- ^\.pre-commit-config\.yaml$
- ^releasenotes/.*$
- ^tools/.*$
vars:
# NOTE(dtantsur): change this every release cycle if needed.
bindep_profile: test py312
tox_envlist: py312
# This variable ensures that sushy is installed from source.
tox_install_siblings: true
# NOTE(dtantsur): this job will be run on sushy as well, so it's
# important to set the working dir to the Ironic checkout.
zuul_work_dir: "{{ ansible_user_dir }}/{{ zuul.projects['opendev.org/openstack/ironic'].src_dir }}"
- job:
name: ironic-grenade-skip-level
description:
This job deploys the previous SLURP release of Ironic with devstack,
then runs scripts to upgrade it to the master release. If this job fails
alone, it indicates we may have broken upgrading Ironic across SLURP
releases. This job is also more likely to be the victim of resource
contention as it is one of the longest running jobs.
parent: ironic-grenade
vars:
grenade_from_branch: stable/2025.1
grenade_to_branch: master
grenade_localrc:
# NOTE(iurygregory): This is required for skip upgrades.
NOVA_ENABLE_UPGRADE_WORKAROUND: True