all:
  children:
    cephs:
      hosts:
        instance: null
    computes:
      hosts:
        instance: null
    controllers:
      hosts:
        instance: null
    zuul_unreachable:
      hosts: {}
  hosts:
    instance:
      ansible_connection: ssh
      ansible_host: 162.253.55.108
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      atmosphere_image_mirrors:
      - mirror: atmosphere-ci-registry:5443
        source: atmosphere-ci-registry:5443
      atmosphere_image_prefix: harbor.atmosphere.dev/
      atmosphere_release_manifest: atmosphere-ci-registry:5443/vexxhost/atmosphere-release:ci
      atmosphere_release_manifest_ca_file: /usr/local/share/ca-certificates/atmosphere-ci-registry.crt
      atmosphere_release_manifest_digest: sha256:34365cf27c2dcbb1765dc5aacc37fd0a19dd3b20dfceec5e09c2479e4cdd8749
      ceph_conf_overrides:
      - option: mon allow pool size one
        section: global
        value: true
      - option: osd crush chooseleaf type
        section: global
        value: 0
      - option: auth allow insecure global id reclaim
        section: mon
        value: false
      ceph_csi_rbd_helm_values:
        provisioner:
          replicaCount: 1
      ceph_fsid: 4837cbf8-4f90-4300-b3f6-726c9b9f89b4
      ceph_osd_devices:
      - /dev/ceph-{{ inventory_hostname_short }}-osd0/data
      - /dev/ceph-{{ inventory_hostname_short }}-osd1/data
      - /dev/ceph-{{ inventory_hostname_short }}-osd2/data
      cilium_helm_values:
        operator:
          replicas: 1
      cluster_issuer_type: self-signed
      csi_driver: local-path-provisioner
      ingress_nginx_helm_values:
        controller:
          config:
            worker-processes: 2
      keystone_helm_values:
        pod:
          replicas:
            api: 1
      kube_vip_address: 172.17.0.100
      kube_vip_interface: '{{ ansible_facts[''default_ipv4''].interface }}'
      kubernetes_hostname: '{{ ansible_facts[''default_ipv4''].address }}'
      molecule_install_collection_siblings: true
      molecule_scenario: keycloak
      nodepool:
        az: yul2
        cloud: public
        external_id: 0d9a24a6-5313-4014-bf8e-5b350550378d
        host_id: c3e8ca29246a1ecab67f48b7a3961d6a6b6d42e4a1646ddd3e849c9c
        interface_ip: 162.253.55.108
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.108
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.108
        public_ipv6: 2604:e100:1:0:f816:3eff:feb6:e0f1
        region: ca-ymq-1
        slot: null
      percona_xtradb_cluster_spec:
        allowUnsafeConfigurations: true
        haproxy:
          size: 1
        pxc:
          size: 1
      zuul_node:
        az: yul2
        cloud: public
        external_id: 0d9a24a6-5313-4014-bf8e-5b350550378d
        host_id: c3e8ca29246a1ecab67f48b7a3961d6a6b6d42e4a1646ddd3e849c9c
        interface_ip: 162.253.55.108
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.108
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.108
        public_ipv6: 2604:e100:1:0:f816:3eff:feb6:e0f1
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    atmosphere_image_mirrors:
    - mirror: atmosphere-ci-registry:5443
      source: atmosphere-ci-registry:5443
    atmosphere_image_prefix: harbor.atmosphere.dev/
    atmosphere_release_manifest: atmosphere-ci-registry:5443/vexxhost/atmosphere-release:ci
    atmosphere_release_manifest_ca_file: /usr/local/share/ca-certificates/atmosphere-ci-registry.crt
    atmosphere_release_manifest_digest: sha256:34365cf27c2dcbb1765dc5aacc37fd0a19dd3b20dfceec5e09c2479e4cdd8749
    ceph_conf_overrides:
    - option: mon allow pool size one
      section: global
      value: true
    - option: osd crush chooseleaf type
      section: global
      value: 0
    - option: auth allow insecure global id reclaim
      section: mon
      value: false
    ceph_csi_rbd_helm_values:
      provisioner:
        replicaCount: 1
    ceph_fsid: 4837cbf8-4f90-4300-b3f6-726c9b9f89b4
    ceph_osd_devices:
    - /dev/ceph-{{ inventory_hostname_short }}-osd0/data
    - /dev/ceph-{{ inventory_hostname_short }}-osd1/data
    - /dev/ceph-{{ inventory_hostname_short }}-osd2/data
    cilium_helm_values:
      operator:
        replicas: 1
    cluster_issuer_type: self-signed
    csi_driver: local-path-provisioner
    ingress_nginx_helm_values:
      controller:
        config:
          worker-processes: 2
    keystone_helm_values:
      pod:
        replicas:
          api: 1
    kube_vip_address: 172.17.0.100
    kube_vip_interface: '{{ ansible_facts[''default_ipv4''].interface }}'
    kubernetes_hostname: '{{ ansible_facts[''default_ipv4''].address }}'
    molecule_install_collection_siblings: true
    molecule_scenario: keycloak
    percona_xtradb_cluster_spec:
      allowUnsafeConfigurations: true
      haproxy:
        size: 1
      pxc:
        size: 1
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/zuul-config/zuul.d/jobs.yaml@main#1>'
      - '<Job molecule explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/zuul-jobs/zuul.d/ansible-jobs.yaml@main#1>'
      - '<Job atmosphere-molecule explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/atmosphere-zuul-jobs/zuul.d/jobs.yaml@main#19>'
      - '<Job atmosphere-molecule-keycloak explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/atmosphere-zuul-jobs/zuul.d/jobs.yaml@main#303>'
      - '<Job atmosphere-molecule-keycloak explicit: None implied: None source: vexxhost/atmosphere-zuul-jobs/zuul.d/project-templates.yaml@main#1>'
      ansible_version: '9'
      artifacts:
      - branch: main
        change: '4232'
        job: atmosphere-release-manifest
        metadata:
          type: zuul_manifest
        name: Zuul Manifest
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/a7c/oss/a7caaeb9cafa485f93155df3c0db4628/zuul-manifest.json
      - branch: main
        change: '4232'
        job: atmosphere-release-manifest
        metadata:
          digest: sha256:34365cf27c2dcbb1765dc5aacc37fd0a19dd3b20dfceec5e09c2479e4cdd8749
        name: Release manifest
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/a7c/oss/a7caaeb9cafa485f93155df3c0db4628/release-manifest.yaml
      - branch: main
        change: '4232'
        job: atmosphere-release-manifest
        name: atmosphere-release
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/a7c/oss/a7caaeb9cafa485f93155df3c0db4628/atmosphere-release
      attempts: 1
      branch: main
      build: 2e21eb8ad667481db727fe1111a1cdc3
      build_refs:
      - branch: main
        change: '4232'
        change_message: 'feat(ironic): enable locked-down bare metal graphical consoles


          Bare metal nodes get the same browser-based graphical console that VMs have,
          enabled by default whenever the Ironic role is deployed. This folds the
          former stack (#4233, #4236, #4239) into one PR.


          When a console is opened, ironic-conductor uses Ironic''s Kubernetes console
          provider to start a short-lived Pod running the console image, which signs
          in to the BMC''s web console (Dell iDRAC, HPE iLO, Supermicro) and serves
          it over VNC. Users open consoles for bare metal instances through Nova (`openstack
          console url show --novnc`), using the existing public `nova-novncproxy`.
          `ironic-novncproxy` runs as an internal service only, so no new Ingress,
          hostname or DNS record is needed.


          ## What it deploys


          - `ironic-novncproxy` Deployment and Service (internal), serving the noVNC
          files shipped in the Ironic image

          - the `openstack-ironic-vnc` namespace as a chart resource, plus a Role/RoleBinding
          so ironic-conductor can create and delete console Pods and Secrets only
          there

          - `kubectl` for the Kubernetes provider comes from the Ironic image (vexxhost/docker-ironic#1631
          on main, #1632 on stable/2026.1)

          - `[vnc]` config with the console image from the image catalog, and `redfish-graphical`
          added to the enabled console interfaces

          - ingress NetworkPolicy so only `ironic-novncproxy` and `nova-novncproxy`
          reach the console Pods on 5900


          ## Console Pod lockdown


          - namespace enforces the `restricted` Pod Security Standard

          - scheduled on control plane nodes (`openstack-control-plane=enabled`),
          like the rest of the chart

          - runs as uid 42424, `runAsNonRoot`, no privilege escalation, all capabilities
          dropped, `RuntimeDefault` seccomp

          - no service account token

          - the console NetworkPolicy allows egress only to kube-dns and TCP 80/443,
          so the Pods can reach the BMC but not the Kubernetes API, kubelet, etcd,
          databases, RabbitMQ or internal OpenStack APIs


          There are no role variables for the feature. The console manifests default
          to on in the chart and render only when `[vnc] enabled` is set, so the role
          only sets the `[vnc]` options. The chart''s values are still reachable through
          `ironic_helm_values`.


          ## Still to do before merge


          - pin `ironic_console` in `roles/defaults/vars/main.yml` once `ghcr.io/vexxhost/ironic-console`
          (vexxhost/docker-ironic-console) publishes its first build

          - test on a lab node with a Redfish BMC; Zuul does not deploy Ironic


          ## Requirements


          Ironic and Nova 2026.1 or later (Kubernetes console provider and Nova''s
          Ironic VNC driver). Nova''s `nova-compute-ironic` stays opt-in through `nova_helm_values.manifests.statefulset_compute_ironic`;
          Nova now waits 120 seconds for a bare metal console, matching Ironic''s
          console Pod start timeout.


          Docs: `doc/source/admin/baremetal/` (deploying Ironic in the index, consoles
          in `console.rst`).

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          name: vexxhost/atmosphere
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
        src_dir: src/github.com/vexxhost/atmosphere
        topic: null
      buildset: 19ee6298d7ea45fa8fac80a0d4ed4731
      buildset_refs:
      - branch: main
        change: '4232'
        change_message: 'feat(ironic): enable locked-down bare metal graphical consoles


          Bare metal nodes get the same browser-based graphical console that VMs have,
          enabled by default whenever the Ironic role is deployed. This folds the
          former stack (#4233, #4236, #4239) into one PR.


          When a console is opened, ironic-conductor uses Ironic''s Kubernetes console
          provider to start a short-lived Pod running the console image, which signs
          in to the BMC''s web console (Dell iDRAC, HPE iLO, Supermicro) and serves
          it over VNC. Users open consoles for bare metal instances through Nova (`openstack
          console url show --novnc`), using the existing public `nova-novncproxy`.
          `ironic-novncproxy` runs as an internal service only, so no new Ingress,
          hostname or DNS record is needed.


          ## What it deploys


          - `ironic-novncproxy` Deployment and Service (internal), serving the noVNC
          files shipped in the Ironic image

          - the `openstack-ironic-vnc` namespace as a chart resource, plus a Role/RoleBinding
          so ironic-conductor can create and delete console Pods and Secrets only
          there

          - `kubectl` for the Kubernetes provider comes from the Ironic image (vexxhost/docker-ironic#1631
          on main, #1632 on stable/2026.1)

          - `[vnc]` config with the console image from the image catalog, and `redfish-graphical`
          added to the enabled console interfaces

          - ingress NetworkPolicy so only `ironic-novncproxy` and `nova-novncproxy`
          reach the console Pods on 5900


          ## Console Pod lockdown


          - namespace enforces the `restricted` Pod Security Standard

          - scheduled on control plane nodes (`openstack-control-plane=enabled`),
          like the rest of the chart

          - runs as uid 42424, `runAsNonRoot`, no privilege escalation, all capabilities
          dropped, `RuntimeDefault` seccomp

          - no service account token

          - the console NetworkPolicy allows egress only to kube-dns and TCP 80/443,
          so the Pods can reach the BMC but not the Kubernetes API, kubelet, etcd,
          databases, RabbitMQ or internal OpenStack APIs


          There are no role variables for the feature. The console manifests default
          to on in the chart and render only when `[vnc] enabled` is set, so the role
          only sets the `[vnc]` options. The chart''s values are still reachable through
          `ironic_helm_values`.


          ## Still to do before merge


          - pin `ironic_console` in `roles/defaults/vars/main.yml` once `ghcr.io/vexxhost/ironic-console`
          (vexxhost/docker-ironic-console) publishes its first build

          - test on a lab node with a Redfish BMC; Zuul does not deploy Ironic


          ## Requirements


          Ironic and Nova 2026.1 or later (Kubernetes console provider and Nova''s
          Ironic VNC driver). Nova''s `nova-compute-ironic` stays opt-in through `nova_helm_values.manifests.statefulset_compute_ironic`;
          Nova now waits 120 seconds for a bare metal console, matching Ironic''s
          console Pod start timeout.


          Docs: `doc/source/admin/baremetal/` (deploying Ironic in the index, consoles
          in `console.rst`).

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          name: vexxhost/atmosphere
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
        src_dir: src/github.com/vexxhost/atmosphere
        topic: null
      change: '4232'
      change_message: 'feat(ironic): enable locked-down bare metal graphical consoles


        Bare metal nodes get the same browser-based graphical console that VMs have,
        enabled by default whenever the Ironic role is deployed. This folds the former
        stack (#4233, #4236, #4239) into one PR.


        When a console is opened, ironic-conductor uses Ironic''s Kubernetes console
        provider to start a short-lived Pod running the console image, which signs
        in to the BMC''s web console (Dell iDRAC, HPE iLO, Supermicro) and serves
        it over VNC. Users open consoles for bare metal instances through Nova (`openstack
        console url show --novnc`), using the existing public `nova-novncproxy`. `ironic-novncproxy`
        runs as an internal service only, so no new Ingress, hostname or DNS record
        is needed.


        ## What it deploys


        - `ironic-novncproxy` Deployment and Service (internal), serving the noVNC
        files shipped in the Ironic image

        - the `openstack-ironic-vnc` namespace as a chart resource, plus a Role/RoleBinding
        so ironic-conductor can create and delete console Pods and Secrets only there

        - `kubectl` for the Kubernetes provider comes from the Ironic image (vexxhost/docker-ironic#1631
        on main, #1632 on stable/2026.1)

        - `[vnc]` config with the console image from the image catalog, and `redfish-graphical`
        added to the enabled console interfaces

        - ingress NetworkPolicy so only `ironic-novncproxy` and `nova-novncproxy`
        reach the console Pods on 5900


        ## Console Pod lockdown


        - namespace enforces the `restricted` Pod Security Standard

        - scheduled on control plane nodes (`openstack-control-plane=enabled`), like
        the rest of the chart

        - runs as uid 42424, `runAsNonRoot`, no privilege escalation, all capabilities
        dropped, `RuntimeDefault` seccomp

        - no service account token

        - the console NetworkPolicy allows egress only to kube-dns and TCP 80/443,
        so the Pods can reach the BMC but not the Kubernetes API, kubelet, etcd, databases,
        RabbitMQ or internal OpenStack APIs


        There are no role variables for the feature. The console manifests default
        to on in the chart and render only when `[vnc] enabled` is set, so the role
        only sets the `[vnc]` options. The chart''s values are still reachable through
        `ironic_helm_values`.


        ## Still to do before merge


        - pin `ironic_console` in `roles/defaults/vars/main.yml` once `ghcr.io/vexxhost/ironic-console`
        (vexxhost/docker-ironic-console) publishes its first build

        - test on a lab node with a Redfish BMC; Zuul does not deploy Ironic


        ## Requirements


        Ironic and Nova 2026.1 or later (Kubernetes console provider and Nova''s Ironic
        VNC driver). Nova''s `nova-compute-ironic` stays opt-in through `nova_helm_values.manifests.statefulset_compute_ironic`;
        Nova now waits 120 seconds for a bare metal console, matching Ironic''s console
        Pod start timeout.


        Docs: `doc/source/admin/baremetal/` (deploying Ironic in the index, consoles
        in `console.rst`).

        '
      change_url: https://github.com/vexxhost/atmosphere/pull/4232
      child_jobs: []
      commit_id: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
      event_id: 56405230-d154-11f1-8614-92f2fe7d11a9
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/2e21eb8ad667481db727fe1111a1cdc3/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/2e21eb8ad667481db727fe1111a1cdc3/work/logs
        result_data_file: /var/lib/zuul/builds/2e21eb8ad667481db727fe1111a1cdc3/work/results.json
        src_root: /var/lib/zuul/builds/2e21eb8ad667481db727fe1111a1cdc3/work/src
        work_root: /var/lib/zuul/builds/2e21eb8ad667481db727fe1111a1cdc3/work
      include_vars: []
      items:
      - branch: main
        change: '4232'
        change_message: 'feat(ironic): enable locked-down bare metal graphical consoles


          Bare metal nodes get the same browser-based graphical console that VMs have,
          enabled by default whenever the Ironic role is deployed. This folds the
          former stack (#4233, #4236, #4239) into one PR.


          When a console is opened, ironic-conductor uses Ironic''s Kubernetes console
          provider to start a short-lived Pod running the console image, which signs
          in to the BMC''s web console (Dell iDRAC, HPE iLO, Supermicro) and serves
          it over VNC. Users open consoles for bare metal instances through Nova (`openstack
          console url show --novnc`), using the existing public `nova-novncproxy`.
          `ironic-novncproxy` runs as an internal service only, so no new Ingress,
          hostname or DNS record is needed.


          ## What it deploys


          - `ironic-novncproxy` Deployment and Service (internal), serving the noVNC
          files shipped in the Ironic image

          - the `openstack-ironic-vnc` namespace as a chart resource, plus a Role/RoleBinding
          so ironic-conductor can create and delete console Pods and Secrets only
          there

          - `kubectl` for the Kubernetes provider comes from the Ironic image (vexxhost/docker-ironic#1631
          on main, #1632 on stable/2026.1)

          - `[vnc]` config with the console image from the image catalog, and `redfish-graphical`
          added to the enabled console interfaces

          - ingress NetworkPolicy so only `ironic-novncproxy` and `nova-novncproxy`
          reach the console Pods on 5900


          ## Console Pod lockdown


          - namespace enforces the `restricted` Pod Security Standard

          - scheduled on control plane nodes (`openstack-control-plane=enabled`),
          like the rest of the chart

          - runs as uid 42424, `runAsNonRoot`, no privilege escalation, all capabilities
          dropped, `RuntimeDefault` seccomp

          - no service account token

          - the console NetworkPolicy allows egress only to kube-dns and TCP 80/443,
          so the Pods can reach the BMC but not the Kubernetes API, kubelet, etcd,
          databases, RabbitMQ or internal OpenStack APIs


          There are no role variables for the feature. The console manifests default
          to on in the chart and render only when `[vnc] enabled` is set, so the role
          only sets the `[vnc]` options. The chart''s values are still reachable through
          `ironic_helm_values`.


          ## Still to do before merge


          - pin `ironic_console` in `roles/defaults/vars/main.yml` once `ghcr.io/vexxhost/ironic-console`
          (vexxhost/docker-ironic-console) publishes its first build

          - test on a lab node with a Redfish BMC; Zuul does not deploy Ironic


          ## Requirements


          Ironic and Nova 2026.1 or later (Kubernetes console provider and Nova''s
          Ironic VNC driver). Nova''s `nova-compute-ironic` stays opt-in through `nova_helm_values.manifests.statefulset_compute_ironic`;
          Nova now waits 120 seconds for a bare metal console, matching Ironic''s
          console Pod start timeout.


          Docs: `doc/source/admin/baremetal/` (deploying Ironic in the index, consoles
          in `console.rst`).

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          name: vexxhost/atmosphere
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
        topic: null
      job: atmosphere-molecule-keycloak
      jobtags: []
      max_attempts: 3
      message: ZmVhdChpcm9uaWMpOiBlbmFibGUgbG9ja2VkLWRvd24gYmFyZSBtZXRhbCBncmFwaGljYWwgY29uc29sZXMKCkJhcmUgbWV0YWwgbm9kZXMgZ2V0IHRoZSBzYW1lIGJyb3dzZXItYmFzZWQgZ3JhcGhpY2FsIGNvbnNvbGUgdGhhdCBWTXMgaGF2ZSwgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBJcm9uaWMgcm9sZSBpcyBkZXBsb3llZC4gVGhpcyBmb2xkcyB0aGUgZm9ybWVyIHN0YWNrICgjNDIzMywgIzQyMzYsICM0MjM5KSBpbnRvIG9uZSBQUi4KCldoZW4gYSBjb25zb2xlIGlzIG9wZW5lZCwgaXJvbmljLWNvbmR1Y3RvciB1c2VzIElyb25pYydzIEt1YmVybmV0ZXMgY29uc29sZSBwcm92aWRlciB0byBzdGFydCBhIHNob3J0LWxpdmVkIFBvZCBydW5uaW5nIHRoZSBjb25zb2xlIGltYWdlLCB3aGljaCBzaWducyBpbiB0byB0aGUgQk1DJ3Mgd2ViIGNvbnNvbGUgKERlbGwgaURSQUMsIEhQRSBpTE8sIFN1cGVybWljcm8pIGFuZCBzZXJ2ZXMgaXQgb3ZlciBWTkMuIFVzZXJzIG9wZW4gY29uc29sZXMgZm9yIGJhcmUgbWV0YWwgaW5zdGFuY2VzIHRocm91Z2ggTm92YSAoYG9wZW5zdGFjayBjb25zb2xlIHVybCBzaG93IC0tbm92bmNgKSwgdXNpbmcgdGhlIGV4aXN0aW5nIHB1YmxpYyBgbm92YS1ub3ZuY3Byb3h5YC4gYGlyb25pYy1ub3ZuY3Byb3h5YCBydW5zIGFzIGFuIGludGVybmFsIHNlcnZpY2Ugb25seSwgc28gbm8gbmV3IEluZ3Jlc3MsIGhvc3RuYW1lIG9yIEROUyByZWNvcmQgaXMgbmVlZGVkLgoKIyMgV2hhdCBpdCBkZXBsb3lzCgotIGBpcm9uaWMtbm92bmNwcm94eWAgRGVwbG95bWVudCBhbmQgU2VydmljZSAoaW50ZXJuYWwpLCBzZXJ2aW5nIHRoZSBub1ZOQyBmaWxlcyBzaGlwcGVkIGluIHRoZSBJcm9uaWMgaW1hZ2UKLSB0aGUgYG9wZW5zdGFjay1pcm9uaWMtdm5jYCBuYW1lc3BhY2UgYXMgYSBjaGFydCByZXNvdXJjZSwgcGx1cyBhIFJvbGUvUm9sZUJpbmRpbmcgc28gaXJvbmljLWNvbmR1Y3RvciBjYW4gY3JlYXRlIGFuZCBkZWxldGUgY29uc29sZSBQb2RzIGFuZCBTZWNyZXRzIG9ubHkgdGhlcmUKLSBga3ViZWN0bGAgZm9yIHRoZSBLdWJlcm5ldGVzIHByb3ZpZGVyIGNvbWVzIGZyb20gdGhlIElyb25pYyBpbWFnZSAodmV4eGhvc3QvZG9ja2VyLWlyb25pYyMxNjMxIG9uIG1haW4sICMxNjMyIG9uIHN0YWJsZS8yMDI2LjEpCi0gYFt2bmNdYCBjb25maWcgd2l0aCB0aGUgY29uc29sZSBpbWFnZSBmcm9tIHRoZSBpbWFnZSBjYXRhbG9nLCBhbmQgYHJlZGZpc2gtZ3JhcGhpY2FsYCBhZGRlZCB0byB0aGUgZW5hYmxlZCBjb25zb2xlIGludGVyZmFjZXMKLSBpbmdyZXNzIE5ldHdvcmtQb2xpY3kgc28gb25seSBgaXJvbmljLW5vdm5jcHJveHlgIGFuZCBgbm92YS1ub3ZuY3Byb3h5YCByZWFjaCB0aGUgY29uc29sZSBQb2RzIG9uIDU5MDAKCiMjIENvbnNvbGUgUG9kIGxvY2tkb3duCgotIG5hbWVzcGFjZSBlbmZvcmNlcyB0aGUgYHJlc3RyaWN0ZWRgIFBvZCBTZWN1cml0eSBTdGFuZGFyZAotIHNjaGVkdWxlZCBvbiBjb250cm9sIHBsYW5lIG5vZGVzIChgb3BlbnN0YWNrLWNvbnRyb2wtcGxhbmU9ZW5hYmxlZGApLCBsaWtlIHRoZSByZXN0IG9mIHRoZSBjaGFydAotIHJ1bnMgYXMgdWlkIDQyNDI0LCBgcnVuQXNOb25Sb290YCwgbm8gcHJpdmlsZWdlIGVzY2FsYXRpb24sIGFsbCBjYXBhYmlsaXRpZXMgZHJvcHBlZCwgYFJ1bnRpbWVEZWZhdWx0YCBzZWNjb21wCi0gbm8gc2VydmljZSBhY2NvdW50IHRva2VuCi0gdGhlIGNvbnNvbGUgTmV0d29ya1BvbGljeSBhbGxvd3MgZWdyZXNzIG9ubHkgdG8ga3ViZS1kbnMgYW5kIFRDUCA4MC80NDMsIHNvIHRoZSBQb2RzIGNhbiByZWFjaCB0aGUgQk1DIGJ1dCBub3QgdGhlIEt1YmVybmV0ZXMgQVBJLCBrdWJlbGV0LCBldGNkLCBkYXRhYmFzZXMsIFJhYmJpdE1RIG9yIGludGVybmFsIE9wZW5TdGFjayBBUElzCgpUaGVyZSBhcmUgbm8gcm9sZSB2YXJpYWJsZXMgZm9yIHRoZSBmZWF0dXJlLiBUaGUgY29uc29sZSBtYW5pZmVzdHMgZGVmYXVsdCB0byBvbiBpbiB0aGUgY2hhcnQgYW5kIHJlbmRlciBvbmx5IHdoZW4gYFt2bmNdIGVuYWJsZWRgIGlzIHNldCwgc28gdGhlIHJvbGUgb25seSBzZXRzIHRoZSBgW3ZuY11gIG9wdGlvbnMuIFRoZSBjaGFydCdzIHZhbHVlcyBhcmUgc3RpbGwgcmVhY2hhYmxlIHRocm91Z2ggYGlyb25pY19oZWxtX3ZhbHVlc2AuCgojIyBTdGlsbCB0byBkbyBiZWZvcmUgbWVyZ2UKCi0gcGluIGBpcm9uaWNfY29uc29sZWAgaW4gYHJvbGVzL2RlZmF1bHRzL3ZhcnMvbWFpbi55bWxgIG9uY2UgYGdoY3IuaW8vdmV4eGhvc3QvaXJvbmljLWNvbnNvbGVgICh2ZXh4aG9zdC9kb2NrZXItaXJvbmljLWNvbnNvbGUpIHB1Ymxpc2hlcyBpdHMgZmlyc3QgYnVpbGQKLSB0ZXN0IG9uIGEgbGFiIG5vZGUgd2l0aCBhIFJlZGZpc2ggQk1DOyBadXVsIGRvZXMgbm90IGRlcGxveSBJcm9uaWMKCiMjIFJlcXVpcmVtZW50cwoKSXJvbmljIGFuZCBOb3ZhIDIwMjYuMSBvciBsYXRlciAoS3ViZXJuZXRlcyBjb25zb2xlIHByb3ZpZGVyIGFuZCBOb3ZhJ3MgSXJvbmljIFZOQyBkcml2ZXIpLiBOb3ZhJ3MgYG5vdmEtY29tcHV0ZS1pcm9uaWNgIHN0YXlzIG9wdC1pbiB0aHJvdWdoIGBub3ZhX2hlbG1fdmFsdWVzLm1hbmlmZXN0cy5zdGF0ZWZ1bHNldF9jb21wdXRlX2lyb25pY2A7IE5vdmEgbm93IHdhaXRzIDEyMCBzZWNvbmRzIGZvciBhIGJhcmUgbWV0YWwgY29uc29sZSwgbWF0Y2hpbmcgSXJvbmljJ3MgY29uc29sZSBQb2Qgc3RhcnQgdGltZW91dC4KCkRvY3M6IGBkb2Mvc291cmNlL2FkbWluL2JhcmVtZXRhbC9gIChkZXBsb3lpbmcgSXJvbmljIGluIHRoZSBpbmRleCwgY29uc29sZXMgaW4gYGNvbnNvbGUucnN0YCkuCg==
      patchset: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
      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: be52461cd48abccbf95b13a58b2551ac673d8ad7
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 4fd48825891421af0774bdd500fee36e111d80a6
          untrusted/project_0/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 4fd48825891421af0774bdd500fee36e111d80a6
          untrusted/project_1/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          untrusted/project_2/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: be52461cd48abccbf95b13a58b2551ac673d8ad7
          untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs:
            canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
            checkout: main
            commit: 4ee8667d55d1aa6230b954e7dc0574946f8c4373
          untrusted/project_4/opendev.org/openstack/openstack-helm:
            canonical_name: opendev.org/openstack/openstack-helm
            checkout: master
            commit: b0b61f634734831d47f70f7eadb00abcaddcd93a
        playbooks:
        - path: untrusted/project_0/github.com/vexxhost/zuul-jobs/playbooks/molecule/run.yaml
          roles:
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_0/github.com/vexxhost/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
        post_playbooks:
        - path: untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs/playbooks/molecule/post.yml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/post_playbook_0/role_0/atmosphere-zuul-jobs
            link_target: untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs
            role_path: ansible/post_playbook_0/role_0/atmosphere-zuul-jobs/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/post_playbook_0/role_1/openstack-helm
            link_target: untrusted/project_4/opendev.org/openstack/openstack-helm
            role_path: ansible/post_playbook_0/role_1/openstack-helm/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/post_playbook_0/role_3/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_0/role_3/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_0/role_4/zuul-jobs
            link_target: untrusted/project_0/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_0/role_4/zuul-jobs/roles
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/post.yaml
          roles:
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/post_playbook_1/role_1/zuul-jobs
            link_target: trusted/project_1/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_1/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_1/role_2/zuul-jobs
            link_target: trusted/project_2/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_1/role_2/zuul-jobs/roles
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/post-logs.yaml
          roles:
          - checkout: master
            checkout_description: project default branch
            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
        pre_playbooks:
        - path: trusted/project_0/github.com/vexxhost/zuul-config/playbooks/base/pre.yaml
          roles:
          - checkout: master
            checkout_description: project default branch
            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/github.com/vexxhost/zuul-jobs/playbooks/molecule/pre.yaml
          roles:
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/pre_playbook_1/role_1/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/pre_playbook_1/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/pre_playbook_1/role_2/zuul-jobs
            link_target: untrusted/project_0/github.com/vexxhost/zuul-jobs
            role_path: ansible/pre_playbook_1/role_2/zuul-jobs/roles
        - path: untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs/playbooks/molecule/pre.yml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/pre_playbook_2/role_0/atmosphere-zuul-jobs
            link_target: untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs
            role_path: ansible/pre_playbook_2/role_0/atmosphere-zuul-jobs/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/pre_playbook_2/role_1/openstack-helm
            link_target: untrusted/project_4/opendev.org/openstack/openstack-helm
            role_path: ansible/pre_playbook_2/role_1/openstack-helm/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/pre_playbook_2/role_3/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/pre_playbook_2/role_3/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/pre_playbook_2/role_4/zuul-jobs
            link_target: untrusted/project_0/github.com/vexxhost/zuul-jobs
            role_path: ansible/pre_playbook_2/role_4/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/vexxhost/atmosphere
        name: vexxhost/atmosphere
        short_name: atmosphere
        src_dir: src/github.com/vexxhost/atmosphere
      projects:
        github.com/ansible-collections/ansible.netcommon:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/ansible.netcommon
          checkout: main
          checkout_description: zuul branch
          commit: a929db70577e5630c32b36690fe58362f8c17443
          name: ansible-collections/ansible.netcommon
          required: true
          short_name: ansible.netcommon
          src_dir: src/github.com/ansible-collections/ansible.netcommon
        github.com/ansible-collections/ansible.posix:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/ansible.posix
          checkout: main
          checkout_description: zuul branch
          commit: 0f4453f85ee993687a4cab860e3b55438144f920
          name: ansible-collections/ansible.posix
          required: true
          short_name: ansible.posix
          src_dir: src/github.com/ansible-collections/ansible.posix
        github.com/ansible-collections/ansible.utils:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/ansible.utils
          checkout: main
          checkout_description: zuul branch
          commit: 1f3e1bdfe2ba8904d397222dd6f90911d6f2402b
          name: ansible-collections/ansible.utils
          required: true
          short_name: ansible.utils
          src_dir: src/github.com/ansible-collections/ansible.utils
        github.com/ansible-collections/community.crypto:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/community.crypto
          checkout: main
          checkout_description: zuul branch
          commit: 1bdefe5f420bb2d38cf92ea109ca39e1d4372347
          name: ansible-collections/community.crypto
          required: true
          short_name: community.crypto
          src_dir: src/github.com/ansible-collections/community.crypto
        github.com/ansible-collections/community.general:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/community.general
          checkout: main
          checkout_description: zuul branch
          commit: fea2ca3ef85fdf4596dca5fb9f58215dba17f068
          name: ansible-collections/community.general
          required: true
          short_name: community.general
          src_dir: src/github.com/ansible-collections/community.general
        github.com/ansible-collections/community.mysql:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/community.mysql
          checkout: main
          checkout_description: zuul branch
          commit: 4cf7a3176fbd07be43459f1366e8066381df6d97
          name: ansible-collections/community.mysql
          required: true
          short_name: community.mysql
          src_dir: src/github.com/ansible-collections/community.mysql
        github.com/ansible-collections/kubernetes.core:
          canonical_hostname: github.com
          canonical_name: github.com/ansible-collections/kubernetes.core
          checkout: main
          checkout_description: zuul branch
          commit: 782672d2fdb0004d593440a3ddd4b9db014d9e4b
          name: ansible-collections/kubernetes.core
          required: true
          short_name: kubernetes.core
          src_dir: src/github.com/ansible-collections/kubernetes.core
        github.com/vexxhost/ansible-collection-ceph:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/ansible-collection-ceph
          checkout: main
          checkout_description: zuul branch
          commit: 44a694a80e3179c28d75180baa1a56426f987257
          name: vexxhost/ansible-collection-ceph
          required: true
          short_name: ansible-collection-ceph
          src_dir: src/github.com/vexxhost/ansible-collection-ceph
        github.com/vexxhost/ansible-collection-containers:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/ansible-collection-containers
          checkout: main
          checkout_description: zuul branch
          commit: d22923ebd40c0fd5a345318c1db90d125fb5140f
          name: vexxhost/ansible-collection-containers
          required: true
          short_name: ansible-collection-containers
          src_dir: src/github.com/vexxhost/ansible-collection-containers
        github.com/vexxhost/ansible-collection-kubernetes:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/ansible-collection-kubernetes
          checkout: main
          checkout_description: zuul branch
          commit: bb3fd0fde58a5b158605523e708645eb2a763886
          name: vexxhost/ansible-collection-kubernetes
          required: true
          short_name: ansible-collection-kubernetes
          src_dir: src/github.com/vexxhost/ansible-collection-kubernetes
        github.com/vexxhost/atmosphere:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          checkout: main
          checkout_description: zuul branch
          commit: 3fe31c9a2bdb75dbc6fab24b23a0cbab0538237b
          name: vexxhost/atmosphere
          required: false
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
        github.com/vexxhost/atmosphere.common:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere.common
          checkout: main
          checkout_description: zuul branch
          commit: 0317937da7abc1979d331af8b8f7b640b80d7e75
          name: vexxhost/atmosphere.common
          required: true
          short_name: atmosphere.common
          src_dir: src/github.com/vexxhost/atmosphere.common
        opendev.org/openstack/ansible-collections-openstack:
          canonical_hostname: opendev.org
          canonical_name: opendev.org/openstack/ansible-collections-openstack
          checkout: master
          checkout_description: project default branch
          commit: 4caa12c979409a449777038e9315b426aa50e196
          name: openstack/ansible-collections-openstack
          required: true
          short_name: ansible-collections-openstack
          src_dir: src/opendev.org/openstack/ansible-collections-openstack
      ref: refs/pull/4232/head
      resources: {}
      tenant: oss
      timeout: 1800
      topic: null
      voting: true
