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.240
      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
      csi_driver: local-path-provisioner
      kube_vip_address: 172.17.0.100
      kube_vip_interface: '{{ ansible_facts[''default_ipv4''].interface }}'
      kubernetes_hostname: '{{ ansible_facts[''default_ipv4''].address }}'
      molecule_scenario: csi
      nodepool:
        az: nova
        cloud: public
        external_id: 504ff8ad-b0c1-4ff8-9fe0-44ac0b12b31b
        host_id: be92abac58cdf319c41ec3044bb265315879370c10aa7110cfdbfb5f
        interface_ip: 199.204.45.240
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.240
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.240
        public_ipv6: 2604:e100:1:0:f816:3eff:feaa:4c5e
        region: ca-ymq-1
        slot: null
      zuul_node:
        az: nova
        cloud: public
        external_id: 504ff8ad-b0c1-4ff8-9fe0-44ac0b12b31b
        host_id: be92abac58cdf319c41ec3044bb265315879370c10aa7110cfdbfb5f
        interface_ip: 199.204.45.240
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.240
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.240
        public_ipv6: 2604:e100:1:0:f816:3eff:feaa:4c5e
        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
    csi_driver: local-path-provisioner
    kube_vip_address: 172.17.0.100
    kube_vip_interface: '{{ ansible_facts[''default_ipv4''].interface }}'
    kubernetes_hostname: '{{ ansible_facts[''default_ipv4''].address }}'
    molecule_scenario: csi
    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.yaml@main#24>'
      - '<Job atmosphere-molecule-csi explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/atmosphere/.zuul.yaml@main#60>'
      - '<Job atmosphere-molecule-csi-local-path-provisioner explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/atmosphere/.zuul.yaml@main#67>'
      - '<Job atmosphere-molecule-csi-local-path-provisioner explicit: None implied:
        None source: vexxhost/atmosphere/.zuul.yaml@main#295>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: a71ad7572eb4419d9c5a0b56d97fcae0
      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: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        patchset: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        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: e25945bf466e429cb05a9422e58adafb
      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: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        patchset: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        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: 7b9aa0a8046faad089029449272c39fdb82cf8fe
      event_id: 5e4a1250-5250-11f1-99bc-2c9d03e4a5a3
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/a71ad7572eb4419d9c5a0b56d97fcae0/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/a71ad7572eb4419d9c5a0b56d97fcae0/work/logs
        result_data_file: /var/lib/zuul/builds/a71ad7572eb4419d9c5a0b56d97fcae0/work/results.json
        src_root: /var/lib/zuul/builds/a71ad7572eb4419d9c5a0b56d97fcae0/work/src
        work_root: /var/lib/zuul/builds/a71ad7572eb4419d9c5a0b56d97fcae0/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: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        patchset: 7b9aa0a8046faad089029449272c39fdb82cf8fe
        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-csi-local-path-provisioner
      jobtags: []
      max_attempts: 3
      message: ZmVhdChuZXV0cm9uKTogYWRkIG5ldXRyb24gaXJvbmljIGFnZW50IHN1cHBvcnQKCiMjIFN1bW1hcnkNCg0KLSBhZGQgTmV1dHJvbiBIZWxtIHZhbHVlcyBmb3IgdGhlIGJhcmVtZXRhbCBNTDIgYmFja2VuZCBhbmQgYFtpcm9uaWNdYCBjcmVkZW50aWFscw0KLSBhcHBlbmQgdGhvc2UgdmFsdWVzIG9ubHkgd2hlbiB0aGUgZmluYWwgSGVsbSB2YWx1ZXMgZW5hYmxlIGBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnRgDQotIHNvdXJjZSBJcm9uaWMgcmVnaW9uLCB1c2VybmFtZSwgYW5kIHBhc3N3b3JkIGZyb20gYG9wZW5zdGFja19oZWxtX2VuZHBvaW50c2AgaW5zdGVhZCBvZiBoYXJkY29kaW5nIEtleXN0b25lIGF1dGggZGV0YWlscw0KDQojIyMgc2hvcnQgdmVyc2lvbiBmb3IgaXJvbmljLW5ldXRyb24tYWdlbnQgIGFuZCBiYXJlbWV0YWwgZHJpdmVyIGludHJvDQoNCiAgaXJvbmljLW5ldXRyb24tYWdlbnQgdGVsbHMgTmV1dHJvbiB3aGljaCBwaHlzaWNhbCBuZXR3b3JrcyBlYWNoIElyb25pYyBiYXJlIG1ldGFsIG5vZGUgY2FuIHJlYWNoLiBUaGF0IGluZm9ybWF0aW9uIGxldHMgTmV1dHJvbg0KICBwbGFjZSBiYXJlIG1ldGFsIHBvcnRzIG9uIHRoZSByaWdodCBuZXR3b3JrIHNlZ21lbnQsIFZMQU4sIHByb3ZpZGVyIG5ldHdvcmssIG9yIHJvdXRlZCBwcm92aWRlciBuZXR3b3JrLg0KDQogIFRoaXMgUFIgZW5hYmxlcyB0d28gcmVxdWlyZWQgcGllY2VzIHRvZ2V0aGVyOg0KDQogIC0gaXJvbmljLW5ldXRyb24tYWdlbnQgc3luY3MgSXJvbmljIG5vZGUgYW5kIHBvcnQgbmV0d29yayBpbmZvcm1hdGlvbiBpbnRvIE5ldXRyb24uDQogIC0gYmFyZW1ldGFsIGluIG5ldHdvcmsuYmFja2VuZCBlbmFibGVzIHRoZSBNTDIgYmluZGluZyBwYXRoIGZvciBOZXV0cm9uIHBvcnRzIHVzaW5nIHZuaWNfdHlwZT1iYXJlbWV0YWwuDQoNCiAgV2l0aG91dCB0aGUgYmFyZW1ldGFsIGJhY2tlbmQsIHRoZSBhZ2VudCBjYW4gcmVwb3J0IHRoZSB0b3BvbG9neSwgYnV0IE5ldXRyb24gbWF5IHN0aWxsIGZhaWwgdG8gYmluZCBiYXJlIG1ldGFsIHBvcnRzIGJlY2F1c2UgTUwyDQogIGRvZXMgbm90IGhhdmUgdGhlIGRyaXZlciBmb3IgdGhhdCBiaW5kaW5nIHBhdGguDQoNCiAgVGhpcyBzdGF5cyBvcHQtaW4gdGhyb3VnaCBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnQsIHNvIHRoZSBkZWZhdWx0IE5ldXRyb24gZGVwbG95bWVudCByZW1haW5zIHVuY2hhbmdlZC4NCg0KIyMjIExvbmcgdmVyc2lvbiBmb3IgaXJvbmljLW5ldXRyb24tYWdlbnQgIGFuZCBiYXJlbWV0YWwgZHJpdmVyIGludHJvDQoNCmlyb25pYy1uZXV0cm9uLWFnZW50IGlzIGEgTmV1dHJvbi1zaWRlIHNlcnZpY2UgdXNlZCB3aXRoIE9wZW5TdGFjayBJcm9uaWMgYmFyZS1tZXRhbCBub2Rlcy4NCg0KSXRzIG1haW4gam9iIGlzIHRvIHRlbGwgTmV1dHJvbiB3aGljaCBwaHlzaWNhbCBuZXR3b3JrcyBlYWNoIGJhcmUtbWV0YWwgbm9kZSBjYW4gcmVhY2guIFRoaXMgYWxsb3dzIE5ldXRyb24gdG8gY29ycmVjdGx5IGJpbmQgYmFyZS1tZXRhbCBwb3J0cyB0byB0aGUgcmlnaHQgbmV0d29yayBzZWdtZW50LCBWTEFOLCBwcm92aWRlciBuZXR3b3JrLCBvciByb3V0ZWQgbmV0d29yay4NCg0KSW4gcHJhY3RpY2UsIGl0IGhlbHBzIHdpdGg6DQoNCiogTWFwcGluZyBJcm9uaWMgbm9kZXMgdG8gcGh5c2ljYWwgbmV0d29ya3MNCiogU3VwcG9ydGluZyBiYXJlLW1ldGFsIE5ldXRyb24gcG9ydCBiaW5kaW5nDQoqIEVuYWJsaW5nIHRlbmFudCwgcHJvdmlzaW9uaW5nLCBjbGVhbmluZywgYW5kIHJlc2N1ZSBuZXR3b3JrIHRyYW5zaXRpb25zDQoqIEhlbHBpbmcgTUwyL3N3aXRjaCBkcml2ZXJzIGNvbmZpZ3VyZSB0aGUgY29ycmVjdCBzd2l0Y2ggcG9ydHMgb3IgVkxBTnMNCiogU3VwcG9ydGluZyByb3V0ZWQgcHJvdmlkZXIgbmV0d29ya3MNCiogSW1wcm92aW5nIE9WTiBiYXJlLW1ldGFsIG5ldHdvcmtpbmcgZmVhdHVyZXMgaW4gbmV3ZXIgZGVwbG95bWVudHMNCg0KSXQgZG9lcyBub3QgcG93ZXIgb24gc2VydmVycywgaW5zdGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgcnVuIGluc2lkZSB0aGUgYmFyZS1tZXRhbCBub2RlLCBvciBkaXJlY3RseSBtYW5hZ2UgaGFyZHdhcmUuIFRob3NlIHRhc2tzIGFyZSBoYW5kbGVkIGJ5IElyb25pYywgaXJvbmljLXB5dGhvbi1hZ2VudCwgYW5kIGhhcmR3YXJlIGRyaXZlcnMuDQoNCkluIHNob3J0OiBpcm9uaWMtbmV1dHJvbi1hZ2VudCBsZXRzIE5ldXRyb24gdW5kZXJzdGFuZCBhbmQgbWFuYWdlIG5ldHdvcmtpbmcgZm9yIElyb25pYyBiYXJlLW1ldGFsIG5vZGVzLg0KDQpBZGRpbmcgc29tZSBjb250ZXh0IG9uIHdoeSB0aGlzIFBSIGVuYWJsZXMgdGhlIGJhcmVtZXRhbCBNTDIgYmFja2VuZCB0b2dldGhlciB3aXRoIHRoZSBOZXV0cm9uIElyb25pYyBhZ2VudDoNCg0KVGhlIE5ldXRyb24gSXJvbmljIGFnZW50IGlzIG9ubHkgdGhlIHNlcnZpY2UgdGhhdCByZXBvcnRzIElyb25pYyBiYXJlIG1ldGFsIHBvcnQgYW5kIHBoeXNpY2FsIG5ldHdvcmsgaW5mb3JtYXRpb24gYmFjayB0byBOZXV0cm9uLiBUaGF0IGdpdmVzIE5ldXRyb24gdGhlIGludmVudG9yeSBhbmQgcmVhY2hhYmlsaXR5IGRhdGEgaXQgbmVlZHMsIGJ1dCBpdCBkb2VzIG5vdCBieSBpdHNlbGYgdGVhY2ggTUwyIGhvdyB0byBiaW5kIGEgTmV1dHJvbiBwb3J0IHdob3NlIGJpbmRpbmc6dm5pY190eXBlIGlzIGJhcmVtZXRhbC4NCg0KRm9yIHRoZSBiaW5kIGZsb3cgdG8gd29yayBlbmQgdG8gZW5kLCBOZXV0cm9uIGFsc28gbmVlZHMgdGhlIGJhcmVtZXRhbCBtZWNoYW5pc20vYmFja2VuZCBlbmFibGVkIGluIG5ldHdvcmsuYmFja2VuZC4gVGhhdCBiYWNrZW5kIGlzIHdoYXQgbGV0cyBNTDIgcmVjb2duaXplIGJhcmUgbWV0YWwgcG9ydHMsIHVzZSB0aGUgSXJvbmljLXNpZGUgcGh5c2ljYWwgbmV0d29yayBpbmZvcm1hdGlvbiwgYW5kIHByb2R1Y2UgYSB2YWxpZCBiaW5kaW5nIGZvciBwcm92aWRlciBvciByb3V0ZWQgcHJvdmlkZXIgbmV0d29ya3MuIFdpdGhvdXQgaXQsIHdlIGNhbiBkZXBsb3kgaXJvbmljLW5ldXRyb24tYWdlbnQsIGJ1dCBOZXV0cm9uIGNhbiBzdGlsbCByZWplY3Qgb3IgZmFpbCB0byBiaW5kIGJhcmUgbWV0YWwgcG9ydHMgYmVjYXVzZSB0aGUgTUwyIGJhY2tlbmQgbGlzdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkcml2ZXIgcmVzcG9uc2libGUgZm9yIHRoYXQgYmluZGluZyBwYXRoLg0KDQpTbyB0aGVzZSB0d28gcGllY2VzIGNvdmVyIGRpZmZlcmVudCBzaWRlcyBvZiB0aGUgc2FtZSBmZWF0dXJlOg0KDQppcm9uaWMtbmV1dHJvbi1hZ2VudCBzeW5jcyBJcm9uaWMgbm9kZS9wb3J0IG5ldHdvcmsgaW5mb3JtYXRpb24gaW50byBOZXV0cm9uLg0KYmFyZW1ldGFsIGluIG5ldHdvcmsuYmFja2VuZCBlbmFibGVzIHRoZSBNTDIgYmluZGluZyBwYXRoIGZvciBOZXV0cm9uIHBvcnRzIHVzaW5nIHZuaWNfdHlwZT1iYXJlbWV0YWwuDQpUaGF0IGlzIHdoeSB0aGlzIGNoYW5nZSBhcHBlbmRzIGJhcmVtZXRhbCBhbG9uZ3NpZGUgdGhlIGV4aXN0aW5nIEF0bW9zcGhlcmUgbmV0d29yayBiYWNrZW5kIG9ubHkgd2hlbiBvcGVyYXRvcnMgb3B0IGluIGJ5IGVuYWJsaW5nIG1hbmlmZXN0cy5kZXBsb3ltZW50X2lyb25pY19hZ2VudC4gSXQga2VlcHMgdGhlIGRlZmF1bHQgTmV1dHJvbiBkZXBsb3ltZW50IHVuY2hhbmdlZCwgd2hpbGUgbWFraW5nIHRoZSBvcHQtaW4gSXJvbmljIG5ldHdvcmtpbmcgcGF0aCBjb21wbGV0ZS4NCg0KIyMgTm90ZXMNCg0KVGhpcyBpbnRlbnRpb25hbGx5IHBvcnRzIG9ubHkgdGhlIGByb2xlcy9uZXV0cm9uL3ZhcnMvbWFpbi55bWxgIGFuZCBgcm9sZXMvbmV1dHJvbi90YXNrcy9tYWluLnltbGAgcG9ydGlvbnMgZnJvbSBgcmljb2xpbi9hdG1vc3BoZXJlIzExYC4gSXQgZG9lcyBub3Qgc2V0IGBtYW5pZmVzdHMuZGVwbG95bWVudF9pcm9uaWNfYWdlbnRgOyBvcGVyYXRvcnMgc3RpbGwgb3B0IGluIHRocm91Z2ggYG5ldXRyb25faGVsbV92YWx1ZXNgLg0KDQojIyBWYWxpZGF0aW9uDQoNCi0gYHB5dGhvbjNgIFlBTUwgcGFyc2UgZm9yIGByb2xlcy9uZXV0cm9uL3ZhcnMvbWFpbi55bWxgIGFuZCBgcm9sZXMvbmV1dHJvbi90YXNrcy9tYWluLnltbGANCi0gbG9jYWwgYGFuc2libGUtcGxheWJvb2tgIHNtb2tlIHRlc3QgZm9yIGZhbHNlL3RydWUgYGRlcGxveW1lbnRfaXJvbmljX2FnZW50YCBjb25kaXRpb25hbCBiZWhhdmlvcg0KLSBgZ2l0IGRpZmYgLS1jaGVja2A=
      patchset: 7b9aa0a8046faad089029449272c39fdb82cf8fe
      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: 79fe3eb1d01f8ac5739b0b7bc4759c407b6e248d
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          untrusted/project_0/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: a6e68243e02ef030ce5e75f8b67630880c475f33
          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: 79fe3eb1d01f8ac5739b0b7bc4759c407b6e248d
          untrusted/project_3/github.com/vexxhost/atmosphere:
            canonical_name: github.com/vexxhost/atmosphere
            checkout: main
            commit: 7b9aa0a8046faad089029449272c39fdb82cf8fe
          untrusted/project_4/opendev.org/openstack/openstack-helm:
            canonical_name: opendev.org/openstack/openstack-helm
            checkout: master
            commit: e79e63b873c58cd2b7569ef0a21c26122b32e7ea
        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/test-playbooks/molecule/post.yml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/post_playbook_0/role_0/atmosphere
            link_target: untrusted/project_3/github.com/vexxhost/atmosphere
            role_path: ansible/post_playbook_0/role_0/atmosphere/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/test-playbooks/molecule/pre.yml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/pre_playbook_2/role_0/atmosphere
            link_target: untrusted/project_3/github.com/vexxhost/atmosphere
            role_path: ansible/pre_playbook_2/role_0/atmosphere/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/vexxhost/atmosphere:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          checkout: main
          checkout_description: zuul branch
          commit: 7b9aa0a8046faad089029449272c39fdb82cf8fe
          name: vexxhost/atmosphere
          required: false
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
      ref: refs/pull/3925/head
      resources: {}
      tenant: oss
      timeout: 1800
      topic: null
      voting: true
