all:
  children:
    tempest:
      hosts:
        controller: null
    zuul_unreachable:
      hosts: {}
  hosts:
    controller:
      ansible_connection: ssh
      ansible_host: 199.204.45.141
      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.3
      network_driver: calico
      nodepool:
        az: nova
        cloud: public
        external_id: bdaa7728-b28b-4336-afa7-fbb1f0320921
        host_id: 413ad91e6120ae81306de27e59dcefd40ab96f06b8665fea7030ef8f
        interface_ip: 199.204.45.141
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.204.45.141
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.141
        public_ipv6: 2604:e100:1:0:f816:3eff:fef6:be6f
        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: bdaa7728-b28b-4336-afa7-fbb1f0320921
        host_id: 413ad91e6120ae81306de27e59dcefd40ab96f06b8665fea7030ef8f
        interface_ip: 199.204.45.141
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 199.204.45.141
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.141
        public_ipv6: 2604:e100:1:0:f816:3eff:fef6:be6f
        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.3
    network_driver: calico
    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.3 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#108>'
      - '<Job magnum-cluster-api-hydrophone-v1.35.3-calico explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/magnum-cluster-api/zuul.d/jobs.yaml@main#114>'
      - '<Job magnum-cluster-api-hydrophone-v1.35.3-calico explicit: None implied:
        None source: vexxhost/magnum-cluster-api/zuul.d/project.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: a9071a0fffee4ef2bb83c44a4397f1f0
      build_refs:
      - branch: main
        change: '983'
        change_message: "fix: preserve disableAPIServerFloatingIP on upgraded clusters\n\n##
          Summary\n\nClusters created by magnum-cluster-api versions **older than
          v0.25.x** had `disableAPIServerFloatingIP` unconditionally patched onto
          the `OpenStackCluster` spec. [PR #486](https://github.com/vexxhost/magnum-cluster-api/pull/486)
          (v0.25.0) later guarded that patch with an `enabledIf` so the field is only
          set when the user actually asks to disable the API-server floating IP.\n\nWhen
          such an old cluster is reconciled by a newer magnum-cluster-api, the generated
          `OpenStackCluster` spec no longer contains the field, but the stored spec
          still does. CAPO's admission webhook treats any change to `DisableAPIServerFloatingIP`
          \u2014 including `nil \u2194 value` \u2014 as an immutability violation
          (it falls back to `reflect.DeepEqual` after zeroing out the fields it explicitly
          allows to mutate; see [`pkg/webhooks/openstackcluster_webhook.go`](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/blob/release-0.11/pkg/webhooks/openstackcluster_webhook.go)).
          The topology update is rejected and the upgrade gets stuck.\n\nThis is what
          was observed by Yaguang on the vsystems environment where a cluster cloned
          from `magnum-v0.31.2` has `disableAPIServerFloatingIP: false` in its spec
          but a fresh install of 0.31.2 does not.\n\n## Is this environment-specific?\n\n**No**
          \u2014 it affects *every* environment that has clusters originally created
          by any magnum-cluster-api version that predates PR #486 (v0.25.0). The field
          was persisted at create time and remains on the `OpenStackCluster` forever
          because CAPO refuses to let it be removed.\n\n## The fix\n\nThe feature
          is split into two topology variables:\n\n| variable | role |\n| --- | ---
          |\n| `disableAPIServerFloatingIP` | the value (unchanged) |\n| `disableAPIServerFloatingIPManaged`
          | gates whether the ClusterClass patch fires |\n\nThe Python driver seeds
          both from the user's `master_lb_floating_ip_enabled` label. The Rust `resolve_immutable_fields`
          driver additionally flips `disableAPIServerFloatingIPManaged` to `true`
          \u2014 and overrides the value \u2014 whenever the existing `OpenStackCluster`
          spec already has the field set. The patch therefore fires with the preserved
          value, the generated spec matches the stored spec, and CAPO's webhook is
          satisfied.\n\nFresh clusters where the user wants the default (floating
          IP enabled) remain unaffected: both variables are `false`, the patch is
          skipped and the field stays absent \u2014 which is *also* critical, because
          adding the field on an `UPDATE` of an existing cluster that never had it
          would itself trip the same immutability check.\n\n## Tests\n\n* `immutable_fields::tests::disable_api_server_floating_ip_preservation`
          covers the full matrix (field present/absent, value preservation, managed-flag
          propagation, caller-supplied overrides).\n* `features::disable_api_server_floating_ip::tests::test_patches_if_managed_even_when_value_is_false`
          asserts that the patch fires and carries `false` through when the resolver
          has flagged the field as managed.\n\nAll 142 Rust unit tests pass locally."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/983
        commit_id: 982096f635aa1001602fef75111e0599aaf5ed0b
        patchset: 982096f635aa1001602fef75111e0599aaf5ed0b
        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: ee47fb05b9a84ad6bf7379484996a799
      buildset_refs:
      - branch: main
        change: '983'
        change_message: "fix: preserve disableAPIServerFloatingIP on upgraded clusters\n\n##
          Summary\n\nClusters created by magnum-cluster-api versions **older than
          v0.25.x** had `disableAPIServerFloatingIP` unconditionally patched onto
          the `OpenStackCluster` spec. [PR #486](https://github.com/vexxhost/magnum-cluster-api/pull/486)
          (v0.25.0) later guarded that patch with an `enabledIf` so the field is only
          set when the user actually asks to disable the API-server floating IP.\n\nWhen
          such an old cluster is reconciled by a newer magnum-cluster-api, the generated
          `OpenStackCluster` spec no longer contains the field, but the stored spec
          still does. CAPO's admission webhook treats any change to `DisableAPIServerFloatingIP`
          \u2014 including `nil \u2194 value` \u2014 as an immutability violation
          (it falls back to `reflect.DeepEqual` after zeroing out the fields it explicitly
          allows to mutate; see [`pkg/webhooks/openstackcluster_webhook.go`](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/blob/release-0.11/pkg/webhooks/openstackcluster_webhook.go)).
          The topology update is rejected and the upgrade gets stuck.\n\nThis is what
          was observed by Yaguang on the vsystems environment where a cluster cloned
          from `magnum-v0.31.2` has `disableAPIServerFloatingIP: false` in its spec
          but a fresh install of 0.31.2 does not.\n\n## Is this environment-specific?\n\n**No**
          \u2014 it affects *every* environment that has clusters originally created
          by any magnum-cluster-api version that predates PR #486 (v0.25.0). The field
          was persisted at create time and remains on the `OpenStackCluster` forever
          because CAPO refuses to let it be removed.\n\n## The fix\n\nThe feature
          is split into two topology variables:\n\n| variable | role |\n| --- | ---
          |\n| `disableAPIServerFloatingIP` | the value (unchanged) |\n| `disableAPIServerFloatingIPManaged`
          | gates whether the ClusterClass patch fires |\n\nThe Python driver seeds
          both from the user's `master_lb_floating_ip_enabled` label. The Rust `resolve_immutable_fields`
          driver additionally flips `disableAPIServerFloatingIPManaged` to `true`
          \u2014 and overrides the value \u2014 whenever the existing `OpenStackCluster`
          spec already has the field set. The patch therefore fires with the preserved
          value, the generated spec matches the stored spec, and CAPO's webhook is
          satisfied.\n\nFresh clusters where the user wants the default (floating
          IP enabled) remain unaffected: both variables are `false`, the patch is
          skipped and the field stays absent \u2014 which is *also* critical, because
          adding the field on an `UPDATE` of an existing cluster that never had it
          would itself trip the same immutability check.\n\n## Tests\n\n* `immutable_fields::tests::disable_api_server_floating_ip_preservation`
          covers the full matrix (field present/absent, value preservation, managed-flag
          propagation, caller-supplied overrides).\n* `features::disable_api_server_floating_ip::tests::test_patches_if_managed_even_when_value_is_false`
          asserts that the patch fires and carries `false` through when the resolver
          has flagged the field as managed.\n\nAll 142 Rust unit tests pass locally."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/983
        commit_id: 982096f635aa1001602fef75111e0599aaf5ed0b
        patchset: 982096f635aa1001602fef75111e0599aaf5ed0b
        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: '983'
      change_message: "fix: preserve disableAPIServerFloatingIP on upgraded clusters\n\n##
        Summary\n\nClusters created by magnum-cluster-api versions **older than v0.25.x**
        had `disableAPIServerFloatingIP` unconditionally patched onto the `OpenStackCluster`
        spec. [PR #486](https://github.com/vexxhost/magnum-cluster-api/pull/486) (v0.25.0)
        later guarded that patch with an `enabledIf` so the field is only set when
        the user actually asks to disable the API-server floating IP.\n\nWhen such
        an old cluster is reconciled by a newer magnum-cluster-api, the generated
        `OpenStackCluster` spec no longer contains the field, but the stored spec
        still does. CAPO's admission webhook treats any change to `DisableAPIServerFloatingIP`
        \u2014 including `nil \u2194 value` \u2014 as an immutability violation (it
        falls back to `reflect.DeepEqual` after zeroing out the fields it explicitly
        allows to mutate; see [`pkg/webhooks/openstackcluster_webhook.go`](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/blob/release-0.11/pkg/webhooks/openstackcluster_webhook.go)).
        The topology update is rejected and the upgrade gets stuck.\n\nThis is what
        was observed by Yaguang on the vsystems environment where a cluster cloned
        from `magnum-v0.31.2` has `disableAPIServerFloatingIP: false` in its spec
        but a fresh install of 0.31.2 does not.\n\n## Is this environment-specific?\n\n**No**
        \u2014 it affects *every* environment that has clusters originally created
        by any magnum-cluster-api version that predates PR #486 (v0.25.0). The field
        was persisted at create time and remains on the `OpenStackCluster` forever
        because CAPO refuses to let it be removed.\n\n## The fix\n\nThe feature is
        split into two topology variables:\n\n| variable | role |\n| --- | --- |\n|
        `disableAPIServerFloatingIP` | the value (unchanged) |\n| `disableAPIServerFloatingIPManaged`
        | gates whether the ClusterClass patch fires |\n\nThe Python driver seeds
        both from the user's `master_lb_floating_ip_enabled` label. The Rust `resolve_immutable_fields`
        driver additionally flips `disableAPIServerFloatingIPManaged` to `true` \u2014
        and overrides the value \u2014 whenever the existing `OpenStackCluster` spec
        already has the field set. The patch therefore fires with the preserved value,
        the generated spec matches the stored spec, and CAPO's webhook is satisfied.\n\nFresh
        clusters where the user wants the default (floating IP enabled) remain unaffected:
        both variables are `false`, the patch is skipped and the field stays absent
        \u2014 which is *also* critical, because adding the field on an `UPDATE` of
        an existing cluster that never had it would itself trip the same immutability
        check.\n\n## Tests\n\n* `immutable_fields::tests::disable_api_server_floating_ip_preservation`
        covers the full matrix (field present/absent, value preservation, managed-flag
        propagation, caller-supplied overrides).\n* `features::disable_api_server_floating_ip::tests::test_patches_if_managed_even_when_value_is_false`
        asserts that the patch fires and carries `false` through when the resolver
        has flagged the field as managed.\n\nAll 142 Rust unit tests pass locally."
      change_url: https://github.com/vexxhost/magnum-cluster-api/pull/983
      child_jobs: []
      commit_id: 982096f635aa1001602fef75111e0599aaf5ed0b
      event_id: 3292bbe0-3c0b-11f1-929a-bf3514d29fe9
      executor:
        hostname: 0a8996d2b663
        inventory_file: /var/lib/zuul/builds/a9071a0fffee4ef2bb83c44a4397f1f0/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/a9071a0fffee4ef2bb83c44a4397f1f0/work/logs
        result_data_file: /var/lib/zuul/builds/a9071a0fffee4ef2bb83c44a4397f1f0/work/results.json
        src_root: /var/lib/zuul/builds/a9071a0fffee4ef2bb83c44a4397f1f0/work/src
        work_root: /var/lib/zuul/builds/a9071a0fffee4ef2bb83c44a4397f1f0/work
      include_vars: []
      items:
      - branch: main
        change: '983'
        change_message: "fix: preserve disableAPIServerFloatingIP on upgraded clusters\n\n##
          Summary\n\nClusters created by magnum-cluster-api versions **older than
          v0.25.x** had `disableAPIServerFloatingIP` unconditionally patched onto
          the `OpenStackCluster` spec. [PR #486](https://github.com/vexxhost/magnum-cluster-api/pull/486)
          (v0.25.0) later guarded that patch with an `enabledIf` so the field is only
          set when the user actually asks to disable the API-server floating IP.\n\nWhen
          such an old cluster is reconciled by a newer magnum-cluster-api, the generated
          `OpenStackCluster` spec no longer contains the field, but the stored spec
          still does. CAPO's admission webhook treats any change to `DisableAPIServerFloatingIP`
          \u2014 including `nil \u2194 value` \u2014 as an immutability violation
          (it falls back to `reflect.DeepEqual` after zeroing out the fields it explicitly
          allows to mutate; see [`pkg/webhooks/openstackcluster_webhook.go`](https://github.com/kubernetes-sigs/cluster-api-provider-openstack/blob/release-0.11/pkg/webhooks/openstackcluster_webhook.go)).
          The topology update is rejected and the upgrade gets stuck.\n\nThis is what
          was observed by Yaguang on the vsystems environment where a cluster cloned
          from `magnum-v0.31.2` has `disableAPIServerFloatingIP: false` in its spec
          but a fresh install of 0.31.2 does not.\n\n## Is this environment-specific?\n\n**No**
          \u2014 it affects *every* environment that has clusters originally created
          by any magnum-cluster-api version that predates PR #486 (v0.25.0). The field
          was persisted at create time and remains on the `OpenStackCluster` forever
          because CAPO refuses to let it be removed.\n\n## The fix\n\nThe feature
          is split into two topology variables:\n\n| variable | role |\n| --- | ---
          |\n| `disableAPIServerFloatingIP` | the value (unchanged) |\n| `disableAPIServerFloatingIPManaged`
          | gates whether the ClusterClass patch fires |\n\nThe Python driver seeds
          both from the user's `master_lb_floating_ip_enabled` label. The Rust `resolve_immutable_fields`
          driver additionally flips `disableAPIServerFloatingIPManaged` to `true`
          \u2014 and overrides the value \u2014 whenever the existing `OpenStackCluster`
          spec already has the field set. The patch therefore fires with the preserved
          value, the generated spec matches the stored spec, and CAPO's webhook is
          satisfied.\n\nFresh clusters where the user wants the default (floating
          IP enabled) remain unaffected: both variables are `false`, the patch is
          skipped and the field stays absent \u2014 which is *also* critical, because
          adding the field on an `UPDATE` of an existing cluster that never had it
          would itself trip the same immutability check.\n\n## Tests\n\n* `immutable_fields::tests::disable_api_server_floating_ip_preservation`
          covers the full matrix (field present/absent, value preservation, managed-flag
          propagation, caller-supplied overrides).\n* `features::disable_api_server_floating_ip::tests::test_patches_if_managed_even_when_value_is_false`
          asserts that the patch fires and carries `false` through when the resolver
          has flagged the field as managed.\n\nAll 142 Rust unit tests pass locally."
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/983
        commit_id: 982096f635aa1001602fef75111e0599aaf5ed0b
        patchset: 982096f635aa1001602fef75111e0599aaf5ed0b
        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.3-calico
      jobtags: []
      max_attempts: 3
      message: Zml4OiBwcmVzZXJ2ZSBkaXNhYmxlQVBJU2VydmVyRmxvYXRpbmdJUCBvbiB1cGdyYWRlZCBjbHVzdGVycwoKIyMgU3VtbWFyeQoKQ2x1c3RlcnMgY3JlYXRlZCBieSBtYWdudW0tY2x1c3Rlci1hcGkgdmVyc2lvbnMgKipvbGRlciB0aGFuIHYwLjI1LngqKiBoYWQgYGRpc2FibGVBUElTZXJ2ZXJGbG9hdGluZ0lQYCB1bmNvbmRpdGlvbmFsbHkgcGF0Y2hlZCBvbnRvIHRoZSBgT3BlblN0YWNrQ2x1c3RlcmAgc3BlYy4gW1BSICM0ODZdKGh0dHBzOi8vZ2l0aHViLmNvbS92ZXh4aG9zdC9tYWdudW0tY2x1c3Rlci1hcGkvcHVsbC80ODYpICh2MC4yNS4wKSBsYXRlciBndWFyZGVkIHRoYXQgcGF0Y2ggd2l0aCBhbiBgZW5hYmxlZElmYCBzbyB0aGUgZmllbGQgaXMgb25seSBzZXQgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBhc2tzIHRvIGRpc2FibGUgdGhlIEFQSS1zZXJ2ZXIgZmxvYXRpbmcgSVAuCgpXaGVuIHN1Y2ggYW4gb2xkIGNsdXN0ZXIgaXMgcmVjb25jaWxlZCBieSBhIG5ld2VyIG1hZ251bS1jbHVzdGVyLWFwaSwgdGhlIGdlbmVyYXRlZCBgT3BlblN0YWNrQ2x1c3RlcmAgc3BlYyBubyBsb25nZXIgY29udGFpbnMgdGhlIGZpZWxkLCBidXQgdGhlIHN0b3JlZCBzcGVjIHN0aWxsIGRvZXMuIENBUE8ncyBhZG1pc3Npb24gd2ViaG9vayB0cmVhdHMgYW55IGNoYW5nZSB0byBgRGlzYWJsZUFQSVNlcnZlckZsb2F0aW5nSVBgIOKAlCBpbmNsdWRpbmcgYG5pbCDihpQgdmFsdWVgIOKAlCBhcyBhbiBpbW11dGFiaWxpdHkgdmlvbGF0aW9uIChpdCBmYWxscyBiYWNrIHRvIGByZWZsZWN0LkRlZXBFcXVhbGAgYWZ0ZXIgemVyb2luZyBvdXQgdGhlIGZpZWxkcyBpdCBleHBsaWNpdGx5IGFsbG93cyB0byBtdXRhdGU7IHNlZSBbYHBrZy93ZWJob29rcy9vcGVuc3RhY2tjbHVzdGVyX3dlYmhvb2suZ29gXShodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy1zaWdzL2NsdXN0ZXItYXBpLXByb3ZpZGVyLW9wZW5zdGFjay9ibG9iL3JlbGVhc2UtMC4xMS9wa2cvd2ViaG9va3Mvb3BlbnN0YWNrY2x1c3Rlcl93ZWJob29rLmdvKSkuIFRoZSB0b3BvbG9neSB1cGRhdGUgaXMgcmVqZWN0ZWQgYW5kIHRoZSB1cGdyYWRlIGdldHMgc3R1Y2suCgpUaGlzIGlzIHdoYXQgd2FzIG9ic2VydmVkIGJ5IFlhZ3Vhbmcgb24gdGhlIHZzeXN0ZW1zIGVudmlyb25tZW50IHdoZXJlIGEgY2x1c3RlciBjbG9uZWQgZnJvbSBgbWFnbnVtLXYwLjMxLjJgIGhhcyBgZGlzYWJsZUFQSVNlcnZlckZsb2F0aW5nSVA6IGZhbHNlYCBpbiBpdHMgc3BlYyBidXQgYSBmcmVzaCBpbnN0YWxsIG9mIDAuMzEuMiBkb2VzIG5vdC4KCiMjIElzIHRoaXMgZW52aXJvbm1lbnQtc3BlY2lmaWM/CgoqKk5vKiog4oCUIGl0IGFmZmVjdHMgKmV2ZXJ5KiBlbnZpcm9ubWVudCB0aGF0IGhhcyBjbHVzdGVycyBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgYW55IG1hZ251bS1jbHVzdGVyLWFwaSB2ZXJzaW9uIHRoYXQgcHJlZGF0ZXMgUFIgIzQ4NiAodjAuMjUuMCkuIFRoZSBmaWVsZCB3YXMgcGVyc2lzdGVkIGF0IGNyZWF0ZSB0aW1lIGFuZCByZW1haW5zIG9uIHRoZSBgT3BlblN0YWNrQ2x1c3RlcmAgZm9yZXZlciBiZWNhdXNlIENBUE8gcmVmdXNlcyB0byBsZXQgaXQgYmUgcmVtb3ZlZC4KCiMjIFRoZSBmaXgKClRoZSBmZWF0dXJlIGlzIHNwbGl0IGludG8gdHdvIHRvcG9sb2d5IHZhcmlhYmxlczoKCnwgdmFyaWFibGUgfCByb2xlIHwKfCAtLS0gfCAtLS0gfAp8IGBkaXNhYmxlQVBJU2VydmVyRmxvYXRpbmdJUGAgfCB0aGUgdmFsdWUgKHVuY2hhbmdlZCkgfAp8IGBkaXNhYmxlQVBJU2VydmVyRmxvYXRpbmdJUE1hbmFnZWRgIHwgZ2F0ZXMgd2hldGhlciB0aGUgQ2x1c3RlckNsYXNzIHBhdGNoIGZpcmVzIHwKClRoZSBQeXRob24gZHJpdmVyIHNlZWRzIGJvdGggZnJvbSB0aGUgdXNlcidzIGBtYXN0ZXJfbGJfZmxvYXRpbmdfaXBfZW5hYmxlZGAgbGFiZWwuIFRoZSBSdXN0IGByZXNvbHZlX2ltbXV0YWJsZV9maWVsZHNgIGRyaXZlciBhZGRpdGlvbmFsbHkgZmxpcHMgYGRpc2FibGVBUElTZXJ2ZXJGbG9hdGluZ0lQTWFuYWdlZGAgdG8gYHRydWVgIOKAlCBhbmQgb3ZlcnJpZGVzIHRoZSB2YWx1ZSDigJQgd2hlbmV2ZXIgdGhlIGV4aXN0aW5nIGBPcGVuU3RhY2tDbHVzdGVyYCBzcGVjIGFscmVhZHkgaGFzIHRoZSBmaWVsZCBzZXQuIFRoZSBwYXRjaCB0aGVyZWZvcmUgZmlyZXMgd2l0aCB0aGUgcHJlc2VydmVkIHZhbHVlLCB0aGUgZ2VuZXJhdGVkIHNwZWMgbWF0Y2hlcyB0aGUgc3RvcmVkIHNwZWMsIGFuZCBDQVBPJ3Mgd2ViaG9vayBpcyBzYXRpc2ZpZWQuCgpGcmVzaCBjbHVzdGVycyB3aGVyZSB0aGUgdXNlciB3YW50cyB0aGUgZGVmYXVsdCAoZmxvYXRpbmcgSVAgZW5hYmxlZCkgcmVtYWluIHVuYWZmZWN0ZWQ6IGJvdGggdmFyaWFibGVzIGFyZSBgZmFsc2VgLCB0aGUgcGF0Y2ggaXMgc2tpcHBlZCBhbmQgdGhlIGZpZWxkIHN0YXlzIGFic2VudCDigJQgd2hpY2ggaXMgKmFsc28qIGNyaXRpY2FsLCBiZWNhdXNlIGFkZGluZyB0aGUgZmllbGQgb24gYW4gYFVQREFURWAgb2YgYW4gZXhpc3RpbmcgY2x1c3RlciB0aGF0IG5ldmVyIGhhZCBpdCB3b3VsZCBpdHNlbGYgdHJpcCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgY2hlY2suCgojIyBUZXN0cwoKKiBgaW1tdXRhYmxlX2ZpZWxkczo6dGVzdHM6OmRpc2FibGVfYXBpX3NlcnZlcl9mbG9hdGluZ19pcF9wcmVzZXJ2YXRpb25gIGNvdmVycyB0aGUgZnVsbCBtYXRyaXggKGZpZWxkIHByZXNlbnQvYWJzZW50LCB2YWx1ZSBwcmVzZXJ2YXRpb24sIG1hbmFnZWQtZmxhZyBwcm9wYWdhdGlvbiwgY2FsbGVyLXN1cHBsaWVkIG92ZXJyaWRlcykuCiogYGZlYXR1cmVzOjpkaXNhYmxlX2FwaV9zZXJ2ZXJfZmxvYXRpbmdfaXA6OnRlc3RzOjp0ZXN0X3BhdGNoZXNfaWZfbWFuYWdlZF9ldmVuX3doZW5fdmFsdWVfaXNfZmFsc2VgIGFzc2VydHMgdGhhdCB0aGUgcGF0Y2ggZmlyZXMgYW5kIGNhcnJpZXMgYGZhbHNlYCB0aHJvdWdoIHdoZW4gdGhlIHJlc29sdmVyIGhhcyBmbGFnZ2VkIHRoZSBmaWVsZCBhcyBtYW5hZ2VkLgoKQWxsIDE0MiBSdXN0IHVuaXQgdGVzdHMgcGFzcyBsb2NhbGx5Lg==
      override_checkout: master
      patchset: 982096f635aa1001602fef75111e0599aaf5ed0b
      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: e28b8048839b5a7eaa22d0216032d323ceae894d
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_0/opendev.org/openstack/devstack:
            canonical_name: opendev.org/openstack/devstack
            checkout: master
            commit: 03ece8f88040be9b0b14dd1cfe93076ad2419a80
          untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs:
            canonical_name: opendev.org/openstack/openstack-zuul-jobs
            checkout: master
            commit: 06df93a5d9ed3cb815b4c7ffd63dab006fee4e8a
          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: e28b8048839b5a7eaa22d0216032d323ceae894d
          untrusted/project_4/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_5/github.com/vexxhost/magnum-cluster-api:
            canonical_name: github.com/vexxhost/magnum-cluster-api
            checkout: main
            commit: 982096f635aa1001602fef75111e0599aaf5ed0b
        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: 8e1ebdffba02e651c399dacef841f8941f6ad6e4
          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: 982096f635aa1001602fef75111e0599aaf5ed0b
          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: f8a331a40eb21e6c8f37e07794d57aa98b120af9
          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: c84f0e05ce4b7c6afffa4616ae5f01711f2a7626
          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: 03ece8f88040be9b0b14dd1cfe93076ad2419a80
          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: 03dbf8eac63a35aa0207eba21a3c33e0aa51bb18
          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: 80d5b7bf50448073223723cf1f6001a367695e80
          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: 330321a64c846b5d4fa8b78d0fe1bcfe580413ce
          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: 62ec140173458b4f49ba05303628b2745cb34744
          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: 7e423793733cea025e662fbad4b6369431bf4419
          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: 43790bd32eaf86c5789e7c85c13873bead59611c
          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: c86b945c21b7d5d34cf13a4e9d52810d657682da
          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: a04e63332c1a1fb2f1aceb20892f9aabefb75cf7
          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: e3db398fba279721121892323e6260c6932797c1
          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: bfc9dbc2aa9a113c12e591a87f774a6d986a981f
          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: 954a2cc76030c7154969416f0cdfe1568f986c37
          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: d39b6b98fd989267e73064317d657d64bc3d63c3
          name: openstack/swift
          required: true
          short_name: swift
          src_dir: src/opendev.org/openstack/swift
      ref: refs/pull/983/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
