all:
  children:
    cephs:
      hosts:
        instance: null
    computes:
      hosts:
        instance: null
    controllers:
      hosts:
        instance: null
    zuul_unreachable:
      hosts: {}
  hosts:
    instance:
      ansible_connection: ssh
      ansible_host: 199.204.45.162
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      atmosphere_image_prefix: harbor.atmosphere.dev/
      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: nova
        cloud: public
        external_id: 753a3c33-35fb-4bd1-be3f-15a6d766efbf
        host_id: d953b2b79ff732b94d97ea6274a0c4d1174b1c52cbf038923e842d1b
        interface_ip: 199.204.45.162
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.162
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.162
        public_ipv6: 2604:e100:1:0:f816:3eff:fe72:48e
        region: ca-ymq-1
        slot: null
      percona_xtradb_cluster_spec:
        allowUnsafeConfigurations: true
        haproxy:
          size: 1
        pxc:
          size: 1
      zuul_node:
        az: nova
        cloud: public
        external_id: 753a3c33-35fb-4bd1-be3f-15a6d766efbf
        host_id: d953b2b79ff732b94d97ea6274a0c4d1174b1c52cbf038923e842d1b
        interface_ip: 199.204.45.162
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.162
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.162
        public_ipv6: 2604:e100:1:0:f816:3eff:fe72:48e
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    atmosphere_image_prefix: harbor.atmosphere.dev/
    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#1>'
      - '<Job atmosphere-molecule-keycloak explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/atmosphere-zuul-jobs/zuul.d/jobs.yaml@main#267>'
      - '<Job atmosphere-molecule-keycloak explicit: None implied: None source: vexxhost/atmosphere-zuul-jobs/zuul.d/project-templates.yaml@main#1>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 501f417ab0a643ce90cac9cd7605a5f7
      build_refs:
      - branch: main
        change: '3925'
        change_message: "feat(neutron): add neutron ironic agent support\n\n## Summary\r\n\r\n-
          add Neutron Helm values for the baremetal ML2 backend and `[ironic]` credentials\r\n-
          append those values only when the final Helm values enable `manifests.deployment_ironic_agent`\r\n-
          source Ironic region, username, and password from `openstack_helm_endpoints`
          instead of hardcoding Keystone auth details\r\n\r\n### short version for
          ironic-neutron-agent  and baremetal driver intro\r\n\r\n  ironic-neutron-agent
          tells Neutron which physical networks each Ironic bare metal node can reach.
          That information lets Neutron\r\n  place bare metal ports on the right network
          segment, VLAN, provider network, or routed provider network.\r\n\r\n  This
          PR enables two required pieces together:\r\n\r\n  - ironic-neutron-agent
          syncs Ironic node and port network information into Neutron.\r\n  - baremetal
          in network.backend enables the ML2 binding path for Neutron ports using
          vnic_type=baremetal.\r\n\r\n  Without the baremetal backend, the agent can
          report the topology, but Neutron may still fail to bind bare metal ports
          because ML2\r\n  does not have the driver for that binding path.\r\n\r\n
          \ This stays opt-in through manifests.deployment_ironic_agent, so the default
          Neutron deployment remains unchanged.\r\n\r\n### Long version for ironic-neutron-agent
          \ and baremetal driver intro\r\n\r\nironic-neutron-agent is a Neutron-side
          service used with OpenStack Ironic bare-metal nodes.\r\n\r\nIts main job
          is to tell Neutron which physical networks each bare-metal node can reach.
          This allows Neutron to correctly bind bare-metal ports to the right network
          segment, VLAN, provider network, or routed network.\r\n\r\nIn practice,
          it helps with:\r\n\r\n* Mapping Ironic nodes to physical networks\r\n* Supporting
          bare-metal Neutron port binding\r\n* Enabling tenant, provisioning, cleaning,
          and rescue network transitions\r\n* Helping ML2/switch drivers configure
          the correct switch ports or VLANs\r\n* Supporting routed provider networks\r\n*
          Improving OVN bare-metal networking features in newer deployments\r\n\r\nIt
          does not power on servers, install operating systems, run inside the bare-metal
          node, or directly manage hardware. Those tasks are handled by Ironic, ironic-python-agent,
          and hardware drivers.\r\n\r\nIn short: ironic-neutron-agent lets Neutron
          understand and manage networking for Ironic bare-metal nodes.\r\n\r\nAdding
          some context on why this PR enables the baremetal ML2 backend together with
          the Neutron Ironic agent:\r\n\r\nThe Neutron Ironic agent is only the service
          that reports Ironic bare metal port and physical network information back
          to Neutron. That gives Neutron the inventory and reachability data it needs,
          but it does not by itself teach ML2 how to bind a Neutron port whose binding:vnic_type
          is baremetal.\r\n\r\nFor the bind flow to work end to end, Neutron also
          needs the baremetal mechanism/backend enabled in network.backend. That backend
          is what lets ML2 recognize bare metal ports, use the Ironic-side physical
          network information, and produce a valid binding for provider or routed
          provider networks. Without it, we can deploy ironic-neutron-agent, but Neutron
          can still reject or fail to bind bare metal ports because the ML2 backend
          list does not include the driver responsible for that binding path.\r\n\r\nSo
          these two pieces cover different sides of the same feature:\r\n\r\nironic-neutron-agent
          syncs Ironic node/port network information into Neutron.\r\nbaremetal in
          network.backend enables the ML2 binding path for Neutron ports using vnic_type=baremetal.\r\nThat
          is why this change appends baremetal alongside the existing Atmosphere network
          backend only when operators opt in by enabling manifests.deployment_ironic_agent.
          It keeps the default Neutron deployment unchanged, while making the opt-in
          Ironic networking path complete.\r\n\r\n## Notes\r\n\r\nThis intentionally
          ports only the `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`
          portions from `ricolin/atmosphere#11`. It does not set `manifests.deployment_ironic_agent`;
          operators still opt in through `neutron_helm_values`.\r\n\r\n## Validation\r\n\r\n-
          `python3` YAML parse for `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`\r\n-
          local `ansible-playbook` smoke test for false/true `deployment_ironic_agent`
          conditional behavior\r\n- `git diff --check`"
        change_url: https://github.com/vexxhost/atmosphere/pull/3925
        commit_id: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        patchset: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        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: 28f5a2ea37c344b1ba8d1449b054e6a3
      buildset_refs:
      - branch: main
        change: '3925'
        change_message: "feat(neutron): add neutron ironic agent support\n\n## Summary\r\n\r\n-
          add Neutron Helm values for the baremetal ML2 backend and `[ironic]` credentials\r\n-
          append those values only when the final Helm values enable `manifests.deployment_ironic_agent`\r\n-
          source Ironic region, username, and password from `openstack_helm_endpoints`
          instead of hardcoding Keystone auth details\r\n\r\n### short version for
          ironic-neutron-agent  and baremetal driver intro\r\n\r\n  ironic-neutron-agent
          tells Neutron which physical networks each Ironic bare metal node can reach.
          That information lets Neutron\r\n  place bare metal ports on the right network
          segment, VLAN, provider network, or routed provider network.\r\n\r\n  This
          PR enables two required pieces together:\r\n\r\n  - ironic-neutron-agent
          syncs Ironic node and port network information into Neutron.\r\n  - baremetal
          in network.backend enables the ML2 binding path for Neutron ports using
          vnic_type=baremetal.\r\n\r\n  Without the baremetal backend, the agent can
          report the topology, but Neutron may still fail to bind bare metal ports
          because ML2\r\n  does not have the driver for that binding path.\r\n\r\n
          \ This stays opt-in through manifests.deployment_ironic_agent, so the default
          Neutron deployment remains unchanged.\r\n\r\n### Long version for ironic-neutron-agent
          \ and baremetal driver intro\r\n\r\nironic-neutron-agent is a Neutron-side
          service used with OpenStack Ironic bare-metal nodes.\r\n\r\nIts main job
          is to tell Neutron which physical networks each bare-metal node can reach.
          This allows Neutron to correctly bind bare-metal ports to the right network
          segment, VLAN, provider network, or routed network.\r\n\r\nIn practice,
          it helps with:\r\n\r\n* Mapping Ironic nodes to physical networks\r\n* Supporting
          bare-metal Neutron port binding\r\n* Enabling tenant, provisioning, cleaning,
          and rescue network transitions\r\n* Helping ML2/switch drivers configure
          the correct switch ports or VLANs\r\n* Supporting routed provider networks\r\n*
          Improving OVN bare-metal networking features in newer deployments\r\n\r\nIt
          does not power on servers, install operating systems, run inside the bare-metal
          node, or directly manage hardware. Those tasks are handled by Ironic, ironic-python-agent,
          and hardware drivers.\r\n\r\nIn short: ironic-neutron-agent lets Neutron
          understand and manage networking for Ironic bare-metal nodes.\r\n\r\nAdding
          some context on why this PR enables the baremetal ML2 backend together with
          the Neutron Ironic agent:\r\n\r\nThe Neutron Ironic agent is only the service
          that reports Ironic bare metal port and physical network information back
          to Neutron. That gives Neutron the inventory and reachability data it needs,
          but it does not by itself teach ML2 how to bind a Neutron port whose binding:vnic_type
          is baremetal.\r\n\r\nFor the bind flow to work end to end, Neutron also
          needs the baremetal mechanism/backend enabled in network.backend. That backend
          is what lets ML2 recognize bare metal ports, use the Ironic-side physical
          network information, and produce a valid binding for provider or routed
          provider networks. Without it, we can deploy ironic-neutron-agent, but Neutron
          can still reject or fail to bind bare metal ports because the ML2 backend
          list does not include the driver responsible for that binding path.\r\n\r\nSo
          these two pieces cover different sides of the same feature:\r\n\r\nironic-neutron-agent
          syncs Ironic node/port network information into Neutron.\r\nbaremetal in
          network.backend enables the ML2 binding path for Neutron ports using vnic_type=baremetal.\r\nThat
          is why this change appends baremetal alongside the existing Atmosphere network
          backend only when operators opt in by enabling manifests.deployment_ironic_agent.
          It keeps the default Neutron deployment unchanged, while making the opt-in
          Ironic networking path complete.\r\n\r\n## Notes\r\n\r\nThis intentionally
          ports only the `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`
          portions from `ricolin/atmosphere#11`. It does not set `manifests.deployment_ironic_agent`;
          operators still opt in through `neutron_helm_values`.\r\n\r\n## Validation\r\n\r\n-
          `python3` YAML parse for `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`\r\n-
          local `ansible-playbook` smoke test for false/true `deployment_ironic_agent`
          conditional behavior\r\n- `git diff --check`"
        change_url: https://github.com/vexxhost/atmosphere/pull/3925
        commit_id: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        patchset: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        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: '3925'
      change_message: "feat(neutron): add neutron ironic agent support\n\n## Summary\r\n\r\n-
        add Neutron Helm values for the baremetal ML2 backend and `[ironic]` credentials\r\n-
        append those values only when the final Helm values enable `manifests.deployment_ironic_agent`\r\n-
        source Ironic region, username, and password from `openstack_helm_endpoints`
        instead of hardcoding Keystone auth details\r\n\r\n### short version for ironic-neutron-agent
        \ and baremetal driver intro\r\n\r\n  ironic-neutron-agent tells Neutron which
        physical networks each Ironic bare metal node can reach. That information
        lets Neutron\r\n  place bare metal ports on the right network segment, VLAN,
        provider network, or routed provider network.\r\n\r\n  This PR enables two
        required pieces together:\r\n\r\n  - ironic-neutron-agent syncs Ironic node
        and port network information into Neutron.\r\n  - baremetal in network.backend
        enables the ML2 binding path for Neutron ports using vnic_type=baremetal.\r\n\r\n
        \ Without the baremetal backend, the agent can report the topology, but Neutron
        may still fail to bind bare metal ports because ML2\r\n  does not have the
        driver for that binding path.\r\n\r\n  This stays opt-in through manifests.deployment_ironic_agent,
        so the default Neutron deployment remains unchanged.\r\n\r\n### Long version
        for ironic-neutron-agent  and baremetal driver intro\r\n\r\nironic-neutron-agent
        is a Neutron-side service used with OpenStack Ironic bare-metal nodes.\r\n\r\nIts
        main job is to tell Neutron which physical networks each bare-metal node can
        reach. This allows Neutron to correctly bind bare-metal ports to the right
        network segment, VLAN, provider network, or routed network.\r\n\r\nIn practice,
        it helps with:\r\n\r\n* Mapping Ironic nodes to physical networks\r\n* Supporting
        bare-metal Neutron port binding\r\n* Enabling tenant, provisioning, cleaning,
        and rescue network transitions\r\n* Helping ML2/switch drivers configure the
        correct switch ports or VLANs\r\n* Supporting routed provider networks\r\n*
        Improving OVN bare-metal networking features in newer deployments\r\n\r\nIt
        does not power on servers, install operating systems, run inside the bare-metal
        node, or directly manage hardware. Those tasks are handled by Ironic, ironic-python-agent,
        and hardware drivers.\r\n\r\nIn short: ironic-neutron-agent lets Neutron understand
        and manage networking for Ironic bare-metal nodes.\r\n\r\nAdding some context
        on why this PR enables the baremetal ML2 backend together with the Neutron
        Ironic agent:\r\n\r\nThe Neutron Ironic agent is only the service that reports
        Ironic bare metal port and physical network information back to Neutron. That
        gives Neutron the inventory and reachability data it needs, but it does not
        by itself teach ML2 how to bind a Neutron port whose binding:vnic_type is
        baremetal.\r\n\r\nFor the bind flow to work end to end, Neutron also needs
        the baremetal mechanism/backend enabled in network.backend. That backend is
        what lets ML2 recognize bare metal ports, use the Ironic-side physical network
        information, and produce a valid binding for provider or routed provider networks.
        Without it, we can deploy ironic-neutron-agent, but Neutron can still reject
        or fail to bind bare metal ports because the ML2 backend list does not include
        the driver responsible for that binding path.\r\n\r\nSo these two pieces cover
        different sides of the same feature:\r\n\r\nironic-neutron-agent syncs Ironic
        node/port network information into Neutron.\r\nbaremetal in network.backend
        enables the ML2 binding path for Neutron ports using vnic_type=baremetal.\r\nThat
        is why this change appends baremetal alongside the existing Atmosphere network
        backend only when operators opt in by enabling manifests.deployment_ironic_agent.
        It keeps the default Neutron deployment unchanged, while making the opt-in
        Ironic networking path complete.\r\n\r\n## Notes\r\n\r\nThis intentionally
        ports only the `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`
        portions from `ricolin/atmosphere#11`. It does not set `manifests.deployment_ironic_agent`;
        operators still opt in through `neutron_helm_values`.\r\n\r\n## Validation\r\n\r\n-
        `python3` YAML parse for `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`\r\n-
        local `ansible-playbook` smoke test for false/true `deployment_ironic_agent`
        conditional behavior\r\n- `git diff --check`"
      change_url: https://github.com/vexxhost/atmosphere/pull/3925
      child_jobs: []
      commit_id: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
      event_id: 249174c0-6918-11f1-98c8-abfa39019540
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/501f417ab0a643ce90cac9cd7605a5f7/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/501f417ab0a643ce90cac9cd7605a5f7/work/logs
        result_data_file: /var/lib/zuul/builds/501f417ab0a643ce90cac9cd7605a5f7/work/results.json
        src_root: /var/lib/zuul/builds/501f417ab0a643ce90cac9cd7605a5f7/work/src
        work_root: /var/lib/zuul/builds/501f417ab0a643ce90cac9cd7605a5f7/work
      include_vars: []
      items:
      - branch: main
        change: '3925'
        change_message: "feat(neutron): add neutron ironic agent support\n\n## Summary\r\n\r\n-
          add Neutron Helm values for the baremetal ML2 backend and `[ironic]` credentials\r\n-
          append those values only when the final Helm values enable `manifests.deployment_ironic_agent`\r\n-
          source Ironic region, username, and password from `openstack_helm_endpoints`
          instead of hardcoding Keystone auth details\r\n\r\n### short version for
          ironic-neutron-agent  and baremetal driver intro\r\n\r\n  ironic-neutron-agent
          tells Neutron which physical networks each Ironic bare metal node can reach.
          That information lets Neutron\r\n  place bare metal ports on the right network
          segment, VLAN, provider network, or routed provider network.\r\n\r\n  This
          PR enables two required pieces together:\r\n\r\n  - ironic-neutron-agent
          syncs Ironic node and port network information into Neutron.\r\n  - baremetal
          in network.backend enables the ML2 binding path for Neutron ports using
          vnic_type=baremetal.\r\n\r\n  Without the baremetal backend, the agent can
          report the topology, but Neutron may still fail to bind bare metal ports
          because ML2\r\n  does not have the driver for that binding path.\r\n\r\n
          \ This stays opt-in through manifests.deployment_ironic_agent, so the default
          Neutron deployment remains unchanged.\r\n\r\n### Long version for ironic-neutron-agent
          \ and baremetal driver intro\r\n\r\nironic-neutron-agent is a Neutron-side
          service used with OpenStack Ironic bare-metal nodes.\r\n\r\nIts main job
          is to tell Neutron which physical networks each bare-metal node can reach.
          This allows Neutron to correctly bind bare-metal ports to the right network
          segment, VLAN, provider network, or routed network.\r\n\r\nIn practice,
          it helps with:\r\n\r\n* Mapping Ironic nodes to physical networks\r\n* Supporting
          bare-metal Neutron port binding\r\n* Enabling tenant, provisioning, cleaning,
          and rescue network transitions\r\n* Helping ML2/switch drivers configure
          the correct switch ports or VLANs\r\n* Supporting routed provider networks\r\n*
          Improving OVN bare-metal networking features in newer deployments\r\n\r\nIt
          does not power on servers, install operating systems, run inside the bare-metal
          node, or directly manage hardware. Those tasks are handled by Ironic, ironic-python-agent,
          and hardware drivers.\r\n\r\nIn short: ironic-neutron-agent lets Neutron
          understand and manage networking for Ironic bare-metal nodes.\r\n\r\nAdding
          some context on why this PR enables the baremetal ML2 backend together with
          the Neutron Ironic agent:\r\n\r\nThe Neutron Ironic agent is only the service
          that reports Ironic bare metal port and physical network information back
          to Neutron. That gives Neutron the inventory and reachability data it needs,
          but it does not by itself teach ML2 how to bind a Neutron port whose binding:vnic_type
          is baremetal.\r\n\r\nFor the bind flow to work end to end, Neutron also
          needs the baremetal mechanism/backend enabled in network.backend. That backend
          is what lets ML2 recognize bare metal ports, use the Ironic-side physical
          network information, and produce a valid binding for provider or routed
          provider networks. Without it, we can deploy ironic-neutron-agent, but Neutron
          can still reject or fail to bind bare metal ports because the ML2 backend
          list does not include the driver responsible for that binding path.\r\n\r\nSo
          these two pieces cover different sides of the same feature:\r\n\r\nironic-neutron-agent
          syncs Ironic node/port network information into Neutron.\r\nbaremetal in
          network.backend enables the ML2 binding path for Neutron ports using vnic_type=baremetal.\r\nThat
          is why this change appends baremetal alongside the existing Atmosphere network
          backend only when operators opt in by enabling manifests.deployment_ironic_agent.
          It keeps the default Neutron deployment unchanged, while making the opt-in
          Ironic networking path complete.\r\n\r\n## Notes\r\n\r\nThis intentionally
          ports only the `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`
          portions from `ricolin/atmosphere#11`. It does not set `manifests.deployment_ironic_agent`;
          operators still opt in through `neutron_helm_values`.\r\n\r\n## Validation\r\n\r\n-
          `python3` YAML parse for `roles/neutron/vars/main.yml` and `roles/neutron/tasks/main.yml`\r\n-
          local `ansible-playbook` smoke test for false/true `deployment_ironic_agent`
          conditional behavior\r\n- `git diff --check`"
        change_url: https://github.com/vexxhost/atmosphere/pull/3925
        commit_id: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        patchset: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
        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: ZmVhdChuZXV0cm9uKTogYWRkIG5ldXRyb24gaXJvbmljIGFnZW50IHN1cHBvcnQKCiMjIFN1bW1hcnkNCg0KLSBhZGQgTmV1dHJvbiBIZWxtIHZhbHVlcyBmb3IgdGhlIGJhcmVtZXRhbCBNTDIgYmFja2VuZCBhbmQgYFtpcm9uaWNdYCBjcmVkZW50aWFscw0KLSBhcHBlbmQgdGhvc2UgdmFsdWVzIG9ubHkgd2hlbiB0aGUgZmluYWwgSGVsbSB2YWx1ZXMgZW5hYmxlIGBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnRgDQotIHNvdXJjZSBJcm9uaWMgcmVnaW9uLCB1c2VybmFtZSwgYW5kIHBhc3N3b3JkIGZyb20gYG9wZW5zdGFja19oZWxtX2VuZHBvaW50c2AgaW5zdGVhZCBvZiBoYXJkY29kaW5nIEtleXN0b25lIGF1dGggZGV0YWlscw0KDQojIyMgc2hvcnQgdmVyc2lvbiBmb3IgaXJvbmljLW5ldXRyb24tYWdlbnQgIGFuZCBiYXJlbWV0YWwgZHJpdmVyIGludHJvDQoNCiAgaXJvbmljLW5ldXRyb24tYWdlbnQgdGVsbHMgTmV1dHJvbiB3aGljaCBwaHlzaWNhbCBuZXR3b3JrcyBlYWNoIElyb25pYyBiYXJlIG1ldGFsIG5vZGUgY2FuIHJlYWNoLiBUaGF0IGluZm9ybWF0aW9uIGxldHMgTmV1dHJvbg0KICBwbGFjZSBiYXJlIG1ldGFsIHBvcnRzIG9uIHRoZSByaWdodCBuZXR3b3JrIHNlZ21lbnQsIFZMQU4sIHByb3ZpZGVyIG5ldHdvcmssIG9yIHJvdXRlZCBwcm92aWRlciBuZXR3b3JrLg0KDQogIFRoaXMgUFIgZW5hYmxlcyB0d28gcmVxdWlyZWQgcGllY2VzIHRvZ2V0aGVyOg0KDQogIC0gaXJvbmljLW5ldXRyb24tYWdlbnQgc3luY3MgSXJvbmljIG5vZGUgYW5kIHBvcnQgbmV0d29yayBpbmZvcm1hdGlvbiBpbnRvIE5ldXRyb24uDQogIC0gYmFyZW1ldGFsIGluIG5ldHdvcmsuYmFja2VuZCBlbmFibGVzIHRoZSBNTDIgYmluZGluZyBwYXRoIGZvciBOZXV0cm9uIHBvcnRzIHVzaW5nIHZuaWNfdHlwZT1iYXJlbWV0YWwuDQoNCiAgV2l0aG91dCB0aGUgYmFyZW1ldGFsIGJhY2tlbmQsIHRoZSBhZ2VudCBjYW4gcmVwb3J0IHRoZSB0b3BvbG9neSwgYnV0IE5ldXRyb24gbWF5IHN0aWxsIGZhaWwgdG8gYmluZCBiYXJlIG1ldGFsIHBvcnRzIGJlY2F1c2UgTUwyDQogIGRvZXMgbm90IGhhdmUgdGhlIGRyaXZlciBmb3IgdGhhdCBiaW5kaW5nIHBhdGguDQoNCiAgVGhpcyBzdGF5cyBvcHQtaW4gdGhyb3VnaCBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnQsIHNvIHRoZSBkZWZhdWx0IE5ldXRyb24gZGVwbG95bWVudCByZW1haW5zIHVuY2hhbmdlZC4NCg0KIyMjIExvbmcgdmVyc2lvbiBmb3IgaXJvbmljLW5ldXRyb24tYWdlbnQgIGFuZCBiYXJlbWV0YWwgZHJpdmVyIGludHJvDQoNCmlyb25pYy1uZXV0cm9uLWFnZW50IGlzIGEgTmV1dHJvbi1zaWRlIHNlcnZpY2UgdXNlZCB3aXRoIE9wZW5TdGFjayBJcm9uaWMgYmFyZS1tZXRhbCBub2Rlcy4NCg0KSXRzIG1haW4gam9iIGlzIHRvIHRlbGwgTmV1dHJvbiB3aGljaCBwaHlzaWNhbCBuZXR3b3JrcyBlYWNoIGJhcmUtbWV0YWwgbm9kZSBjYW4gcmVhY2guIFRoaXMgYWxsb3dzIE5ldXRyb24gdG8gY29ycmVjdGx5IGJpbmQgYmFyZS1tZXRhbCBwb3J0cyB0byB0aGUgcmlnaHQgbmV0d29yayBzZWdtZW50LCBWTEFOLCBwcm92aWRlciBuZXR3b3JrLCBvciByb3V0ZWQgbmV0d29yay4NCg0KSW4gcHJhY3RpY2UsIGl0IGhlbHBzIHdpdGg6DQoNCiogTWFwcGluZyBJcm9uaWMgbm9kZXMgdG8gcGh5c2ljYWwgbmV0d29ya3MNCiogU3VwcG9ydGluZyBiYXJlLW1ldGFsIE5ldXRyb24gcG9ydCBiaW5kaW5nDQoqIEVuYWJsaW5nIHRlbmFudCwgcHJvdmlzaW9uaW5nLCBjbGVhbmluZywgYW5kIHJlc2N1ZSBuZXR3b3JrIHRyYW5zaXRpb25zDQoqIEhlbHBpbmcgTUwyL3N3aXRjaCBkcml2ZXJzIGNvbmZpZ3VyZSB0aGUgY29ycmVjdCBzd2l0Y2ggcG9ydHMgb3IgVkxBTnMNCiogU3VwcG9ydGluZyByb3V0ZWQgcHJvdmlkZXIgbmV0d29ya3MNCiogSW1wcm92aW5nIE9WTiBiYXJlLW1ldGFsIG5ldHdvcmtpbmcgZmVhdHVyZXMgaW4gbmV3ZXIgZGVwbG95bWVudHMNCg0KSXQgZG9lcyBub3QgcG93ZXIgb24gc2VydmVycywgaW5zdGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgcnVuIGluc2lkZSB0aGUgYmFyZS1tZXRhbCBub2RlLCBvciBkaXJlY3RseSBtYW5hZ2UgaGFyZHdhcmUuIFRob3NlIHRhc2tzIGFyZSBoYW5kbGVkIGJ5IElyb25pYywgaXJvbmljLXB5dGhvbi1hZ2VudCwgYW5kIGhhcmR3YXJlIGRyaXZlcnMuDQoNCkluIHNob3J0OiBpcm9uaWMtbmV1dHJvbi1hZ2VudCBsZXRzIE5ldXRyb24gdW5kZXJzdGFuZCBhbmQgbWFuYWdlIG5ldHdvcmtpbmcgZm9yIElyb25pYyBiYXJlLW1ldGFsIG5vZGVzLg0KDQpBZGRpbmcgc29tZSBjb250ZXh0IG9uIHdoeSB0aGlzIFBSIGVuYWJsZXMgdGhlIGJhcmVtZXRhbCBNTDIgYmFja2VuZCB0b2dldGhlciB3aXRoIHRoZSBOZXV0cm9uIElyb25pYyBhZ2VudDoNCg0KVGhlIE5ldXRyb24gSXJvbmljIGFnZW50IGlzIG9ubHkgdGhlIHNlcnZpY2UgdGhhdCByZXBvcnRzIElyb25pYyBiYXJlIG1ldGFsIHBvcnQgYW5kIHBoeXNpY2FsIG5ldHdvcmsgaW5mb3JtYXRpb24gYmFjayB0byBOZXV0cm9uLiBUaGF0IGdpdmVzIE5ldXRyb24gdGhlIGludmVudG9yeSBhbmQgcmVhY2hhYmlsaXR5IGRhdGEgaXQgbmVlZHMsIGJ1dCBpdCBkb2VzIG5vdCBieSBpdHNlbGYgdGVhY2ggTUwyIGhvdyB0byBiaW5kIGEgTmV1dHJvbiBwb3J0IHdob3NlIGJpbmRpbmc6dm5pY190eXBlIGlzIGJhcmVtZXRhbC4NCg0KRm9yIHRoZSBiaW5kIGZsb3cgdG8gd29yayBlbmQgdG8gZW5kLCBOZXV0cm9uIGFsc28gbmVlZHMgdGhlIGJhcmVtZXRhbCBtZWNoYW5pc20vYmFja2VuZCBlbmFibGVkIGluIG5ldHdvcmsuYmFja2VuZC4gVGhhdCBiYWNrZW5kIGlzIHdoYXQgbGV0cyBNTDIgcmVjb2duaXplIGJhcmUgbWV0YWwgcG9ydHMsIHVzZSB0aGUgSXJvbmljLXNpZGUgcGh5c2ljYWwgbmV0d29yayBpbmZvcm1hdGlvbiwgYW5kIHByb2R1Y2UgYSB2YWxpZCBiaW5kaW5nIGZvciBwcm92aWRlciBvciByb3V0ZWQgcHJvdmlkZXIgbmV0d29ya3MuIFdpdGhvdXQgaXQsIHdlIGNhbiBkZXBsb3kgaXJvbmljLW5ldXRyb24tYWdlbnQsIGJ1dCBOZXV0cm9uIGNhbiBzdGlsbCByZWplY3Qgb3IgZmFpbCB0byBiaW5kIGJhcmUgbWV0YWwgcG9ydHMgYmVjYXVzZSB0aGUgTUwyIGJhY2tlbmQgbGlzdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkcml2ZXIgcmVzcG9uc2libGUgZm9yIHRoYXQgYmluZGluZyBwYXRoLg0KDQpTbyB0aGVzZSB0d28gcGllY2VzIGNvdmVyIGRpZmZlcmVudCBzaWRlcyBvZiB0aGUgc2FtZSBmZWF0dXJlOg0KDQppcm9uaWMtbmV1dHJvbi1hZ2VudCBzeW5jcyBJcm9uaWMgbm9kZS9wb3J0IG5ldHdvcmsgaW5mb3JtYXRpb24gaW50byBOZXV0cm9uLg0KYmFyZW1ldGFsIGluIG5ldHdvcmsuYmFja2VuZCBlbmFibGVzIHRoZSBNTDIgYmluZGluZyBwYXRoIGZvciBOZXV0cm9uIHBvcnRzIHVzaW5nIHZuaWNfdHlwZT1iYXJlbWV0YWwuDQpUaGF0IGlzIHdoeSB0aGlzIGNoYW5nZSBhcHBlbmRzIGJhcmVtZXRhbCBhbG9uZ3NpZGUgdGhlIGV4aXN0aW5nIEF0bW9zcGhlcmUgbmV0d29yayBiYWNrZW5kIG9ubHkgd2hlbiBvcGVyYXRvcnMgb3B0IGluIGJ5IGVuYWJsaW5nIG1hbmlmZXN0cy5kZXBsb3ltZW50X2lyb25pY19hZ2VudC4gSXQga2VlcHMgdGhlIGRlZmF1bHQgTmV1dHJvbiBkZXBsb3ltZW50IHVuY2hhbmdlZCwgd2hpbGUgbWFraW5nIHRoZSBvcHQtaW4gSXJvbmljIG5ldHdvcmtpbmcgcGF0aCBjb21wbGV0ZS4NCg0KIyMgTm90ZXMNCg0KVGhpcyBpbnRlbnRpb25hbGx5IHBvcnRzIG9ubHkgdGhlIGByb2xlcy9uZXV0cm9uL3ZhcnMvbWFpbi55bWxgIGFuZCBgcm9sZXMvbmV1dHJvbi90YXNrcy9tYWluLnltbGAgcG9ydGlvbnMgZnJvbSBgcmljb2xpbi9hdG1vc3BoZXJlIzExYC4gSXQgZG9lcyBub3Qgc2V0IGBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnRgOyBvcGVyYXRvcnMgc3RpbGwgb3B0IGluIHRocm91Z2ggYG5ldXRyb25faGVsbV92YWx1ZXNgLg0KDQojIyBWYWxpZGF0aW9uDQoNCi0gYHB5dGhvbjNgIFlBTUwgcGFyc2UgZm9yIGByb2xlcy9uZXV0cm9uL3ZhcnMvbWFpbi55bWxgIGFuZCBgcm9sZXMvbmV1dHJvbi90YXNrcy9tYWluLnltbGANCi0gbG9jYWwgYGFuc2libGUtcGxheWJvb2tgIHNtb2tlIHRlc3QgZm9yIGZhbHNlL3RydWUgYGRlcGxveW1lbnRfaXJvbmljX2FnZW50YCBjb25kaXRpb25hbCBiZWhhdmlvcg0KLSBgZ2l0IGRpZmYgLS1jaGVja2A=
      patchset: c9ee5c59a66d7d0b136536b9f287a685dbb6e356
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: 82e3e8b1292a25e38235bb92b157992d326531d1
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 348c7ff425450b0356e1d84589143dce260be74a
          untrusted/project_0/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: 348c7ff425450b0356e1d84589143dce260be74a
          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: 82e3e8b1292a25e38235bb92b157992d326531d1
          untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs:
            canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
            checkout: main
            commit: 310da0c3635c4a334a630c2ee2e1633ec24ef5b8
          untrusted/project_4/opendev.org/openstack/openstack-helm:
            canonical_name: opendev.org/openstack/openstack-helm
            checkout: master
            commit: 9d891d3e679b522832c216f23e30e64a9b400681
        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: 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: 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: b7fef434617ed47c562a4fef9764e335215c8b82
          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: 674315f2da475d25889d0b32a96ed0be580d8af3
          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: 1eca32b5d2506f6439b6b1b1ca0d8f6d307b8099
          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: 9eeca8b4b4c9adb61eec70d4390634a3627253fd
          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: 57739cbbd933f1b749b32d6f0f595e5ae2ca16be
          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: f69761f37cf6367d9693d0ac93c62b2c10e11cff
          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: 73f630a25d5c22f029e85298d9d47f3d94a014a6
          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: 62193e9ddde9e79c56f90d99f849a3471d119526
          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: b76f94376a9eb8e7f018da7539aa9e3b73557330
          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: dd81e0cf6faaf72269d115bc1d09b39332c4d6bc
          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: d00ec7f88fdc7ca2ce504a7e19c4049986cdac86
          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: 209cf2d60533d5094aaf0308765d2e538091f203
          name: openstack/ansible-collections-openstack
          required: true
          short_name: ansible-collections-openstack
          src_dir: src/opendev.org/openstack/ansible-collections-openstack
      ref: refs/pull/3925/head
      resources: {}
      tenant: oss
      timeout: 1800
      topic: null
      voting: true
