all:
  children:
    tempest:
      hosts:
        controller: null
    zuul_unreachable:
      hosts: {}
  hosts:
    controller:
      ansible_connection: ssh
      ansible_host: 162.253.55.84
      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_prefix: ubuntu-24.04
      image_release: 2026.05-7
      image_url: https://github.com/vexxhost/capo-image-elements/releases/download/{{
        image_release }}/{{ image_prefix }}-{{ kube_tag }}.qcow2
      kube_tag: v1.34.8
      network_driver: cilium
      nodepool:
        az: yul2
        cloud: public
        external_id: b55d9b59-7713-4862-8887-411226d23709
        host_id: 4dee82ca7e9988989d45ef8d027556c6c4153c7614b805253f80fa69
        interface_ip: 162.253.55.84
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 162.253.55.84
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.84
        public_ipv6: 2604:e100:1:0:f816:3eff:fe27:876d
        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: yul2
        cloud: public
        external_id: b55d9b59-7713-4862-8887-411226d23709
        host_id: 4dee82ca7e9988989d45ef8d027556c6c4153c7614b805253f80fa69
        interface_ip: 162.253.55.84
        label: ubuntu-noble-16
        node_properties: {}
        private_ipv4: 162.253.55.84
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.84
        public_ipv6: 2604:e100:1:0:f816:3eff:fe27:876d
        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_prefix: ubuntu-24.04
    image_release: 2026.05-7
    image_url: https://github.com/vexxhost/capo-image-elements/releases/download/{{
      image_release }}/{{ image_prefix }}-{{ kube_tag }}.qcow2
    kube_tag: v1.34.8
    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#378>'
      - '<Job devstack-minimal explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#512>'
      - '<Job devstack explicit: None implied: {MatchAny:{ImpliedBranchMatcher:master}}
        source: openstack/devstack/.zuul.yaml@master#555>'
      - '<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/hydrophone-jobs.yaml@main#23>'
      - '<Job magnum-cluster-api-hydrophone-v1.34.8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/magnum-cluster-api/zuul.d/hydrophone-jobs.yaml@main#51>'
      - '<Job magnum-cluster-api-hydrophone-v1.34.8-cilium explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/magnum-cluster-api/zuul.d/hydrophone-jobs.yaml@main#62>'
      - '<Job magnum-cluster-api-hydrophone-v1.34.8-cilium explicit: None implied:
        None source: vexxhost/magnum-cluster-api/zuul.d/hydrophone-jobs.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: d16f3723b9f44c8f84cb25b1c70a6cde
      build_refs:
      - branch: main
        change: '1147'
        change_message: 'feat: add composable cluster add-on profiles


          ## Summary


          - introduce the immutable `addon_profiles` cluster-template label as an
          ordered, composable selector list;

          - let each selector name either an ordinary profile or an immutable schema-version-1
          profile set;

          - expand sets once before dependency validation while rejecting collisions,
          nesting, incomplete sets, and overlapping selections;

          - persist one canonical contract snapshot and SHA-256 identity on the initial
          Cluster API Cluster;

          - preserve the existing four-field snapshot byte-for-byte when only ordinary
          profiles are selected, and record requested selectors plus set expansion
          only when a set is used;

          - activate dependency waves only after the prior wave has current-generation
          CAAPH readiness;

          - retain per-profile create and delete deadlines across controller restarts
          and use resource-version conflict retries;

          - remove add-ons in reverse dependency order with identity-scoped Continuous
          and InstallOnce handling;

          - preserve the existing create, status, and delete path when `addon_profiles`
          is unset; and

          - reject the superseded unmerged singular `addon_profile` spelling.


          The driver remains generic: profiles identify operator-published HelmChartProxy
          resources and do not embed hardware, operating-system, Kubernetes-version,
          or workload policy. Profile sets are selection metadata and own no Helm
          release or lifecycle gate.


          ## Compatibility


          - templates without `addon_profiles` do not read the profile ConfigMap and
          keep the existing readiness path;

          - existing ordinary-profile values retain their exact schema-version-1 snapshot
          bytes and digest;

          - a selector may name an ordinary profile or profile set, and mixed selections
          are expanded deterministically;

          - cluster-create labels cannot add, remove, reorder, or override the immutable
          template selection; and

          - reconcile and deletion use the persisted expanded snapshot rather than
          a later ConfigMap edit.


          ## Validation


          - 39 focused Python 3.10 profile lifecycle tests passed;

          - full pre-commit suite passed;

          - direct, set-only, and mixed installed-runtime resolution passed in an
          isolated Atmosphere environment;

          - overlap, incomplete dependency, and unknown selector cases failed before
          activation;

          - a fresh set-selected Kubernetes v1.34 cluster froze the requested set
          and exact two-profile expansion, installed storage and workspace HCP waves
          in dependency order, and reached `CREATE_COMPLETE` / `HEALTHY`;

          - the workload node became Ready, the workspace PVC bound through the selected
          storage profile, and the validation Job completed; and

          - no-profile compatibility remains covered by the existing driver tests.


          GitHub Actions, DCO, and the project test matrix are green. In the current
          Zuul buildset, Kubernetes v1.33 Calico/Cilium and v1.35 Calico passed; the
          remaining jobs stopped during DevStack setup when GitHub release metadata
          was empty or a Sonobuoy archive download was truncated, before profile-set
          lifecycle tests ran.


          ## Deployment contract


          Deployments publish immutable profile revisions, optional immutable profile
          sets, HelmChartProxy resources, and the `mcapi-addon-profiles` ConfigMap
          before a cluster template selects them. Existing templates and catalogs
          without `profileSets` require no deployment change.

          '
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1147
        commit_id: 54a93b9882c0759f3e951b470157655328a09f99
        patchset: 54a93b9882c0759f3e951b470157655328a09f99
        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: 0039ab08d1c14b9984677195ecf030ea
      buildset_refs:
      - branch: main
        change: '1147'
        change_message: 'feat: add composable cluster add-on profiles


          ## Summary


          - introduce the immutable `addon_profiles` cluster-template label as an
          ordered, composable selector list;

          - let each selector name either an ordinary profile or an immutable schema-version-1
          profile set;

          - expand sets once before dependency validation while rejecting collisions,
          nesting, incomplete sets, and overlapping selections;

          - persist one canonical contract snapshot and SHA-256 identity on the initial
          Cluster API Cluster;

          - preserve the existing four-field snapshot byte-for-byte when only ordinary
          profiles are selected, and record requested selectors plus set expansion
          only when a set is used;

          - activate dependency waves only after the prior wave has current-generation
          CAAPH readiness;

          - retain per-profile create and delete deadlines across controller restarts
          and use resource-version conflict retries;

          - remove add-ons in reverse dependency order with identity-scoped Continuous
          and InstallOnce handling;

          - preserve the existing create, status, and delete path when `addon_profiles`
          is unset; and

          - reject the superseded unmerged singular `addon_profile` spelling.


          The driver remains generic: profiles identify operator-published HelmChartProxy
          resources and do not embed hardware, operating-system, Kubernetes-version,
          or workload policy. Profile sets are selection metadata and own no Helm
          release or lifecycle gate.


          ## Compatibility


          - templates without `addon_profiles` do not read the profile ConfigMap and
          keep the existing readiness path;

          - existing ordinary-profile values retain their exact schema-version-1 snapshot
          bytes and digest;

          - a selector may name an ordinary profile or profile set, and mixed selections
          are expanded deterministically;

          - cluster-create labels cannot add, remove, reorder, or override the immutable
          template selection; and

          - reconcile and deletion use the persisted expanded snapshot rather than
          a later ConfigMap edit.


          ## Validation


          - 39 focused Python 3.10 profile lifecycle tests passed;

          - full pre-commit suite passed;

          - direct, set-only, and mixed installed-runtime resolution passed in an
          isolated Atmosphere environment;

          - overlap, incomplete dependency, and unknown selector cases failed before
          activation;

          - a fresh set-selected Kubernetes v1.34 cluster froze the requested set
          and exact two-profile expansion, installed storage and workspace HCP waves
          in dependency order, and reached `CREATE_COMPLETE` / `HEALTHY`;

          - the workload node became Ready, the workspace PVC bound through the selected
          storage profile, and the validation Job completed; and

          - no-profile compatibility remains covered by the existing driver tests.


          GitHub Actions, DCO, and the project test matrix are green. In the current
          Zuul buildset, Kubernetes v1.33 Calico/Cilium and v1.35 Calico passed; the
          remaining jobs stopped during DevStack setup when GitHub release metadata
          was empty or a Sonobuoy archive download was truncated, before profile-set
          lifecycle tests ran.


          ## Deployment contract


          Deployments publish immutable profile revisions, optional immutable profile
          sets, HelmChartProxy resources, and the `mcapi-addon-profiles` ConfigMap
          before a cluster template selects them. Existing templates and catalogs
          without `profileSets` require no deployment change.

          '
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1147
        commit_id: 54a93b9882c0759f3e951b470157655328a09f99
        patchset: 54a93b9882c0759f3e951b470157655328a09f99
        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: '1147'
      change_message: 'feat: add composable cluster add-on profiles


        ## Summary


        - introduce the immutable `addon_profiles` cluster-template label as an ordered,
        composable selector list;

        - let each selector name either an ordinary profile or an immutable schema-version-1
        profile set;

        - expand sets once before dependency validation while rejecting collisions,
        nesting, incomplete sets, and overlapping selections;

        - persist one canonical contract snapshot and SHA-256 identity on the initial
        Cluster API Cluster;

        - preserve the existing four-field snapshot byte-for-byte when only ordinary
        profiles are selected, and record requested selectors plus set expansion only
        when a set is used;

        - activate dependency waves only after the prior wave has current-generation
        CAAPH readiness;

        - retain per-profile create and delete deadlines across controller restarts
        and use resource-version conflict retries;

        - remove add-ons in reverse dependency order with identity-scoped Continuous
        and InstallOnce handling;

        - preserve the existing create, status, and delete path when `addon_profiles`
        is unset; and

        - reject the superseded unmerged singular `addon_profile` spelling.


        The driver remains generic: profiles identify operator-published HelmChartProxy
        resources and do not embed hardware, operating-system, Kubernetes-version,
        or workload policy. Profile sets are selection metadata and own no Helm release
        or lifecycle gate.


        ## Compatibility


        - templates without `addon_profiles` do not read the profile ConfigMap and
        keep the existing readiness path;

        - existing ordinary-profile values retain their exact schema-version-1 snapshot
        bytes and digest;

        - a selector may name an ordinary profile or profile set, and mixed selections
        are expanded deterministically;

        - cluster-create labels cannot add, remove, reorder, or override the immutable
        template selection; and

        - reconcile and deletion use the persisted expanded snapshot rather than a
        later ConfigMap edit.


        ## Validation


        - 39 focused Python 3.10 profile lifecycle tests passed;

        - full pre-commit suite passed;

        - direct, set-only, and mixed installed-runtime resolution passed in an isolated
        Atmosphere environment;

        - overlap, incomplete dependency, and unknown selector cases failed before
        activation;

        - a fresh set-selected Kubernetes v1.34 cluster froze the requested set and
        exact two-profile expansion, installed storage and workspace HCP waves in
        dependency order, and reached `CREATE_COMPLETE` / `HEALTHY`;

        - the workload node became Ready, the workspace PVC bound through the selected
        storage profile, and the validation Job completed; and

        - no-profile compatibility remains covered by the existing driver tests.


        GitHub Actions, DCO, and the project test matrix are green. In the current
        Zuul buildset, Kubernetes v1.33 Calico/Cilium and v1.35 Calico passed; the
        remaining jobs stopped during DevStack setup when GitHub release metadata
        was empty or a Sonobuoy archive download was truncated, before profile-set
        lifecycle tests ran.


        ## Deployment contract


        Deployments publish immutable profile revisions, optional immutable profile
        sets, HelmChartProxy resources, and the `mcapi-addon-profiles` ConfigMap before
        a cluster template selects them. Existing templates and catalogs without `profileSets`
        require no deployment change.

        '
      change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1147
      child_jobs: []
      commit_id: 54a93b9882c0759f3e951b470157655328a09f99
      event_id: fc5eaae0-a508-11f1-9bf8-a7fda2f899b5
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/d16f3723b9f44c8f84cb25b1c70a6cde/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/d16f3723b9f44c8f84cb25b1c70a6cde/work/logs
        result_data_file: /var/lib/zuul/builds/d16f3723b9f44c8f84cb25b1c70a6cde/work/results.json
        src_root: /var/lib/zuul/builds/d16f3723b9f44c8f84cb25b1c70a6cde/work/src
        work_root: /var/lib/zuul/builds/d16f3723b9f44c8f84cb25b1c70a6cde/work
      include_vars: []
      items:
      - branch: main
        change: '1147'
        change_message: 'feat: add composable cluster add-on profiles


          ## Summary


          - introduce the immutable `addon_profiles` cluster-template label as an
          ordered, composable selector list;

          - let each selector name either an ordinary profile or an immutable schema-version-1
          profile set;

          - expand sets once before dependency validation while rejecting collisions,
          nesting, incomplete sets, and overlapping selections;

          - persist one canonical contract snapshot and SHA-256 identity on the initial
          Cluster API Cluster;

          - preserve the existing four-field snapshot byte-for-byte when only ordinary
          profiles are selected, and record requested selectors plus set expansion
          only when a set is used;

          - activate dependency waves only after the prior wave has current-generation
          CAAPH readiness;

          - retain per-profile create and delete deadlines across controller restarts
          and use resource-version conflict retries;

          - remove add-ons in reverse dependency order with identity-scoped Continuous
          and InstallOnce handling;

          - preserve the existing create, status, and delete path when `addon_profiles`
          is unset; and

          - reject the superseded unmerged singular `addon_profile` spelling.


          The driver remains generic: profiles identify operator-published HelmChartProxy
          resources and do not embed hardware, operating-system, Kubernetes-version,
          or workload policy. Profile sets are selection metadata and own no Helm
          release or lifecycle gate.


          ## Compatibility


          - templates without `addon_profiles` do not read the profile ConfigMap and
          keep the existing readiness path;

          - existing ordinary-profile values retain their exact schema-version-1 snapshot
          bytes and digest;

          - a selector may name an ordinary profile or profile set, and mixed selections
          are expanded deterministically;

          - cluster-create labels cannot add, remove, reorder, or override the immutable
          template selection; and

          - reconcile and deletion use the persisted expanded snapshot rather than
          a later ConfigMap edit.


          ## Validation


          - 39 focused Python 3.10 profile lifecycle tests passed;

          - full pre-commit suite passed;

          - direct, set-only, and mixed installed-runtime resolution passed in an
          isolated Atmosphere environment;

          - overlap, incomplete dependency, and unknown selector cases failed before
          activation;

          - a fresh set-selected Kubernetes v1.34 cluster froze the requested set
          and exact two-profile expansion, installed storage and workspace HCP waves
          in dependency order, and reached `CREATE_COMPLETE` / `HEALTHY`;

          - the workload node became Ready, the workspace PVC bound through the selected
          storage profile, and the validation Job completed; and

          - no-profile compatibility remains covered by the existing driver tests.


          GitHub Actions, DCO, and the project test matrix are green. In the current
          Zuul buildset, Kubernetes v1.33 Calico/Cilium and v1.35 Calico passed; the
          remaining jobs stopped during DevStack setup when GitHub release metadata
          was empty or a Sonobuoy archive download was truncated, before profile-set
          lifecycle tests ran.


          ## Deployment contract


          Deployments publish immutable profile revisions, optional immutable profile
          sets, HelmChartProxy resources, and the `mcapi-addon-profiles` ConfigMap
          before a cluster template selects them. Existing templates and catalogs
          without `profileSets` require no deployment change.

          '
        change_url: https://github.com/vexxhost/magnum-cluster-api/pull/1147
        commit_id: 54a93b9882c0759f3e951b470157655328a09f99
        patchset: 54a93b9882c0759f3e951b470157655328a09f99
        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.34.8-cilium
      jobtags: []
      max_attempts: 3
      message: ZmVhdDogYWRkIGNvbXBvc2FibGUgY2x1c3RlciBhZGQtb24gcHJvZmlsZXMKCiMjIFN1bW1hcnkKCi0gaW50cm9kdWNlIHRoZSBpbW11dGFibGUgYGFkZG9uX3Byb2ZpbGVzYCBjbHVzdGVyLXRlbXBsYXRlIGxhYmVsIGFzIGFuIG9yZGVyZWQsIGNvbXBvc2FibGUgc2VsZWN0b3IgbGlzdDsKLSBsZXQgZWFjaCBzZWxlY3RvciBuYW1lIGVpdGhlciBhbiBvcmRpbmFyeSBwcm9maWxlIG9yIGFuIGltbXV0YWJsZSBzY2hlbWEtdmVyc2lvbi0xIHByb2ZpbGUgc2V0OwotIGV4cGFuZCBzZXRzIG9uY2UgYmVmb3JlIGRlcGVuZGVuY3kgdmFsaWRhdGlvbiB3aGlsZSByZWplY3RpbmcgY29sbGlzaW9ucywgbmVzdGluZywgaW5jb21wbGV0ZSBzZXRzLCBhbmQgb3ZlcmxhcHBpbmcgc2VsZWN0aW9uczsKLSBwZXJzaXN0IG9uZSBjYW5vbmljYWwgY29udHJhY3Qgc25hcHNob3QgYW5kIFNIQS0yNTYgaWRlbnRpdHkgb24gdGhlIGluaXRpYWwgQ2x1c3RlciBBUEkgQ2x1c3RlcjsKLSBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgZm91ci1maWVsZCBzbmFwc2hvdCBieXRlLWZvci1ieXRlIHdoZW4gb25seSBvcmRpbmFyeSBwcm9maWxlcyBhcmUgc2VsZWN0ZWQsIGFuZCByZWNvcmQgcmVxdWVzdGVkIHNlbGVjdG9ycyBwbHVzIHNldCBleHBhbnNpb24gb25seSB3aGVuIGEgc2V0IGlzIHVzZWQ7Ci0gYWN0aXZhdGUgZGVwZW5kZW5jeSB3YXZlcyBvbmx5IGFmdGVyIHRoZSBwcmlvciB3YXZlIGhhcyBjdXJyZW50LWdlbmVyYXRpb24gQ0FBUEggcmVhZGluZXNzOwotIHJldGFpbiBwZXItcHJvZmlsZSBjcmVhdGUgYW5kIGRlbGV0ZSBkZWFkbGluZXMgYWNyb3NzIGNvbnRyb2xsZXIgcmVzdGFydHMgYW5kIHVzZSByZXNvdXJjZS12ZXJzaW9uIGNvbmZsaWN0IHJldHJpZXM7Ci0gcmVtb3ZlIGFkZC1vbnMgaW4gcmV2ZXJzZSBkZXBlbmRlbmN5IG9yZGVyIHdpdGggaWRlbnRpdHktc2NvcGVkIENvbnRpbnVvdXMgYW5kIEluc3RhbGxPbmNlIGhhbmRsaW5nOwotIHByZXNlcnZlIHRoZSBleGlzdGluZyBjcmVhdGUsIHN0YXR1cywgYW5kIGRlbGV0ZSBwYXRoIHdoZW4gYGFkZG9uX3Byb2ZpbGVzYCBpcyB1bnNldDsgYW5kCi0gcmVqZWN0IHRoZSBzdXBlcnNlZGVkIHVubWVyZ2VkIHNpbmd1bGFyIGBhZGRvbl9wcm9maWxlYCBzcGVsbGluZy4KClRoZSBkcml2ZXIgcmVtYWlucyBnZW5lcmljOiBwcm9maWxlcyBpZGVudGlmeSBvcGVyYXRvci1wdWJsaXNoZWQgSGVsbUNoYXJ0UHJveHkgcmVzb3VyY2VzIGFuZCBkbyBub3QgZW1iZWQgaGFyZHdhcmUsIG9wZXJhdGluZy1zeXN0ZW0sIEt1YmVybmV0ZXMtdmVyc2lvbiwgb3Igd29ya2xvYWQgcG9saWN5LiBQcm9maWxlIHNldHMgYXJlIHNlbGVjdGlvbiBtZXRhZGF0YSBhbmQgb3duIG5vIEhlbG0gcmVsZWFzZSBvciBsaWZlY3ljbGUgZ2F0ZS4KCiMjIENvbXBhdGliaWxpdHkKCi0gdGVtcGxhdGVzIHdpdGhvdXQgYGFkZG9uX3Byb2ZpbGVzYCBkbyBub3QgcmVhZCB0aGUgcHJvZmlsZSBDb25maWdNYXAgYW5kIGtlZXAgdGhlIGV4aXN0aW5nIHJlYWRpbmVzcyBwYXRoOwotIGV4aXN0aW5nIG9yZGluYXJ5LXByb2ZpbGUgdmFsdWVzIHJldGFpbiB0aGVpciBleGFjdCBzY2hlbWEtdmVyc2lvbi0xIHNuYXBzaG90IGJ5dGVzIGFuZCBkaWdlc3Q7Ci0gYSBzZWxlY3RvciBtYXkgbmFtZSBhbiBvcmRpbmFyeSBwcm9maWxlIG9yIHByb2ZpbGUgc2V0LCBhbmQgbWl4ZWQgc2VsZWN0aW9ucyBhcmUgZXhwYW5kZWQgZGV0ZXJtaW5pc3RpY2FsbHk7Ci0gY2x1c3Rlci1jcmVhdGUgbGFiZWxzIGNhbm5vdCBhZGQsIHJlbW92ZSwgcmVvcmRlciwgb3Igb3ZlcnJpZGUgdGhlIGltbXV0YWJsZSB0ZW1wbGF0ZSBzZWxlY3Rpb247IGFuZAotIHJlY29uY2lsZSBhbmQgZGVsZXRpb24gdXNlIHRoZSBwZXJzaXN0ZWQgZXhwYW5kZWQgc25hcHNob3QgcmF0aGVyIHRoYW4gYSBsYXRlciBDb25maWdNYXAgZWRpdC4KCiMjIFZhbGlkYXRpb24KCi0gMzkgZm9jdXNlZCBQeXRob24gMy4xMCBwcm9maWxlIGxpZmVjeWNsZSB0ZXN0cyBwYXNzZWQ7Ci0gZnVsbCBwcmUtY29tbWl0IHN1aXRlIHBhc3NlZDsKLSBkaXJlY3QsIHNldC1vbmx5LCBhbmQgbWl4ZWQgaW5zdGFsbGVkLXJ1bnRpbWUgcmVzb2x1dGlvbiBwYXNzZWQgaW4gYW4gaXNvbGF0ZWQgQXRtb3NwaGVyZSBlbnZpcm9ubWVudDsKLSBvdmVybGFwLCBpbmNvbXBsZXRlIGRlcGVuZGVuY3ksIGFuZCB1bmtub3duIHNlbGVjdG9yIGNhc2VzIGZhaWxlZCBiZWZvcmUgYWN0aXZhdGlvbjsKLSBhIGZyZXNoIHNldC1zZWxlY3RlZCBLdWJlcm5ldGVzIHYxLjM0IGNsdXN0ZXIgZnJvemUgdGhlIHJlcXVlc3RlZCBzZXQgYW5kIGV4YWN0IHR3by1wcm9maWxlIGV4cGFuc2lvbiwgaW5zdGFsbGVkIHN0b3JhZ2UgYW5kIHdvcmtzcGFjZSBIQ1Agd2F2ZXMgaW4gZGVwZW5kZW5jeSBvcmRlciwgYW5kIHJlYWNoZWQgYENSRUFURV9DT01QTEVURWAgLyBgSEVBTFRIWWA7Ci0gdGhlIHdvcmtsb2FkIG5vZGUgYmVjYW1lIFJlYWR5LCB0aGUgd29ya3NwYWNlIFBWQyBib3VuZCB0aHJvdWdoIHRoZSBzZWxlY3RlZCBzdG9yYWdlIHByb2ZpbGUsIGFuZCB0aGUgdmFsaWRhdGlvbiBKb2IgY29tcGxldGVkOyBhbmQKLSBuby1wcm9maWxlIGNvbXBhdGliaWxpdHkgcmVtYWlucyBjb3ZlcmVkIGJ5IHRoZSBleGlzdGluZyBkcml2ZXIgdGVzdHMuCgpHaXRIdWIgQWN0aW9ucywgRENPLCBhbmQgdGhlIHByb2plY3QgdGVzdCBtYXRyaXggYXJlIGdyZWVuLiBJbiB0aGUgY3VycmVudCBadXVsIGJ1aWxkc2V0LCBLdWJlcm5ldGVzIHYxLjMzIENhbGljby9DaWxpdW0gYW5kIHYxLjM1IENhbGljbyBwYXNzZWQ7IHRoZSByZW1haW5pbmcgam9icyBzdG9wcGVkIGR1cmluZyBEZXZTdGFjayBzZXR1cCB3aGVuIEdpdEh1YiByZWxlYXNlIG1ldGFkYXRhIHdhcyBlbXB0eSBvciBhIFNvbm9idW95IGFyY2hpdmUgZG93bmxvYWQgd2FzIHRydW5jYXRlZCwgYmVmb3JlIHByb2ZpbGUtc2V0IGxpZmVjeWNsZSB0ZXN0cyByYW4uCgojIyBEZXBsb3ltZW50IGNvbnRyYWN0CgpEZXBsb3ltZW50cyBwdWJsaXNoIGltbXV0YWJsZSBwcm9maWxlIHJldmlzaW9ucywgb3B0aW9uYWwgaW1tdXRhYmxlIHByb2ZpbGUgc2V0cywgSGVsbUNoYXJ0UHJveHkgcmVzb3VyY2VzLCBhbmQgdGhlIGBtY2FwaS1hZGRvbi1wcm9maWxlc2AgQ29uZmlnTWFwIGJlZm9yZSBhIGNsdXN0ZXIgdGVtcGxhdGUgc2VsZWN0cyB0aGVtLiBFeGlzdGluZyB0ZW1wbGF0ZXMgYW5kIGNhdGFsb2dzIHdpdGhvdXQgYHByb2ZpbGVTZXRzYCByZXF1aXJlIG5vIGRlcGxveW1lbnQgY2hhbmdlLgo=
      override_checkout: master
      patchset: 54a93b9882c0759f3e951b470157655328a09f99
      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: a05b0fb6ac6a681e93e59e18661eadc80ed996f8
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
          untrusted/project_0/opendev.org/openstack/devstack:
            canonical_name: opendev.org/openstack/devstack
            checkout: master
            commit: 9b0a00865c2537338f72ed5b9b44a0d6bff16eb4
          untrusted/project_1/opendev.org/openstack/openstack-zuul-jobs:
            canonical_name: opendev.org/openstack/openstack-zuul-jobs
            checkout: master
            commit: 7034a45c416d30a350109d93bfb2457e6fa75618
          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: a05b0fb6ac6a681e93e59e18661eadc80ed996f8
          untrusted/project_4/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
          untrusted/project_5/github.com/vexxhost/magnum-cluster-api:
            canonical_name: github.com/vexxhost/magnum-cluster-api
            checkout: main
            commit: 54a93b9882c0759f3e951b470157655328a09f99
        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: ac861f9e280b015569c4b1c3999516d9c0fa35c3
          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: 54a93b9882c0759f3e951b470157655328a09f99
          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: 1014ec1ac035564c79df179486f27b9fd57df768
          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: f4c563acfd95790394f2a1d2277fa0724bd8736d
          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: 9b0a00865c2537338f72ed5b9b44a0d6bff16eb4
          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: 602b6d70307596290f77a8a533f8531d9cd4534a
          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: 16afc813b7e6de727d8a91e065d7824b06e32925
          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: 23a43e879d5ea72e80f211212567450fe60805d5
          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: 560591d92d0091748a200c348a52b0af4352d569
          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: 2475d0380ebc75b5eb6f1495f2b9a0fcc477985b
          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: 445fc2db215e79810ee8ddec00939e88eb41fd03
          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: fbc4af60a9dfa922343e0f86f0541b4971c1b908
          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: 91aba16490ea0de6df81528464b2705b51e41537
          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: 7d35f974d52fdbb457ff2b6b7bff3741165dd30d
          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: 43fc0de28fc0f334a2f8b452ef1ab567e57470b4
          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: b9e908e228b5fc554b55ede5460dcd06f1cad7c4
          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: 4ff57666f016d4054a46dc2dcaa3ca2ad7ed4766
          name: openstack/swift
          required: true
          short_name: swift
          src_dir: src/opendev.org/openstack/swift
      ref: refs/pull/1147/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
