--- # 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