all:
  children:
    tempest:
      hosts:
        controller: null
    zuul_unreachable:
      hosts: {}
  hosts:
    controller:
      ansible_connection: ssh
      ansible_host: 199.204.45.169
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      configure_swap_size: 8192
      devstack_local_conf:
        post-config:
          $NEUTRON_CONF:
            DEFAULT:
              global_physnet_mtu: '{{ external_bridge_mtu }}'
          /etc/magnum/magnum.conf:
            cluster_template:
              kubernetes_allowed_network_drivers: calico,cilium
              kubernetes_default_network_driver: calico
            nova_client:
              api_version: 2.15
          /etc/manila/manila.conf:
            generic:
              connect_share_server_to_tenant_network: true
              driver_handles_share_servers: true
      devstack_localrc:
        ADMIN_PASSWORD: secretadmin
        DATABASE_PASSWORD: secretdatabase
        DEBUG_LIBVIRT_COREDUMPS: true
        DISABLE_AMP_IMAGE_BUILD: true
        ENABLE_SYSCTL_MEM_TUNING: true
        ENABLE_SYSCTL_NET_TUNING: true
        ENABLE_ZSWAP: true
        ERROR_ON_CLONE: true
        FIXED_RANGE: 10.1.0.0/20
        FLOATING_RANGE: 172.24.5.0/24
        GIT_BASE: https://github.com
        HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
        IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
        LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
        LOGFILE: /opt/stack/logs/devstacklog.txt
        LOG_COLOR: false
        MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
        MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
        MANILA_ENABLED_BACKENDS: generic
        MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
        NETWORK_GATEWAY: 10.1.0.1
        NOVA_LIBVIRT_TB_CACHE_SIZE: 128
        NOVA_VNC_ENABLED: true
        OCTAVIA_NODE: api
        OVN_DBS_LOG_LEVEL: dbg
        PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
        PUBLIC_NETWORK_GATEWAY: 172.24.5.1
        RABBIT_PASSWORD: secretrabbit
        SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4'']
          }}'
        SERVICE_PASSWORD: secretservice
        SWIFT_HASH: 1234123412341234
        SWIFT_REPLICAS: 1
        SWIFT_START_ALL_SERVICES: false
        VERBOSE: true
        VERBOSE_NO_TIMESTAMP: true
      devstack_plugins:
        barbican: https://github.com/openstack/barbican
        magnum: https://review.opendev.org/openstack/magnum
        magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
        manila: https://github.com/openstack/manila
        octavia: https://github.com/openstack/octavia
        ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
      devstack_services:
        base: false
        c-api: true
        c-bak: true
        c-sch: true
        c-vol: true
        dstat: false
        etcd3: true
        file_tracker: true
        g-api: true
        horizon: false
        key: true
        memory_tracker: true
        mysql: true
        n-api: true
        n-api-meta: true
        n-cond: true
        n-cpu: true
        n-novnc: true
        n-sch: true
        o-api: true
        o-da: true
        o-hk: true
        octavia: true
        openstack-cli-server: true
        ovn-controller: true
        ovn-northd: true
        ovs-vswitchd: true
        ovsdb-server: true
        placement-api: true
        q-ovn-agent: true
        q-svc: true
        rabbit: true
        s-account: false
        s-container: false
        s-object: false
        s-proxy: false
        tempest: false
        tls-proxy: true
      extensions_to_txt:
        auto: true
        conf: true
        localrc: true
        log: true
        stackenv: true
      image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
        kube_tag }}.qcow2
      kube_tag: v1.35.4
      network_driver: cilium
      nodepool:
        az: nova
        cloud: public
        external_id: 514c7b17-55fc-4ecd-ba0a-d7c8734a396e
        host_id: d953b2b79ff732b94d97ea6274a0c4d1174b1c52cbf038923e842d1b
        interface_ip: 199.204.45.169
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.204.45.169
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.169
        public_ipv6: 2604:e100:1:0:f816:3eff:fe9c:119
        region: ca-ymq-1
        slot: null
      zuul_copy_output:
        /etc/ceph: logs
        /etc/glusterfs/glusterd.vol: logs
        /etc/libvirt: logs
        /etc/lvm: logs
        /etc/resolv.conf: logs
        /etc/sudoers: logs
        /etc/sudoers.d: logs
        /var/log/ceph: logs
        /var/log/glusterfs: logs
        /var/log/libvirt: logs
        /var/log/mysql: logs
        /var/log/openvswitch: logs
        /var/log/postgresql: logs
        /var/log/rabbitmq: logs
        /var/log/unbound.log: logs
        '{{ devstack_conf_dir }}/.localrc.auto': logs
        '{{ devstack_conf_dir }}/.stackenv': logs
        '{{ devstack_conf_dir }}/local.conf': logs
        '{{ devstack_conf_dir }}/localrc': logs
        '{{ devstack_full_log}}': logs
        '{{ devstack_log_dir }}/atop': logs
        '{{ devstack_log_dir }}/devstacklog.txt': logs
        '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
        '{{ devstack_log_dir }}/dstat-csv.log': logs
        '{{ devstack_log_dir }}/qemu.coredump': logs
        '{{ devstack_log_dir }}/tcpdump.pcap': logs
        '{{ devstack_log_dir }}/worlddump-latest.txt': logs
        '{{ stage_dir }}/apache': logs
        '{{ stage_dir }}/apache_config': logs
        '{{ stage_dir }}/audit.log': logs
        '{{ stage_dir }}/core': logs
        '{{ stage_dir }}/deprecations.log': logs
        '{{ stage_dir }}/df.txt': logs
        '{{ stage_dir }}/dpkg-l.txt': logs
        '{{ stage_dir }}/etc': logs
        '{{ stage_dir }}/iptables.txt': logs
        '{{ stage_dir }}/listen53.txt': logs
        '{{ stage_dir }}/mount.txt': logs
        '{{ stage_dir }}/performance.json': logs
        '{{ stage_dir }}/pip2-freeze.txt': logs
        '{{ stage_dir }}/pip3-freeze.txt': logs
        '{{ stage_dir }}/rpm-qa.txt': logs
        '{{ stage_dir }}/services.txt': logs
        '{{ stage_dir }}/verify_tempest_conf.log': logs
      zuul_node:
        az: nova
        cloud: public
        external_id: 514c7b17-55fc-4ecd-ba0a-d7c8734a396e
        host_id: d953b2b79ff732b94d97ea6274a0c4d1174b1c52cbf038923e842d1b
        interface_ip: 199.204.45.169
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.204.45.169
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.169
        public_ipv6: 2604:e100:1:0:f816:3eff:fe9c:119
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    configure_swap_size: 8192
    devstack_local_conf:
      post-config:
        $NEUTRON_CONF:
          DEFAULT:
            global_physnet_mtu: '{{ external_bridge_mtu }}'
        /etc/magnum/magnum.conf:
          cluster_template:
            kubernetes_allowed_network_drivers: calico,cilium
            kubernetes_default_network_driver: calico
          nova_client:
            api_version: 2.15
        /etc/manila/manila.conf:
          generic:
            connect_share_server_to_tenant_network: true
            driver_handles_share_servers: true
    devstack_localrc:
      ADMIN_PASSWORD: secretadmin
      DATABASE_PASSWORD: secretdatabase
      DEBUG_LIBVIRT_COREDUMPS: true
      DISABLE_AMP_IMAGE_BUILD: true
      ENABLE_SYSCTL_MEM_TUNING: true
      ENABLE_SYSCTL_NET_TUNING: true
      ENABLE_ZSWAP: true
      ERROR_ON_CLONE: true
      FIXED_RANGE: 10.1.0.0/20
      FLOATING_RANGE: 172.24.5.0/24
      GIT_BASE: https://github.com
      HOST_IP: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      IPV4_ADDRS_SAFE_TO_USE: 10.1.0.0/20
      LIBVIRT_TYPE: '{{ devstack_libvirt_type | default("qemu") }}'
      LOGFILE: /opt/stack/logs/devstacklog.txt
      LOG_COLOR: false
      MAGNUM_GUEST_IMAGE_URL: '{{ image_url }}'
      MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS: snapshot_support=True create_share_from_snapshot_support=True
      MANILA_ENABLED_BACKENDS: generic
      MANILA_USE_SERVICE_INSTANCE_PASSWORD: true
      NETWORK_GATEWAY: 10.1.0.1
      NOVA_LIBVIRT_TB_CACHE_SIZE: 128
      NOVA_VNC_ENABLED: true
      OCTAVIA_NODE: api
      OVN_DBS_LOG_LEVEL: dbg
      PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
      PUBLIC_NETWORK_GATEWAY: 172.24.5.1
      RABBIT_PASSWORD: secretrabbit
      SERVICE_HOST: '{{ hostvars[''controller''][''nodepool''][''private_ipv4''] }}'
      SERVICE_PASSWORD: secretservice
      SWIFT_HASH: 1234123412341234
      SWIFT_REPLICAS: 1
      SWIFT_START_ALL_SERVICES: false
      VERBOSE: true
      VERBOSE_NO_TIMESTAMP: true
    devstack_plugins:
      barbican: https://github.com/openstack/barbican
      magnum: https://review.opendev.org/openstack/magnum
      magnum-cluster-api: https://github.com/vexxhost/magnum-cluster-api
      manila: https://github.com/openstack/manila
      octavia: https://github.com/openstack/octavia
      ovn-octavia-provider: https://github.com/openstack/ovn-octavia-provider
    devstack_services:
      base: false
      c-api: true
      c-bak: true
      c-sch: true
      c-vol: true
      dstat: false
      etcd3: true
      file_tracker: true
      g-api: true
      horizon: false
      key: true
      memory_tracker: true
      mysql: true
      n-api: true
      n-api-meta: true
      n-cond: true
      n-cpu: true
      n-novnc: true
      n-sch: true
      o-api: true
      o-da: true
      o-hk: true
      octavia: true
      openstack-cli-server: true
      ovn-controller: true
      ovn-northd: true
      ovs-vswitchd: true
      ovsdb-server: true
      placement-api: true
      q-ovn-agent: true
      q-svc: true
      rabbit: true
      s-account: false
      s-container: false
      s-object: false
      s-proxy: false
      tempest: false
      tls-proxy: true
    extensions_to_txt:
      auto: true
      conf: true
      localrc: true
      log: true
      stackenv: true
    image_url: https://github.com/vexxhost/capo-image-elements/releases/latest/download/ubuntu-22.04-{{
      kube_tag }}.qcow2
    kube_tag: v1.35.4
    network_driver: cilium
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/zuul-config/zuul.d/jobs.yaml@main#1>'
      - '<Job openstack-multinode-fips explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/zuul-config/zuul.d/jobs.yaml@main#17>'
      - '<Job devstack-base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#368>'
      - '<Job devstack-minimal explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#502>'
      - '<Job devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#545>'
      - '<Job magnum-cluster-api-devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#1>'
      - '<Job magnum-cluster-api-hydrophone explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#60>'
      - '<Job magnum-cluster-api-hydrophone-v1.35.4 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#108>'
      - '<Job magnum-cluster-api-hydrophone-v1.35.4-cilium explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#120>'
      - '<Job magnum-cluster-api-hydrophone-v1.35.4-cilium explicit: None implied:
        None source: vexxhost/magnum-cluster-api/zuul.d/project.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 59a47db10e8f4cb997635d1942e6e6e4
      build_refs:
      - branch: main
        change: '1003'
        change_message: "ci: smoke-test driver import and entry-point loading\n\n##
          Summary\n\nThe existing `coinstall` job verifies that `magnum-cluster-api`
          *installs* cleanly against each OpenStack upper-constraints set, but it
          never imports the package or exercises Magnum's driver entry-point loader.
          Failures that occur at import time are therefore invisible to CI.\n\n##
          Why this matters\n\nA real production regression slipped through unnoticed
          because of this blind spot:\n\n`oslo.cache 3.10.2` (uploaded to PyPI on
          2025-07-25, pinned by the `stable/2025.1` upper-constraints) ships under
          a [PEP 625](https://peps.python.org/pep-0625/) normalized wheel filename
          \u2014 `oslo_cache-3.10.2-py3-none-any.whl` instead of `oslo.cache-*`. [PEP
          427](https://peps.python.org/pep-0427/) then mandates the on-disk dist-info
          directory match the wheel filename, so the install layout becomes `oslo_cache-3.10.2.dist-info/`.\n\n`magnum_cluster_api/resources.py`
          (pre-#1001) calls `pkg_resources.require(\"magnum_cluster_api\")` at module
          import time. Legacy `pkg_resources` does not apply [PEP 503](https://peps.python.org/pep-0503/)
          name normalization across `.`/`_`/`-` when matching distributions, so `keystonemiddleware`'s
          `oslo.cache>=...` Requires-Dist entry fails to resolve against `oslo_cache-*.dist-info/`
          and `pkg_resources` raises `DistributionNotFound`.\n\nThe driver entry-point
          then fails to load and Magnum responds to every cluster operation with the
          misleading:\n\n```\nCluster type (vm, ubuntu, kubernetes) not supported\n```\n\nThe
          constraint files used by the existing matrix already include the broken
          `oslo.cache` versions:\n\n| OpenStack branch | `oslo.cache` constraint |\n|---|---|\n|
          `2024.1` | `===3.7.0` (dotted) |\n| `2024.2` | `===3.8.0` (dotted) |\n|
          **`2025.1`** | **`===3.10.2` (PEP 625 underscore)** |\n| `master` | `===4.1.1`
          (PEP 625 underscore) |\n\n\u2026so the bug is sitting on disk during CI
          for the 2025.1 + master cells, but no CI step imports anything to trigger
          it.\n\n## Change\n\nAdd an explicit smoke step to the `coinstall` job that:\n\n1.
          Installs `magnum` and `keystonemiddleware` so the driver entry-point loader
          and its real consumer dependency tree are present.\n2. Imports `magnum_cluster_api.driver`
          \u2014 must not raise.\n3. Loads Magnum's driver entry points via `magnum.drivers.common.driver.Driver.load_entry_points()`
          and asserts at least one `cluster_api` driver is registered.\n4. Asserts
          that `pkg_resources` was *not* pulled into `sys.modules`. This is the regression
          guard: if anything reintroduces the legacy resolver (the same class of bug
          fixed by #1001), every PEP 625-named wheel in the matrix will trip it.\n\nRuns
          across the full `(openstack-version \xD7 python-version)` matrix so the
          same protection applies to every supported OpenStack branch \u2014 including
          `master`, where future PEP 625 transitions of other dependencies will land
          first.\n\n## Relationship to #1001\n\nThis PR is intentionally orthogonal
          to #1001:\n- **#1001** fixes the actual bug by removing all `pkg_resources`
          usage from `magnum_cluster_api`.\n- **This PR** ensures the bug \u2014 and
          any equivalent future regression \u2014 fails CI loudly instead of shipping
          silently to production.\n\nDrafted to allow review of the test approach
          before unblocking. Happy to widen / narrow the assertions as needed."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1003
        commit_id: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        patchset: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      buildset: 542c455d25ae4772ab33aaef0594b1fc
      buildset_refs:
      - branch: main
        change: '1003'
        change_message: "ci: smoke-test driver import and entry-point loading\n\n##
          Summary\n\nThe existing `coinstall` job verifies that `magnum-cluster-api`
          *installs* cleanly against each OpenStack upper-constraints set, but it
          never imports the package or exercises Magnum's driver entry-point loader.
          Failures that occur at import time are therefore invisible to CI.\n\n##
          Why this matters\n\nA real production regression slipped through unnoticed
          because of this blind spot:\n\n`oslo.cache 3.10.2` (uploaded to PyPI on
          2025-07-25, pinned by the `stable/2025.1` upper-constraints) ships under
          a [PEP 625](https://peps.python.org/pep-0625/) normalized wheel filename
          \u2014 `oslo_cache-3.10.2-py3-none-any.whl` instead of `oslo.cache-*`. [PEP
          427](https://peps.python.org/pep-0427/) then mandates the on-disk dist-info
          directory match the wheel filename, so the install layout becomes `oslo_cache-3.10.2.dist-info/`.\n\n`magnum_cluster_api/resources.py`
          (pre-#1001) calls `pkg_resources.require(\"magnum_cluster_api\")` at module
          import time. Legacy `pkg_resources` does not apply [PEP 503](https://peps.python.org/pep-0503/)
          name normalization across `.`/`_`/`-` when matching distributions, so `keystonemiddleware`'s
          `oslo.cache>=...` Requires-Dist entry fails to resolve against `oslo_cache-*.dist-info/`
          and `pkg_resources` raises `DistributionNotFound`.\n\nThe driver entry-point
          then fails to load and Magnum responds to every cluster operation with the
          misleading:\n\n```\nCluster type (vm, ubuntu, kubernetes) not supported\n```\n\nThe
          constraint files used by the existing matrix already include the broken
          `oslo.cache` versions:\n\n| OpenStack branch | `oslo.cache` constraint |\n|---|---|\n|
          `2024.1` | `===3.7.0` (dotted) |\n| `2024.2` | `===3.8.0` (dotted) |\n|
          **`2025.1`** | **`===3.10.2` (PEP 625 underscore)** |\n| `master` | `===4.1.1`
          (PEP 625 underscore) |\n\n\u2026so the bug is sitting on disk during CI
          for the 2025.1 + master cells, but no CI step imports anything to trigger
          it.\n\n## Change\n\nAdd an explicit smoke step to the `coinstall` job that:\n\n1.
          Installs `magnum` and `keystonemiddleware` so the driver entry-point loader
          and its real consumer dependency tree are present.\n2. Imports `magnum_cluster_api.driver`
          \u2014 must not raise.\n3. Loads Magnum's driver entry points via `magnum.drivers.common.driver.Driver.load_entry_points()`
          and asserts at least one `cluster_api` driver is registered.\n4. Asserts
          that `pkg_resources` was *not* pulled into `sys.modules`. This is the regression
          guard: if anything reintroduces the legacy resolver (the same class of bug
          fixed by #1001), every PEP 625-named wheel in the matrix will trip it.\n\nRuns
          across the full `(openstack-version \xD7 python-version)` matrix so the
          same protection applies to every supported OpenStack branch \u2014 including
          `master`, where future PEP 625 transitions of other dependencies will land
          first.\n\n## Relationship to #1001\n\nThis PR is intentionally orthogonal
          to #1001:\n- **#1001** fixes the actual bug by removing all `pkg_resources`
          usage from `magnum_cluster_api`.\n- **This PR** ensures the bug \u2014 and
          any equivalent future regression \u2014 fails CI loudly instead of shipping
          silently to production.\n\nDrafted to allow review of the test approach
          before unblocking. Happy to widen / narrow the assertions as needed."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1003
        commit_id: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        patchset: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      change: '1003'
      change_message: "ci: smoke-test driver import and entry-point loading\n\n##
        Summary\n\nThe existing `coinstall` job verifies that `magnum-cluster-api`
        *installs* cleanly against each OpenStack upper-constraints set, but it never
        imports the package or exercises Magnum's driver entry-point loader. Failures
        that occur at import time are therefore invisible to CI.\n\n## Why this matters\n\nA
        real production regression slipped through unnoticed because of this blind
        spot:\n\n`oslo.cache 3.10.2` (uploaded to PyPI on 2025-07-25, pinned by the
        `stable/2025.1` upper-constraints) ships under a [PEP 625](https://peps.python.org/pep-0625/)
        normalized wheel filename \u2014 `oslo_cache-3.10.2-py3-none-any.whl` instead
        of `oslo.cache-*`. [PEP 427](https://peps.python.org/pep-0427/) then mandates
        the on-disk dist-info directory match the wheel filename, so the install layout
        becomes `oslo_cache-3.10.2.dist-info/`.\n\n`magnum_cluster_api/resources.py`
        (pre-#1001) calls `pkg_resources.require(\"magnum_cluster_api\")` at module
        import time. Legacy `pkg_resources` does not apply [PEP 503](https://peps.python.org/pep-0503/)
        name normalization across `.`/`_`/`-` when matching distributions, so `keystonemiddleware`'s
        `oslo.cache>=...` Requires-Dist entry fails to resolve against `oslo_cache-*.dist-info/`
        and `pkg_resources` raises `DistributionNotFound`.\n\nThe driver entry-point
        then fails to load and Magnum responds to every cluster operation with the
        misleading:\n\n```\nCluster type (vm, ubuntu, kubernetes) not supported\n```\n\nThe
        constraint files used by the existing matrix already include the broken `oslo.cache`
        versions:\n\n| OpenStack branch | `oslo.cache` constraint |\n|---|---|\n|
        `2024.1` | `===3.7.0` (dotted) |\n| `2024.2` | `===3.8.0` (dotted) |\n| **`2025.1`**
        | **`===3.10.2` (PEP 625 underscore)** |\n| `master` | `===4.1.1` (PEP 625
        underscore) |\n\n\u2026so the bug is sitting on disk during CI for the 2025.1
        + master cells, but no CI step imports anything to trigger it.\n\n## Change\n\nAdd
        an explicit smoke step to the `coinstall` job that:\n\n1. Installs `magnum`
        and `keystonemiddleware` so the driver entry-point loader and its real consumer
        dependency tree are present.\n2. Imports `magnum_cluster_api.driver` \u2014
        must not raise.\n3. Loads Magnum's driver entry points via `magnum.drivers.common.driver.Driver.load_entry_points()`
        and asserts at least one `cluster_api` driver is registered.\n4. Asserts that
        `pkg_resources` was *not* pulled into `sys.modules`. This is the regression
        guard: if anything reintroduces the legacy resolver (the same class of bug
        fixed by #1001), every PEP 625-named wheel in the matrix will trip it.\n\nRuns
        across the full `(openstack-version \xD7 python-version)` matrix so the same
        protection applies to every supported OpenStack branch \u2014 including `master`,
        where future PEP 625 transitions of other dependencies will land first.\n\n##
        Relationship to #1001\n\nThis PR is intentionally orthogonal to #1001:\n-
        **#1001** fixes the actual bug by removing all `pkg_resources` usage from
        `magnum_cluster_api`.\n- **This PR** ensures the bug \u2014 and any equivalent
        future regression \u2014 fails CI loudly instead of shipping silently to production.\n\nDrafted
        to allow review of the test approach before unblocking. Happy to widen / narrow
        the assertions as needed."
      change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1003
      child_jobs: []
      commit_id: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
      event_id: 36774ec0-691e-11f1-955f-00c5eacd12a1
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/59a47db10e8f4cb997635d1942e6e6e4/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/59a47db10e8f4cb997635d1942e6e6e4/work/logs
        result_data_file: /var/lib/zuul/builds/59a47db10e8f4cb997635d1942e6e6e4/work/results.json
        src_root: /var/lib/zuul/builds/59a47db10e8f4cb997635d1942e6e6e4/work/src
        work_root: /var/lib/zuul/builds/59a47db10e8f4cb997635d1942e6e6e4/work
      include_vars: []
      items:
      - branch: main
        change: '1003'
        change_message: "ci: smoke-test driver import and entry-point loading\n\n##
          Summary\n\nThe existing `coinstall` job verifies that `magnum-cluster-api`
          *installs* cleanly against each OpenStack upper-constraints set, but it
          never imports the package or exercises Magnum's driver entry-point loader.
          Failures that occur at import time are therefore invisible to CI.\n\n##
          Why this matters\n\nA real production regression slipped through unnoticed
          because of this blind spot:\n\n`oslo.cache 3.10.2` (uploaded to PyPI on
          2025-07-25, pinned by the `stable/2025.1` upper-constraints) ships under
          a [PEP 625](https://peps.python.org/pep-0625/) normalized wheel filename
          \u2014 `oslo_cache-3.10.2-py3-none-any.whl` instead of `oslo.cache-*`. [PEP
          427](https://peps.python.org/pep-0427/) then mandates the on-disk dist-info
          directory match the wheel filename, so the install layout becomes `oslo_cache-3.10.2.dist-info/`.\n\n`magnum_cluster_api/resources.py`
          (pre-#1001) calls `pkg_resources.require(\"magnum_cluster_api\")` at module
          import time. Legacy `pkg_resources` does not apply [PEP 503](https://peps.python.org/pep-0503/)
          name normalization across `.`/`_`/`-` when matching distributions, so `keystonemiddleware`'s
          `oslo.cache>=...` Requires-Dist entry fails to resolve against `oslo_cache-*.dist-info/`
          and `pkg_resources` raises `DistributionNotFound`.\n\nThe driver entry-point
          then fails to load and Magnum responds to every cluster operation with the
          misleading:\n\n```\nCluster type (vm, ubuntu, kubernetes) not supported\n```\n\nThe
          constraint files used by the existing matrix already include the broken
          `oslo.cache` versions:\n\n| OpenStack branch | `oslo.cache` constraint |\n|---|---|\n|
          `2024.1` | `===3.7.0` (dotted) |\n| `2024.2` | `===3.8.0` (dotted) |\n|
          **`2025.1`** | **`===3.10.2` (PEP 625 underscore)** |\n| `master` | `===4.1.1`
          (PEP 625 underscore) |\n\n\u2026so the bug is sitting on disk during CI
          for the 2025.1 + master cells, but no CI step imports anything to trigger
          it.\n\n## Change\n\nAdd an explicit smoke step to the `coinstall` job that:\n\n1.
          Installs `magnum` and `keystonemiddleware` so the driver entry-point loader
          and its real consumer dependency tree are present.\n2. Imports `magnum_cluster_api.driver`
          \u2014 must not raise.\n3. Loads Magnum's driver entry points via `magnum.drivers.common.driver.Driver.load_entry_points()`
          and asserts at least one `cluster_api` driver is registered.\n4. Asserts
          that `pkg_resources` was *not* pulled into `sys.modules`. This is the regression
          guard: if anything reintroduces the legacy resolver (the same class of bug
          fixed by #1001), every PEP 625-named wheel in the matrix will trip it.\n\nRuns
          across the full `(openstack-version \xD7 python-version)` matrix so the
          same protection applies to every supported OpenStack branch \u2014 including
          `master`, where future PEP 625 transitions of other dependencies will land
          first.\n\n## Relationship to #1001\n\nThis PR is intentionally orthogonal
          to #1001:\n- **#1001** fixes the actual bug by removing all `pkg_resources`
          usage from `magnum_cluster_api`.\n- **This PR** ensures the bug \u2014 and
          any equivalent future regression \u2014 fails CI loudly instead of shipping
          silently to production.\n\nDrafted to allow review of the test approach
          before unblocking. Happy to widen / narrow the assertions as needed."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1003
        commit_id: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        patchset: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          name: vexxhost/magnum-cluster-api
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        topic: null
      job: magnum-cluster-api-hydrophone-v1.35.4-cilium
      jobtags: []
      max_attempts: 3
      message: Y2k6IHNtb2tlLXRlc3QgZHJpdmVyIGltcG9ydCBhbmQgZW50cnktcG9pbnQgbG9hZGluZwoKIyMgU3VtbWFyeQoKVGhlIGV4aXN0aW5nIGBjb2luc3RhbGxgIGpvYiB2ZXJpZmllcyB0aGF0IGBtYWdudW0tY2x1c3Rlci1hcGlgICppbnN0YWxscyogY2xlYW5seSBhZ2FpbnN0IGVhY2ggT3BlblN0YWNrIHVwcGVyLWNvbnN0cmFpbnRzIHNldCwgYnV0IGl0IG5ldmVyIGltcG9ydHMgdGhlIHBhY2thZ2Ugb3IgZXhlcmNpc2VzIE1hZ251bSdzIGRyaXZlciBlbnRyeS1wb2ludCBsb2FkZXIuIEZhaWx1cmVzIHRoYXQgb2NjdXIgYXQgaW1wb3J0IHRpbWUgYXJlIHRoZXJlZm9yZSBpbnZpc2libGUgdG8gQ0kuCgojIyBXaHkgdGhpcyBtYXR0ZXJzCgpBIHJlYWwgcHJvZHVjdGlvbiByZWdyZXNzaW9uIHNsaXBwZWQgdGhyb3VnaCB1bm5vdGljZWQgYmVjYXVzZSBvZiB0aGlzIGJsaW5kIHNwb3Q6Cgpgb3Nsby5jYWNoZSAzLjEwLjJgICh1cGxvYWRlZCB0byBQeVBJIG9uIDIwMjUtMDctMjUsIHBpbm5lZCBieSB0aGUgYHN0YWJsZS8yMDI1LjFgIHVwcGVyLWNvbnN0cmFpbnRzKSBzaGlwcyB1bmRlciBhIFtQRVAgNjI1XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDYyNS8pIG5vcm1hbGl6ZWQgd2hlZWwgZmlsZW5hbWUg4oCUIGBvc2xvX2NhY2hlLTMuMTAuMi1weTMtbm9uZS1hbnkud2hsYCBpbnN0ZWFkIG9mIGBvc2xvLmNhY2hlLSpgLiBbUEVQIDQyN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA0MjcvKSB0aGVuIG1hbmRhdGVzIHRoZSBvbi1kaXNrIGRpc3QtaW5mbyBkaXJlY3RvcnkgbWF0Y2ggdGhlIHdoZWVsIGZpbGVuYW1lLCBzbyB0aGUgaW5zdGFsbCBsYXlvdXQgYmVjb21lcyBgb3Nsb19jYWNoZS0zLjEwLjIuZGlzdC1pbmZvL2AuCgpgbWFnbnVtX2NsdXN0ZXJfYXBpL3Jlc291cmNlcy5weWAgKHByZS0jMTAwMSkgY2FsbHMgYHBrZ19yZXNvdXJjZXMucmVxdWlyZSgibWFnbnVtX2NsdXN0ZXJfYXBpIilgIGF0IG1vZHVsZSBpbXBvcnQgdGltZS4gTGVnYWN5IGBwa2dfcmVzb3VyY2VzYCBkb2VzIG5vdCBhcHBseSBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKSBuYW1lIG5vcm1hbGl6YXRpb24gYWNyb3NzIGAuYC9gX2AvYC1gIHdoZW4gbWF0Y2hpbmcgZGlzdHJpYnV0aW9ucywgc28gYGtleXN0b25lbWlkZGxld2FyZWAncyBgb3Nsby5jYWNoZT49Li4uYCBSZXF1aXJlcy1EaXN0IGVudHJ5IGZhaWxzIHRvIHJlc29sdmUgYWdhaW5zdCBgb3Nsb19jYWNoZS0qLmRpc3QtaW5mby9gIGFuZCBgcGtnX3Jlc291cmNlc2AgcmFpc2VzIGBEaXN0cmlidXRpb25Ob3RGb3VuZGAuCgpUaGUgZHJpdmVyIGVudHJ5LXBvaW50IHRoZW4gZmFpbHMgdG8gbG9hZCBhbmQgTWFnbnVtIHJlc3BvbmRzIHRvIGV2ZXJ5IGNsdXN0ZXIgb3BlcmF0aW9uIHdpdGggdGhlIG1pc2xlYWRpbmc6CgpgYGAKQ2x1c3RlciB0eXBlICh2bSwgdWJ1bnR1LCBrdWJlcm5ldGVzKSBub3Qgc3VwcG9ydGVkCmBgYAoKVGhlIGNvbnN0cmFpbnQgZmlsZXMgdXNlZCBieSB0aGUgZXhpc3RpbmcgbWF0cml4IGFscmVhZHkgaW5jbHVkZSB0aGUgYnJva2VuIGBvc2xvLmNhY2hlYCB2ZXJzaW9uczoKCnwgT3BlblN0YWNrIGJyYW5jaCB8IGBvc2xvLmNhY2hlYCBjb25zdHJhaW50IHwKfC0tLXwtLS18CnwgYDIwMjQuMWAgfCBgPT09My43LjBgIChkb3R0ZWQpIHwKfCBgMjAyNC4yYCB8IGA9PT0zLjguMGAgKGRvdHRlZCkgfAp8ICoqYDIwMjUuMWAqKiB8ICoqYD09PTMuMTAuMmAgKFBFUCA2MjUgdW5kZXJzY29yZSkqKiB8CnwgYG1hc3RlcmAgfCBgPT09NC4xLjFgIChQRVAgNjI1IHVuZGVyc2NvcmUpIHwKCuKApnNvIHRoZSBidWcgaXMgc2l0dGluZyBvbiBkaXNrIGR1cmluZyBDSSBmb3IgdGhlIDIwMjUuMSArIG1hc3RlciBjZWxscywgYnV0IG5vIENJIHN0ZXAgaW1wb3J0cyBhbnl0aGluZyB0byB0cmlnZ2VyIGl0LgoKIyMgQ2hhbmdlCgpBZGQgYW4gZXhwbGljaXQgc21va2Ugc3RlcCB0byB0aGUgYGNvaW5zdGFsbGAgam9iIHRoYXQ6CgoxLiBJbnN0YWxscyBgbWFnbnVtYCBhbmQgYGtleXN0b25lbWlkZGxld2FyZWAgc28gdGhlIGRyaXZlciBlbnRyeS1wb2ludCBsb2FkZXIgYW5kIGl0cyByZWFsIGNvbnN1bWVyIGRlcGVuZGVuY3kgdHJlZSBhcmUgcHJlc2VudC4KMi4gSW1wb3J0cyBgbWFnbnVtX2NsdXN0ZXJfYXBpLmRyaXZlcmAg4oCUIG11c3Qgbm90IHJhaXNlLgozLiBMb2FkcyBNYWdudW0ncyBkcml2ZXIgZW50cnkgcG9pbnRzIHZpYSBgbWFnbnVtLmRyaXZlcnMuY29tbW9uLmRyaXZlci5Ecml2ZXIubG9hZF9lbnRyeV9wb2ludHMoKWAgYW5kIGFzc2VydHMgYXQgbGVhc3Qgb25lIGBjbHVzdGVyX2FwaWAgZHJpdmVyIGlzIHJlZ2lzdGVyZWQuCjQuIEFzc2VydHMgdGhhdCBgcGtnX3Jlc291cmNlc2Agd2FzICpub3QqIHB1bGxlZCBpbnRvIGBzeXMubW9kdWxlc2AuIFRoaXMgaXMgdGhlIHJlZ3Jlc3Npb24gZ3VhcmQ6IGlmIGFueXRoaW5nIHJlaW50cm9kdWNlcyB0aGUgbGVnYWN5IHJlc29sdmVyICh0aGUgc2FtZSBjbGFzcyBvZiBidWcgZml4ZWQgYnkgIzEwMDEpLCBldmVyeSBQRVAgNjI1LW5hbWVkIHdoZWVsIGluIHRoZSBtYXRyaXggd2lsbCB0cmlwIGl0LgoKUnVucyBhY3Jvc3MgdGhlIGZ1bGwgYChvcGVuc3RhY2stdmVyc2lvbiDDlyBweXRob24tdmVyc2lvbilgIG1hdHJpeCBzbyB0aGUgc2FtZSBwcm90ZWN0aW9uIGFwcGxpZXMgdG8gZXZlcnkgc3VwcG9ydGVkIE9wZW5TdGFjayBicmFuY2gg4oCUIGluY2x1ZGluZyBgbWFzdGVyYCwgd2hlcmUgZnV0dXJlIFBFUCA2MjUgdHJhbnNpdGlvbnMgb2Ygb3RoZXIgZGVwZW5kZW5jaWVzIHdpbGwgbGFuZCBmaXJzdC4KCiMjIFJlbGF0aW9uc2hpcCB0byAjMTAwMQoKVGhpcyBQUiBpcyBpbnRlbnRpb25hbGx5IG9ydGhvZ29uYWwgdG8gIzEwMDE6Ci0gKiojMTAwMSoqIGZpeGVzIHRoZSBhY3R1YWwgYnVnIGJ5IHJlbW92aW5nIGFsbCBgcGtnX3Jlc291cmNlc2AgdXNhZ2UgZnJvbSBgbWFnbnVtX2NsdXN0ZXJfYXBpYC4KLSAqKlRoaXMgUFIqKiBlbnN1cmVzIHRoZSBidWcg4oCUIGFuZCBhbnkgZXF1aXZhbGVudCBmdXR1cmUgcmVncmVzc2lvbiDigJQgZmFpbHMgQ0kgbG91ZGx5IGluc3RlYWQgb2Ygc2hpcHBpbmcgc2lsZW50bHkgdG8gcHJvZHVjdGlvbi4KCkRyYWZ0ZWQgdG8gYWxsb3cgcmV2aWV3IG9mIHRoZSB0ZXN0IGFwcHJvYWNoIGJlZm9yZSB1bmJsb2NraW5nLiBIYXBweSB0byB3aWRlbiAvIG5hcnJvdyB0aGUgYXNzZXJ0aW9ucyBhcyBuZWVkZWQu
      override_checkout: master
      patchset: 7f9ebcef8901ca001c32eb14fd92d72d3dd2a98e
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 82e3e8b1292a25e38235bb92b157992d326531d1
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 348c7ff425450b0356e1d84589143dce260be74a
          untrusted/project_0/opendev.org/openstack/devstack:
            canonical_name: opendev.org/openstack/devstack
            checkout: master
            commit: 37fb911deef99dce62bfce22cce767b821a23bb1
          untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs:
            canonical_name: opendev.org/openstack/openstack-zuul-jobs
            checkout: master
            commit: aebda82f8822e38db5bbd25ab31ea110792e8c2b
          untrusted/project_2/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          untrusted/project_3/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 82e3e8b1292a25e38235bb92b157992d326531d1
          untrusted/project_4/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 348c7ff425450b0356e1d84589143dce260be74a
          untrusted/project_5/github.com/vexxhost/magnum-cluster-api:
            canonical_name: github.com/vexxhost/magnum-cluster-api
            checkout: main
            commit: 8a1201ccb2ab2e5379e892c9245106c2293f6134
        playbooks:
        - path: untrusted/project_5/github.com/vexxhost/magnum-cluster-api/zuul.d/playbooks/hydrophone/run.yml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_1/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/playbook_0/role_1/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_2/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/playbook_0/role_2/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/playbook_0/role_4/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_4/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_5/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/playbook_0/role_5/zuul-jobs/roles
        post_playbooks:
        - path: untrusted/project_5/github.com/vexxhost/magnum-cluster-api/zuul.d/playbooks/hydrophone/post.yml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_0/role_1/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/post_playbook_0/role_1/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_0/role_2/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/post_playbook_0/role_2/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_0/role_4/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_0/role_4/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_0/role_5/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_0/role_5/zuul-jobs/roles
        - path: untrusted/project_0/opendev.org/openstack/devstack/playbooks/post.yaml
          roles:
          - checkout: master
            checkout_description: playbook branch
            link_name: ansible/post_playbook_1/role_0/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/post_playbook_1/role_0/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_1/role_1/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/post_playbook_1/role_1/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_1/role_3/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_1/role_3/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_1/role_4/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_1/role_4/zuul-jobs/roles
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/post.yaml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_2/role_1/zuul-jobs
            link_target: trusted/project_1/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_2/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_2/role_2/zuul-jobs
            link_target: trusted/project_2/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_2/role_2/zuul-jobs/roles
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/post-logs.yaml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/post_playbook_3/role_1/zuul-jobs
            link_target: trusted/project_1/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_3/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_3/role_2/zuul-jobs
            link_target: trusted/project_2/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_3/role_2/zuul-jobs/roles
        pre_playbooks:
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/pre.yaml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_0/role_1/zuul-jobs
            link_target: trusted/project_1/opendev.org/zuul/zuul-jobs
            role_path: ansible/pre_playbook_0/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/pre_playbook_0/role_2/zuul-jobs
            link_target: trusted/project_2/github.com/vexxhost/zuul-jobs
            role_path: ansible/pre_playbook_0/role_2/zuul-jobs/roles
        - path: untrusted/project_0/opendev.org/openstack/devstack/playbooks/pre.yaml
          roles:
          - checkout: master
            checkout_description: playbook branch
            link_name: ansible/pre_playbook_1/role_0/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/pre_playbook_1/role_0/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_1/role_1/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/pre_playbook_1/role_1/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_1/role_3/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/pre_playbook_1/role_3/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/pre_playbook_1/role_4/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/pre_playbook_1/role_4/zuul-jobs/roles
        - path: untrusted/project_5/github.com/vexxhost/magnum-cluster-api/zuul.d/playbooks/hydrophone/pre.yml
          roles:
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_2/role_1/devstack
            link_target: untrusted/project_0/opendev.org/openstack/devstack
            role_path: ansible/pre_playbook_2/role_1/devstack/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_2/role_2/openstack-zuul-jobs
            link_target: untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs
            role_path: ansible/pre_playbook_2/role_2/openstack-zuul-jobs/roles
          - checkout: master
            checkout_description: job override ref
            link_name: ansible/pre_playbook_2/role_4/zuul-jobs
            link_target: untrusted/project_3/opendev.org/zuul/zuul-jobs
            role_path: ansible/pre_playbook_2/role_4/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/pre_playbook_2/role_5/zuul-jobs
            link_target: untrusted/project_4/github.com/vexxhost/zuul-jobs
            role_path: ansible/pre_playbook_2/role_5/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/vexxhost/magnum-cluster-api
        name: vexxhost/magnum-cluster-api
        short_name: magnum-cluster-api
        src_dir: src/github.com/vexxhost/magnum-cluster-api
      projects:
        github.com/novnc/novnc:
          canonical_hostname: github.com
          canonical_name: github.com/novnc/novnc
          checkout: master
          checkout_description: job override ref
          commit: 7c36fabe599e053c5a81e98e091ac636f6c1e174
          name: novnc/novnc
          required: true
          short_name: novnc
          src_dir: src/github.com/novnc/novnc
        github.com/vexxhost/magnum-cluster-api:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/magnum-cluster-api
          checkout: main
          checkout_description: zuul branch
          commit: 8a1201ccb2ab2e5379e892c9245106c2293f6134
          name: vexxhost/magnum-cluster-api
          required: false
          short_name: magnum-cluster-api
          src_dir: src/github.com/vexxhost/magnum-cluster-api
        opendev.org/openstack/barbican:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/barbican
          checkout: master
          checkout_description: job override ref
          commit: a9b738f9c21e41c123e60dfe02888477c9886603
          name: openstack/barbican
          required: true
          short_name: barbican
          src_dir: src/opendev.org/openstack/barbican
        opendev.org/openstack/cinder:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/cinder
          checkout: master
          checkout_description: job override ref
          commit: f59cf1c9b974d6ef24e51c4f87b8dff076a7222b
          name: openstack/cinder
          required: true
          short_name: cinder
          src_dir: src/opendev.org/openstack/cinder
        opendev.org/openstack/devstack:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/devstack
          checkout: master
          checkout_description: job override ref
          commit: 37fb911deef99dce62bfce22cce767b821a23bb1
          name: openstack/devstack
          required: true
          short_name: devstack
          src_dir: src/opendev.org/openstack/devstack
        opendev.org/openstack/glance:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/glance
          checkout: master
          checkout_description: job override ref
          commit: edf97a1b5b6790f7e79315a11c3f70cc92553ef8
          name: openstack/glance
          required: true
          short_name: glance
          src_dir: src/opendev.org/openstack/glance
        opendev.org/openstack/keystone:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/keystone
          checkout: master
          checkout_description: job override ref
          commit: c384c163d69432b18fde9074b7dfaa896522b776
          name: openstack/keystone
          required: true
          short_name: keystone
          src_dir: src/opendev.org/openstack/keystone
        opendev.org/openstack/magnum:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/magnum
          checkout: master
          checkout_description: job override ref
          commit: b9a40a6f0ecd692a1fe7cc0f18454413505b44df
          name: openstack/magnum
          required: true
          short_name: magnum
          src_dir: src/opendev.org/openstack/magnum
        opendev.org/openstack/manila:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/manila
          checkout: master
          checkout_description: job override ref
          commit: 5cf57fbe77c3ede8914294524fefd4f2134c2d40
          name: openstack/manila
          required: true
          short_name: manila
          src_dir: src/opendev.org/openstack/manila
        opendev.org/openstack/neutron:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/neutron
          checkout: master
          checkout_description: job override ref
          commit: d8de4a7e54eee06d2bd6c042b0d1f89c7524d990
          name: openstack/neutron
          required: true
          short_name: neutron
          src_dir: src/opendev.org/openstack/neutron
        opendev.org/openstack/nova:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/nova
          checkout: master
          checkout_description: job override ref
          commit: 3ac36dbfd1f3ac00c17ce8dbb4ae97ab120e153e
          name: openstack/nova
          required: true
          short_name: nova
          src_dir: src/opendev.org/openstack/nova
        opendev.org/openstack/octavia:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/octavia
          checkout: master
          checkout_description: job override ref
          commit: 9ff4683c8212e4c043af69f1b5ebadc21651dc58
          name: openstack/octavia
          required: true
          short_name: octavia
          src_dir: src/opendev.org/openstack/octavia
        opendev.org/openstack/os-test-images:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/os-test-images
          checkout: master
          checkout_description: job override ref
          commit: 5d0367e03788764f41da8effffa14e3eac513201
          name: openstack/os-test-images
          required: true
          short_name: os-test-images
          src_dir: src/opendev.org/openstack/os-test-images
        opendev.org/openstack/ovn-octavia-provider:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/ovn-octavia-provider
          checkout: master
          checkout_description: job override ref
          commit: 890b6266450916ddf9ef8c0a157f3fe4eb03e7a5
          name: openstack/ovn-octavia-provider
          required: true
          short_name: ovn-octavia-provider
          src_dir: src/opendev.org/openstack/ovn-octavia-provider
        opendev.org/openstack/placement:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/placement
          checkout: master
          checkout_description: job override ref
          commit: 3cba66c70ce49e31e582c8d03e945017f38fcf11
          name: openstack/placement
          required: true
          short_name: placement
          src_dir: src/opendev.org/openstack/placement
        opendev.org/openstack/python-magnumclient:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/python-magnumclient
          checkout: master
          checkout_description: job override ref
          commit: 0cee96126c3fed1df41976493c17e4b54923ae5d
          name: openstack/python-magnumclient
          required: true
          short_name: python-magnumclient
          src_dir: src/opendev.org/openstack/python-magnumclient
        opendev.org/openstack/requirements:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/requirements
          checkout: master
          checkout_description: job override ref
          commit: b83fbd73926b84db0c913b943f72c71c1cadc641
          name: openstack/requirements
          required: true
          short_name: requirements
          src_dir: src/opendev.org/openstack/requirements
        opendev.org/openstack/swift:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/swift
          checkout: master
          checkout_description: job override ref
          commit: 47dbcf97230f6b1f8c7f3de9e7d28c940102a596
          name: openstack/swift
          required: true
          short_name: swift
          src_dir: src/opendev.org/openstack/swift
      ref: refs/pull/1003/head
      resources: {}
      tenant: oss
      timeout: 7200
      topic: null
      voting: true
    zuul_copy_output:
      /etc/ceph: logs
      /etc/glusterfs/glusterd.vol: logs
      /etc/libvirt: logs
      /etc/lvm: logs
      /etc/resolv.conf: logs
      /etc/sudoers: logs
      /etc/sudoers.d: logs
      /var/log/ceph: logs
      /var/log/glusterfs: logs
      /var/log/libvirt: logs
      /var/log/mysql: logs
      /var/log/openvswitch: logs
      /var/log/postgresql: logs
      /var/log/rabbitmq: logs
      /var/log/unbound.log: logs
      '{{ devstack_conf_dir }}/.localrc.auto': logs
      '{{ devstack_conf_dir }}/.stackenv': logs
      '{{ devstack_conf_dir }}/local.conf': logs
      '{{ devstack_conf_dir }}/localrc': logs
      '{{ devstack_full_log}}': logs
      '{{ devstack_log_dir }}/atop': logs
      '{{ devstack_log_dir }}/devstacklog.txt': logs
      '{{ devstack_log_dir }}/devstacklog.txt.summary': logs
      '{{ devstack_log_dir }}/dstat-csv.log': logs
      '{{ devstack_log_dir }}/qemu.coredump': logs
      '{{ devstack_log_dir }}/tcpdump.pcap': logs
      '{{ devstack_log_dir }}/worlddump-latest.txt': logs
      '{{ stage_dir }}/apache': logs
      '{{ stage_dir }}/apache_config': logs
      '{{ stage_dir }}/audit.log': logs
      '{{ stage_dir }}/core': logs
      '{{ stage_dir }}/deprecations.log': logs
      '{{ stage_dir }}/df.txt': logs
      '{{ stage_dir }}/dpkg-l.txt': logs
      '{{ stage_dir }}/etc': logs
      '{{ stage_dir }}/iptables.txt': logs
      '{{ stage_dir }}/listen53.txt': logs
      '{{ stage_dir }}/mount.txt': logs
      '{{ stage_dir }}/performance.json': logs
      '{{ stage_dir }}/pip2-freeze.txt': logs
      '{{ stage_dir }}/pip3-freeze.txt': logs
      '{{ stage_dir }}/rpm-qa.txt': logs
      '{{ stage_dir }}/services.txt': logs
      '{{ stage_dir }}/verify_tempest_conf.log': logs
