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.218
      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:bd24500907c89262513839070cc59c622104307ebcd7b130c4e3a95ad8f6df96
      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: 8fb983fb-e657-47ab-bcae-3dfedd15ad57
        host_id: 1338700d28abaf70516697563709cb5989e78902918a96f23cebed44
        interface_ip: 162.253.55.218
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.218
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.218
        public_ipv6: 2604:e100:1:0:f816:3eff:fe39:e7e6
        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: 8fb983fb-e657-47ab-bcae-3dfedd15ad57
        host_id: 1338700d28abaf70516697563709cb5989e78902918a96f23cebed44
        interface_ip: 162.253.55.218
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.218
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.218
        public_ipv6: 2604:e100:1:0:f816:3eff:fe39:e7e6
        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:bd24500907c89262513839070cc59c622104307ebcd7b130c4e3a95ad8f6df96
    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: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/576/oss/57667242ec344b4f8e2bda791782474e/zuul-manifest.json
      - branch: main
        change: '4232'
        job: atmosphere-release-manifest
        metadata:
          digest: sha256:bd24500907c89262513839070cc59c622104307ebcd7b130c4e3a95ad8f6df96
        name: Release manifest
        patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/576/oss/57667242ec344b4f8e2bda791782474e/release-manifest.yaml
      - branch: main
        change: '4232'
        job: atmosphere-release-manifest
        name: atmosphere-release
        patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        project: vexxhost/atmosphere
        url: https://logs.oss.vexxhost.dev/576/oss/57667242ec344b4f8e2bda791782474e/atmosphere-release
      attempts: 1
      branch: main
      build: 8da7e96e797f453fbd279a734f7d2dc2
      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), with noVNC browser
          files copied from the Nova 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)

          - `[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 chart''s values are still
          reachable through `ironic_helm_values`.


          ## Still to do before merge


          - merge vexxhost/docker-ironic#1631 and bump the Ironic image pins so the
          conductor has kubectl

          - 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/console.rst`.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        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: ea19e53aa41d43dab39348082f613e6e
      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), with noVNC browser
          files copied from the Nova 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)

          - `[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 chart''s values are still
          reachable through `ironic_helm_values`.


          ## Still to do before merge


          - merge vexxhost/docker-ironic#1631 and bump the Ironic image pins so the
          conductor has kubectl

          - 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/console.rst`.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        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), with noVNC browser
        files copied from the Nova 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)

        - `[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 chart''s values are still
        reachable through `ironic_helm_values`.


        ## Still to do before merge


        - merge vexxhost/docker-ironic#1631 and bump the Ironic image pins so the
        conductor has kubectl

        - 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/console.rst`.

        '
      change_url: https://github.com/vexxhost/atmosphere/pull/4232
      child_jobs: []
      commit_id: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
      event_id: 9ff9e570-d141-11f1-9354-a35ae8a5ef9b
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/8da7e96e797f453fbd279a734f7d2dc2/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/8da7e96e797f453fbd279a734f7d2dc2/work/logs
        result_data_file: /var/lib/zuul/builds/8da7e96e797f453fbd279a734f7d2dc2/work/results.json
        src_root: /var/lib/zuul/builds/8da7e96e797f453fbd279a734f7d2dc2/work/src
        work_root: /var/lib/zuul/builds/8da7e96e797f453fbd279a734f7d2dc2/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), with noVNC browser
          files copied from the Nova 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)

          - `[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 chart''s values are still
          reachable through `ironic_helm_values`.


          ## Still to do before merge


          - merge vexxhost/docker-ironic#1631 and bump the Ironic image pins so the
          conductor has kubectl

          - 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/console.rst`.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4232
        commit_id: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
        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: ZmVhdChpcm9uaWMpOiBlbmFibGUgbG9ja2VkLWRvd24gYmFyZSBtZXRhbCBncmFwaGljYWwgY29uc29sZXMKCkJhcmUgbWV0YWwgbm9kZXMgZ2V0IHRoZSBzYW1lIGJyb3dzZXItYmFzZWQgZ3JhcGhpY2FsIGNvbnNvbGUgdGhhdCBWTXMgaGF2ZSwgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW5ldmVyIHRoZSBJcm9uaWMgcm9sZSBpcyBkZXBsb3llZC4gVGhpcyBmb2xkcyB0aGUgZm9ybWVyIHN0YWNrICgjNDIzMywgIzQyMzYsICM0MjM5KSBpbnRvIG9uZSBQUi4KCldoZW4gYSBjb25zb2xlIGlzIG9wZW5lZCwgaXJvbmljLWNvbmR1Y3RvciB1c2VzIElyb25pYydzIEt1YmVybmV0ZXMgY29uc29sZSBwcm92aWRlciB0byBzdGFydCBhIHNob3J0LWxpdmVkIFBvZCBydW5uaW5nIHRoZSBjb25zb2xlIGltYWdlLCB3aGljaCBzaWducyBpbiB0byB0aGUgQk1DJ3Mgd2ViIGNvbnNvbGUgKERlbGwgaURSQUMsIEhQRSBpTE8sIFN1cGVybWljcm8pIGFuZCBzZXJ2ZXMgaXQgb3ZlciBWTkMuIFVzZXJzIG9wZW4gY29uc29sZXMgZm9yIGJhcmUgbWV0YWwgaW5zdGFuY2VzIHRocm91Z2ggTm92YSAoYG9wZW5zdGFjayBjb25zb2xlIHVybCBzaG93IC0tbm92bmNgKSwgdXNpbmcgdGhlIGV4aXN0aW5nIHB1YmxpYyBgbm92YS1ub3ZuY3Byb3h5YC4gYGlyb25pYy1ub3ZuY3Byb3h5YCBydW5zIGFzIGFuIGludGVybmFsIHNlcnZpY2Ugb25seSwgc28gbm8gbmV3IEluZ3Jlc3MsIGhvc3RuYW1lIG9yIEROUyByZWNvcmQgaXMgbmVlZGVkLgoKIyMgV2hhdCBpdCBkZXBsb3lzCgotIGBpcm9uaWMtbm92bmNwcm94eWAgRGVwbG95bWVudCBhbmQgU2VydmljZSAoaW50ZXJuYWwpLCB3aXRoIG5vVk5DIGJyb3dzZXIgZmlsZXMgY29waWVkIGZyb20gdGhlIE5vdmEgaW1hZ2UKLSB0aGUgYG9wZW5zdGFjay1pcm9uaWMtdm5jYCBuYW1lc3BhY2UgYXMgYSBjaGFydCByZXNvdXJjZSwgcGx1cyBhIFJvbGUvUm9sZUJpbmRpbmcgc28gaXJvbmljLWNvbmR1Y3RvciBjYW4gY3JlYXRlIGFuZCBkZWxldGUgY29uc29sZSBQb2RzIGFuZCBTZWNyZXRzIG9ubHkgdGhlcmUKLSBga3ViZWN0bGAgZm9yIHRoZSBLdWJlcm5ldGVzIHByb3ZpZGVyIGNvbWVzIGZyb20gdGhlIElyb25pYyBpbWFnZSAodmV4eGhvc3QvZG9ja2VyLWlyb25pYyMxNjMxKQotIGBbdm5jXWAgY29uZmlnIHdpdGggdGhlIGNvbnNvbGUgaW1hZ2UgZnJvbSB0aGUgaW1hZ2UgY2F0YWxvZywgYW5kIGByZWRmaXNoLWdyYXBoaWNhbGAgYWRkZWQgdG8gdGhlIGVuYWJsZWQgY29uc29sZSBpbnRlcmZhY2VzCi0gaW5ncmVzcyBOZXR3b3JrUG9saWN5IHNvIG9ubHkgYGlyb25pYy1ub3ZuY3Byb3h5YCBhbmQgYG5vdmEtbm92bmNwcm94eWAgcmVhY2ggdGhlIGNvbnNvbGUgUG9kcyBvbiA1OTAwCgojIyBDb25zb2xlIFBvZCBsb2NrZG93bgoKLSBuYW1lc3BhY2UgZW5mb3JjZXMgdGhlIGByZXN0cmljdGVkYCBQb2QgU2VjdXJpdHkgU3RhbmRhcmQKLSBzY2hlZHVsZWQgb24gY29udHJvbCBwbGFuZSBub2RlcyAoYG9wZW5zdGFjay1jb250cm9sLXBsYW5lPWVuYWJsZWRgKSwgbGlrZSB0aGUgcmVzdCBvZiB0aGUgY2hhcnQKLSBydW5zIGFzIHVpZCA0MjQyNCwgYHJ1bkFzTm9uUm9vdGAsIG5vIHByaXZpbGVnZSBlc2NhbGF0aW9uLCBhbGwgY2FwYWJpbGl0aWVzIGRyb3BwZWQsIGBSdW50aW1lRGVmYXVsdGAgc2VjY29tcAotIG5vIHNlcnZpY2UgYWNjb3VudCB0b2tlbgotIHRoZSBjb25zb2xlIE5ldHdvcmtQb2xpY3kgYWxsb3dzIGVncmVzcyBvbmx5IHRvIGt1YmUtZG5zIGFuZCBUQ1AgODAvNDQzLCBzbyB0aGUgUG9kcyBjYW4gcmVhY2ggdGhlIEJNQyBidXQgbm90IHRoZSBLdWJlcm5ldGVzIEFQSSwga3ViZWxldCwgZXRjZCwgZGF0YWJhc2VzLCBSYWJiaXRNUSBvciBpbnRlcm5hbCBPcGVuU3RhY2sgQVBJcwoKVGhlcmUgYXJlIG5vIHJvbGUgdmFyaWFibGVzIGZvciB0aGUgZmVhdHVyZS4gVGhlIGNoYXJ0J3MgdmFsdWVzIGFyZSBzdGlsbCByZWFjaGFibGUgdGhyb3VnaCBgaXJvbmljX2hlbG1fdmFsdWVzYC4KCiMjIFN0aWxsIHRvIGRvIGJlZm9yZSBtZXJnZQoKLSBtZXJnZSB2ZXh4aG9zdC9kb2NrZXItaXJvbmljIzE2MzEgYW5kIGJ1bXAgdGhlIElyb25pYyBpbWFnZSBwaW5zIHNvIHRoZSBjb25kdWN0b3IgaGFzIGt1YmVjdGwKLSBwaW4gYGlyb25pY19jb25zb2xlYCBpbiBgcm9sZXMvZGVmYXVsdHMvdmFycy9tYWluLnltbGAgb25jZSBgZ2hjci5pby92ZXh4aG9zdC9pcm9uaWMtY29uc29sZWAgKHZleHhob3N0L2RvY2tlci1pcm9uaWMtY29uc29sZSkgcHVibGlzaGVzIGl0cyBmaXJzdCBidWlsZAotIHRlc3Qgb24gYSBsYWIgbm9kZSB3aXRoIGEgUmVkZmlzaCBCTUM7IFp1dWwgZG9lcyBub3QgZGVwbG95IElyb25pYwoKIyMgUmVxdWlyZW1lbnRzCgpJcm9uaWMgYW5kIE5vdmEgMjAyNi4xIG9yIGxhdGVyIChLdWJlcm5ldGVzIGNvbnNvbGUgcHJvdmlkZXIgYW5kIE5vdmEncyBJcm9uaWMgVk5DIGRyaXZlcikuIE5vdmEncyBgbm92YS1jb21wdXRlLWlyb25pY2Agc3RheXMgb3B0LWluIHRocm91Z2ggYG5vdmFfaGVsbV92YWx1ZXMubWFuaWZlc3RzLnN0YXRlZnVsc2V0X2NvbXB1dGVfaXJvbmljYDsgTm92YSBub3cgd2FpdHMgMTIwIHNlY29uZHMgZm9yIGEgYmFyZSBtZXRhbCBjb25zb2xlLCBtYXRjaGluZyBJcm9uaWMncyBjb25zb2xlIFBvZCBzdGFydCB0aW1lb3V0LgoKRG9jczogYGRvYy9zb3VyY2UvYWRtaW4vYmFyZW1ldGFsL2NvbnNvbGUucnN0YC4K
      patchset: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
      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: e79fd9e873364ba447661c0b36bd07e29814b14e
        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: 2c22bbd8e7be4bbf75178473d05e0cbcd8ca4f7d
          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
