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.116
      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: a9d677f3-74d7-4b82-a10e-bc85bc50f92b
        host_id: 571d5e5ab8f99eb6066d22838dc03059a55de74ec327a875b342f73d
        interface_ip: 199.204.45.116
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.116
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.116
        public_ipv6: 2604:e100:1:0:f816:3eff:fef4:5aa4
        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: a9d677f3-74d7-4b82-a10e-bc85bc50f92b
        host_id: 571d5e5ab8f99eb6066d22838dc03059a55de74ec327a875b342f73d
        interface_ip: 199.204.45.116
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 199.204.45.116
        private_ipv6: null
        provider: yul1
        public_ipv4: 199.204.45.116
        public_ipv6: 2604:e100:1:0:f816:3eff:fef4:5aa4
        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#276>'
      - '<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: 9f1b17ccc4c64f89b6b8f4354f47b180
      build_refs:
      - branch: main
        change: '4142'
        change_message: 'feat(monitoring): add Thanos metrics archival


          Closes #524


          ## What


          - vendor the Thanos 15.7.15 Helm chart, matching the Thanos 0.35.1 sidecar
          supported by the current Prometheus Operator

          - pin the chart workloads and optional MinIO subchart to published `bitnamilegacy`
          images

          - add an opt-in `thanos` role that deploys Query, Query Frontend, Store
          Gateway, and Compactor

          - configure the kube-prometheus-stack sidecar and object-storage Secret,
          and route Grafana queries through Query Frontend

          - add production defaults for replicas, hard pod anti-affinity, disruption
          budgets, and explicit resource requests and limits

          - validate externally managed object-storage Secrets before deployment and
          support configured kube-prometheus-stack release names

          - add AIO verification for rollouts, live queries, StoreAPI health, Prometheus
          sidecar configuration, and the Grafana datasource

          - document production placement and the required single-node overrides


          ## Why


          Prometheus currently keeps metrics only in its local persistent volume.
          Thanos uploads blocks to S3-compatible object storage and provides a Prometheus-compatible
          query path across recent and archived data.


          ## Operator impact


          Thanos remains disabled by default. Enabling it requires a dedicated S3-compatible
          bucket plus either `thanos_object_storage_config` or `thanos_object_storage_existing_secret`.
          Thanos and kube-prometheus-stack must share a namespace because both mount
          the same object-storage Secret.


          The production defaults run three Query, three Query Frontend, and three
          Store Gateway replicas with hard pod anti-affinity, `minAvailable: 2` disruption
          budgets, and explicit resource sizing. Three eligible control-plane nodes
          are required. Query and Query Frontend use `maxSurge: 0` and `maxUnavailable:
          1`, retaining two available replicas while rolling across those same three
          nodes.


          A single-node AIO must use:


          ```yaml

          thanos_query_replicas: 1

          thanos_query_frontend_replicas: 1

          thanos_store_gateway_replicas: 1

          thanos_pod_anti_affinity_preset: soft

          thanos_pdb_min_available: 0

          thanos_store_gateway_storage_size: 5Gi

          thanos_compactor_storage_size: 10Gi

          ```


          The production replica count cannot schedule on an AIO, so the AIO runs
          one replica and soft anti-affinity. A production disruption budget of two
          also prevents voluntary eviction from the only node, so the AIO uses zero.
          The production persistence sizes work on AIO but are intentionally reduced
          to avoid wasting storage. The default resource requests and limits fit and
          were retained in the AIO validation.


          ## Validation


          - `go test ./roles/thanos ./charts`

          - targeted `go test ./roles/kube_prometheus_stack` coverage for both inline
          and existing object-storage Secret tasks

          - `helm lint charts/thanos` with Query Frontend, Compactor, Store Gateway,
          persistence, disruption budgets, and an existing object-storage Secret enabled

          - `ansible-playbook --syntax-check -i localhost, molecule/aio/verify.yml`

          - targeted pre-commit end-of-file, trailing-whitespace, and mixed-line-ending
          hooks

          - rendered production manifests contain three replicas, PDB minimum two,
          hard anti-affinity, and a no-surge/one-unavailable Deployment rollout

          - live OVN AIO tag-scoped deployment with production resource sizing and
          explicit single-node placement overrides

          - live verifier passed all rollouts, a non-empty Query Frontend query, healthy
          Sidecar and Store Gateway endpoints, the Prometheus sidecar/object-storage
          configuration, and the Grafana datasource

          - both inline object-storage configuration and externally managed Secret
          deployment paths passed; the latter remained idempotent

          - a repeated tag-scoped deployment completed with `changed=0`, `failed=0`

          - the Prometheus sidecar uploaded a real block with zero upload failures;
          Store Gateway loaded the block and a query filtered exclusively to Store
          Gateway returned archived data


          `tox -e docs` also parsed the new monitoring section without a warning,
          but the repository-wide build remains non-zero on pre-existing missing image
          Dockerfile includes, an existing title underline, and an existing duplicate
          target.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4142
        commit_id: 75ff540db155bcd93f06d3cf486d00345696548a
        patchset: 75ff540db155bcd93f06d3cf486d00345696548a
        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: 588e46690cd743209ac52fbcc7733f55
      buildset_refs:
      - branch: main
        change: '4142'
        change_message: 'feat(monitoring): add Thanos metrics archival


          Closes #524


          ## What


          - vendor the Thanos 15.7.15 Helm chart, matching the Thanos 0.35.1 sidecar
          supported by the current Prometheus Operator

          - pin the chart workloads and optional MinIO subchart to published `bitnamilegacy`
          images

          - add an opt-in `thanos` role that deploys Query, Query Frontend, Store
          Gateway, and Compactor

          - configure the kube-prometheus-stack sidecar and object-storage Secret,
          and route Grafana queries through Query Frontend

          - add production defaults for replicas, hard pod anti-affinity, disruption
          budgets, and explicit resource requests and limits

          - validate externally managed object-storage Secrets before deployment and
          support configured kube-prometheus-stack release names

          - add AIO verification for rollouts, live queries, StoreAPI health, Prometheus
          sidecar configuration, and the Grafana datasource

          - document production placement and the required single-node overrides


          ## Why


          Prometheus currently keeps metrics only in its local persistent volume.
          Thanos uploads blocks to S3-compatible object storage and provides a Prometheus-compatible
          query path across recent and archived data.


          ## Operator impact


          Thanos remains disabled by default. Enabling it requires a dedicated S3-compatible
          bucket plus either `thanos_object_storage_config` or `thanos_object_storage_existing_secret`.
          Thanos and kube-prometheus-stack must share a namespace because both mount
          the same object-storage Secret.


          The production defaults run three Query, three Query Frontend, and three
          Store Gateway replicas with hard pod anti-affinity, `minAvailable: 2` disruption
          budgets, and explicit resource sizing. Three eligible control-plane nodes
          are required. Query and Query Frontend use `maxSurge: 0` and `maxUnavailable:
          1`, retaining two available replicas while rolling across those same three
          nodes.


          A single-node AIO must use:


          ```yaml

          thanos_query_replicas: 1

          thanos_query_frontend_replicas: 1

          thanos_store_gateway_replicas: 1

          thanos_pod_anti_affinity_preset: soft

          thanos_pdb_min_available: 0

          thanos_store_gateway_storage_size: 5Gi

          thanos_compactor_storage_size: 10Gi

          ```


          The production replica count cannot schedule on an AIO, so the AIO runs
          one replica and soft anti-affinity. A production disruption budget of two
          also prevents voluntary eviction from the only node, so the AIO uses zero.
          The production persistence sizes work on AIO but are intentionally reduced
          to avoid wasting storage. The default resource requests and limits fit and
          were retained in the AIO validation.


          ## Validation


          - `go test ./roles/thanos ./charts`

          - targeted `go test ./roles/kube_prometheus_stack` coverage for both inline
          and existing object-storage Secret tasks

          - `helm lint charts/thanos` with Query Frontend, Compactor, Store Gateway,
          persistence, disruption budgets, and an existing object-storage Secret enabled

          - `ansible-playbook --syntax-check -i localhost, molecule/aio/verify.yml`

          - targeted pre-commit end-of-file, trailing-whitespace, and mixed-line-ending
          hooks

          - rendered production manifests contain three replicas, PDB minimum two,
          hard anti-affinity, and a no-surge/one-unavailable Deployment rollout

          - live OVN AIO tag-scoped deployment with production resource sizing and
          explicit single-node placement overrides

          - live verifier passed all rollouts, a non-empty Query Frontend query, healthy
          Sidecar and Store Gateway endpoints, the Prometheus sidecar/object-storage
          configuration, and the Grafana datasource

          - both inline object-storage configuration and externally managed Secret
          deployment paths passed; the latter remained idempotent

          - a repeated tag-scoped deployment completed with `changed=0`, `failed=0`

          - the Prometheus sidecar uploaded a real block with zero upload failures;
          Store Gateway loaded the block and a query filtered exclusively to Store
          Gateway returned archived data


          `tox -e docs` also parsed the new monitoring section without a warning,
          but the repository-wide build remains non-zero on pre-existing missing image
          Dockerfile includes, an existing title underline, and an existing duplicate
          target.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4142
        commit_id: 75ff540db155bcd93f06d3cf486d00345696548a
        patchset: 75ff540db155bcd93f06d3cf486d00345696548a
        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: '4142'
      change_message: 'feat(monitoring): add Thanos metrics archival


        Closes #524


        ## What


        - vendor the Thanos 15.7.15 Helm chart, matching the Thanos 0.35.1 sidecar
        supported by the current Prometheus Operator

        - pin the chart workloads and optional MinIO subchart to published `bitnamilegacy`
        images

        - add an opt-in `thanos` role that deploys Query, Query Frontend, Store Gateway,
        and Compactor

        - configure the kube-prometheus-stack sidecar and object-storage Secret, and
        route Grafana queries through Query Frontend

        - add production defaults for replicas, hard pod anti-affinity, disruption
        budgets, and explicit resource requests and limits

        - validate externally managed object-storage Secrets before deployment and
        support configured kube-prometheus-stack release names

        - add AIO verification for rollouts, live queries, StoreAPI health, Prometheus
        sidecar configuration, and the Grafana datasource

        - document production placement and the required single-node overrides


        ## Why


        Prometheus currently keeps metrics only in its local persistent volume. Thanos
        uploads blocks to S3-compatible object storage and provides a Prometheus-compatible
        query path across recent and archived data.


        ## Operator impact


        Thanos remains disabled by default. Enabling it requires a dedicated S3-compatible
        bucket plus either `thanos_object_storage_config` or `thanos_object_storage_existing_secret`.
        Thanos and kube-prometheus-stack must share a namespace because both mount
        the same object-storage Secret.


        The production defaults run three Query, three Query Frontend, and three Store
        Gateway replicas with hard pod anti-affinity, `minAvailable: 2` disruption
        budgets, and explicit resource sizing. Three eligible control-plane nodes
        are required. Query and Query Frontend use `maxSurge: 0` and `maxUnavailable:
        1`, retaining two available replicas while rolling across those same three
        nodes.


        A single-node AIO must use:


        ```yaml

        thanos_query_replicas: 1

        thanos_query_frontend_replicas: 1

        thanos_store_gateway_replicas: 1

        thanos_pod_anti_affinity_preset: soft

        thanos_pdb_min_available: 0

        thanos_store_gateway_storage_size: 5Gi

        thanos_compactor_storage_size: 10Gi

        ```


        The production replica count cannot schedule on an AIO, so the AIO runs one
        replica and soft anti-affinity. A production disruption budget of two also
        prevents voluntary eviction from the only node, so the AIO uses zero. The
        production persistence sizes work on AIO but are intentionally reduced to
        avoid wasting storage. The default resource requests and limits fit and were
        retained in the AIO validation.


        ## Validation


        - `go test ./roles/thanos ./charts`

        - targeted `go test ./roles/kube_prometheus_stack` coverage for both inline
        and existing object-storage Secret tasks

        - `helm lint charts/thanos` with Query Frontend, Compactor, Store Gateway,
        persistence, disruption budgets, and an existing object-storage Secret enabled

        - `ansible-playbook --syntax-check -i localhost, molecule/aio/verify.yml`

        - targeted pre-commit end-of-file, trailing-whitespace, and mixed-line-ending
        hooks

        - rendered production manifests contain three replicas, PDB minimum two, hard
        anti-affinity, and a no-surge/one-unavailable Deployment rollout

        - live OVN AIO tag-scoped deployment with production resource sizing and explicit
        single-node placement overrides

        - live verifier passed all rollouts, a non-empty Query Frontend query, healthy
        Sidecar and Store Gateway endpoints, the Prometheus sidecar/object-storage
        configuration, and the Grafana datasource

        - both inline object-storage configuration and externally managed Secret deployment
        paths passed; the latter remained idempotent

        - a repeated tag-scoped deployment completed with `changed=0`, `failed=0`

        - the Prometheus sidecar uploaded a real block with zero upload failures;
        Store Gateway loaded the block and a query filtered exclusively to Store Gateway
        returned archived data


        `tox -e docs` also parsed the new monitoring section without a warning, but
        the repository-wide build remains non-zero on pre-existing missing image Dockerfile
        includes, an existing title underline, and an existing duplicate target.

        '
      change_url: https://github.com/vexxhost/atmosphere/pull/4142
      child_jobs: []
      commit_id: 75ff540db155bcd93f06d3cf486d00345696548a
      event_id: 2027c050-81f6-11f1-8570-ea76a17641d6
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/9f1b17ccc4c64f89b6b8f4354f47b180/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/9f1b17ccc4c64f89b6b8f4354f47b180/work/logs
        result_data_file: /var/lib/zuul/builds/9f1b17ccc4c64f89b6b8f4354f47b180/work/results.json
        src_root: /var/lib/zuul/builds/9f1b17ccc4c64f89b6b8f4354f47b180/work/src
        work_root: /var/lib/zuul/builds/9f1b17ccc4c64f89b6b8f4354f47b180/work
      include_vars: []
      items:
      - branch: main
        change: '4142'
        change_message: 'feat(monitoring): add Thanos metrics archival


          Closes #524


          ## What


          - vendor the Thanos 15.7.15 Helm chart, matching the Thanos 0.35.1 sidecar
          supported by the current Prometheus Operator

          - pin the chart workloads and optional MinIO subchart to published `bitnamilegacy`
          images

          - add an opt-in `thanos` role that deploys Query, Query Frontend, Store
          Gateway, and Compactor

          - configure the kube-prometheus-stack sidecar and object-storage Secret,
          and route Grafana queries through Query Frontend

          - add production defaults for replicas, hard pod anti-affinity, disruption
          budgets, and explicit resource requests and limits

          - validate externally managed object-storage Secrets before deployment and
          support configured kube-prometheus-stack release names

          - add AIO verification for rollouts, live queries, StoreAPI health, Prometheus
          sidecar configuration, and the Grafana datasource

          - document production placement and the required single-node overrides


          ## Why


          Prometheus currently keeps metrics only in its local persistent volume.
          Thanos uploads blocks to S3-compatible object storage and provides a Prometheus-compatible
          query path across recent and archived data.


          ## Operator impact


          Thanos remains disabled by default. Enabling it requires a dedicated S3-compatible
          bucket plus either `thanos_object_storage_config` or `thanos_object_storage_existing_secret`.
          Thanos and kube-prometheus-stack must share a namespace because both mount
          the same object-storage Secret.


          The production defaults run three Query, three Query Frontend, and three
          Store Gateway replicas with hard pod anti-affinity, `minAvailable: 2` disruption
          budgets, and explicit resource sizing. Three eligible control-plane nodes
          are required. Query and Query Frontend use `maxSurge: 0` and `maxUnavailable:
          1`, retaining two available replicas while rolling across those same three
          nodes.


          A single-node AIO must use:


          ```yaml

          thanos_query_replicas: 1

          thanos_query_frontend_replicas: 1

          thanos_store_gateway_replicas: 1

          thanos_pod_anti_affinity_preset: soft

          thanos_pdb_min_available: 0

          thanos_store_gateway_storage_size: 5Gi

          thanos_compactor_storage_size: 10Gi

          ```


          The production replica count cannot schedule on an AIO, so the AIO runs
          one replica and soft anti-affinity. A production disruption budget of two
          also prevents voluntary eviction from the only node, so the AIO uses zero.
          The production persistence sizes work on AIO but are intentionally reduced
          to avoid wasting storage. The default resource requests and limits fit and
          were retained in the AIO validation.


          ## Validation


          - `go test ./roles/thanos ./charts`

          - targeted `go test ./roles/kube_prometheus_stack` coverage for both inline
          and existing object-storage Secret tasks

          - `helm lint charts/thanos` with Query Frontend, Compactor, Store Gateway,
          persistence, disruption budgets, and an existing object-storage Secret enabled

          - `ansible-playbook --syntax-check -i localhost, molecule/aio/verify.yml`

          - targeted pre-commit end-of-file, trailing-whitespace, and mixed-line-ending
          hooks

          - rendered production manifests contain three replicas, PDB minimum two,
          hard anti-affinity, and a no-surge/one-unavailable Deployment rollout

          - live OVN AIO tag-scoped deployment with production resource sizing and
          explicit single-node placement overrides

          - live verifier passed all rollouts, a non-empty Query Frontend query, healthy
          Sidecar and Store Gateway endpoints, the Prometheus sidecar/object-storage
          configuration, and the Grafana datasource

          - both inline object-storage configuration and externally managed Secret
          deployment paths passed; the latter remained idempotent

          - a repeated tag-scoped deployment completed with `changed=0`, `failed=0`

          - the Prometheus sidecar uploaded a real block with zero upload failures;
          Store Gateway loaded the block and a query filtered exclusively to Store
          Gateway returned archived data


          `tox -e docs` also parsed the new monitoring section without a warning,
          but the repository-wide build remains non-zero on pre-existing missing image
          Dockerfile includes, an existing title underline, and an existing duplicate
          target.

          '
        change_url: https://github.com/vexxhost/atmosphere/pull/4142
        commit_id: 75ff540db155bcd93f06d3cf486d00345696548a
        patchset: 75ff540db155bcd93f06d3cf486d00345696548a
        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: ZmVhdChtb25pdG9yaW5nKTogYWRkIFRoYW5vcyBtZXRyaWNzIGFyY2hpdmFsCgpDbG9zZXMgIzUyNAoKIyMgV2hhdAoKLSB2ZW5kb3IgdGhlIFRoYW5vcyAxNS43LjE1IEhlbG0gY2hhcnQsIG1hdGNoaW5nIHRoZSBUaGFub3MgMC4zNS4xIHNpZGVjYXIgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFByb21ldGhldXMgT3BlcmF0b3IKLSBwaW4gdGhlIGNoYXJ0IHdvcmtsb2FkcyBhbmQgb3B0aW9uYWwgTWluSU8gc3ViY2hhcnQgdG8gcHVibGlzaGVkIGBiaXRuYW1pbGVnYWN5YCBpbWFnZXMKLSBhZGQgYW4gb3B0LWluIGB0aGFub3NgIHJvbGUgdGhhdCBkZXBsb3lzIFF1ZXJ5LCBRdWVyeSBGcm9udGVuZCwgU3RvcmUgR2F0ZXdheSwgYW5kIENvbXBhY3RvcgotIGNvbmZpZ3VyZSB0aGUga3ViZS1wcm9tZXRoZXVzLXN0YWNrIHNpZGVjYXIgYW5kIG9iamVjdC1zdG9yYWdlIFNlY3JldCwgYW5kIHJvdXRlIEdyYWZhbmEgcXVlcmllcyB0aHJvdWdoIFF1ZXJ5IEZyb250ZW5kCi0gYWRkIHByb2R1Y3Rpb24gZGVmYXVsdHMgZm9yIHJlcGxpY2FzLCBoYXJkIHBvZCBhbnRpLWFmZmluaXR5LCBkaXNydXB0aW9uIGJ1ZGdldHMsIGFuZCBleHBsaWNpdCByZXNvdXJjZSByZXF1ZXN0cyBhbmQgbGltaXRzCi0gdmFsaWRhdGUgZXh0ZXJuYWxseSBtYW5hZ2VkIG9iamVjdC1zdG9yYWdlIFNlY3JldHMgYmVmb3JlIGRlcGxveW1lbnQgYW5kIHN1cHBvcnQgY29uZmlndXJlZCBrdWJlLXByb21ldGhldXMtc3RhY2sgcmVsZWFzZSBuYW1lcwotIGFkZCBBSU8gdmVyaWZpY2F0aW9uIGZvciByb2xsb3V0cywgbGl2ZSBxdWVyaWVzLCBTdG9yZUFQSSBoZWFsdGgsIFByb21ldGhldXMgc2lkZWNhciBjb25maWd1cmF0aW9uLCBhbmQgdGhlIEdyYWZhbmEgZGF0YXNvdXJjZQotIGRvY3VtZW50IHByb2R1Y3Rpb24gcGxhY2VtZW50IGFuZCB0aGUgcmVxdWlyZWQgc2luZ2xlLW5vZGUgb3ZlcnJpZGVzCgojIyBXaHkKClByb21ldGhldXMgY3VycmVudGx5IGtlZXBzIG1ldHJpY3Mgb25seSBpbiBpdHMgbG9jYWwgcGVyc2lzdGVudCB2b2x1bWUuIFRoYW5vcyB1cGxvYWRzIGJsb2NrcyB0byBTMy1jb21wYXRpYmxlIG9iamVjdCBzdG9yYWdlIGFuZCBwcm92aWRlcyBhIFByb21ldGhldXMtY29tcGF0aWJsZSBxdWVyeSBwYXRoIGFjcm9zcyByZWNlbnQgYW5kIGFyY2hpdmVkIGRhdGEuCgojIyBPcGVyYXRvciBpbXBhY3QKClRoYW5vcyByZW1haW5zIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEVuYWJsaW5nIGl0IHJlcXVpcmVzIGEgZGVkaWNhdGVkIFMzLWNvbXBhdGlibGUgYnVja2V0IHBsdXMgZWl0aGVyIGB0aGFub3Nfb2JqZWN0X3N0b3JhZ2VfY29uZmlnYCBvciBgdGhhbm9zX29iamVjdF9zdG9yYWdlX2V4aXN0aW5nX3NlY3JldGAuIFRoYW5vcyBhbmQga3ViZS1wcm9tZXRoZXVzLXN0YWNrIG11c3Qgc2hhcmUgYSBuYW1lc3BhY2UgYmVjYXVzZSBib3RoIG1vdW50IHRoZSBzYW1lIG9iamVjdC1zdG9yYWdlIFNlY3JldC4KClRoZSBwcm9kdWN0aW9uIGRlZmF1bHRzIHJ1biB0aHJlZSBRdWVyeSwgdGhyZWUgUXVlcnkgRnJvbnRlbmQsIGFuZCB0aHJlZSBTdG9yZSBHYXRld2F5IHJlcGxpY2FzIHdpdGggaGFyZCBwb2QgYW50aS1hZmZpbml0eSwgYG1pbkF2YWlsYWJsZTogMmAgZGlzcnVwdGlvbiBidWRnZXRzLCBhbmQgZXhwbGljaXQgcmVzb3VyY2Ugc2l6aW5nLiBUaHJlZSBlbGlnaWJsZSBjb250cm9sLXBsYW5lIG5vZGVzIGFyZSByZXF1aXJlZC4gUXVlcnkgYW5kIFF1ZXJ5IEZyb250ZW5kIHVzZSBgbWF4U3VyZ2U6IDBgIGFuZCBgbWF4VW5hdmFpbGFibGU6IDFgLCByZXRhaW5pbmcgdHdvIGF2YWlsYWJsZSByZXBsaWNhcyB3aGlsZSByb2xsaW5nIGFjcm9zcyB0aG9zZSBzYW1lIHRocmVlIG5vZGVzLgoKQSBzaW5nbGUtbm9kZSBBSU8gbXVzdCB1c2U6CgpgYGB5YW1sCnRoYW5vc19xdWVyeV9yZXBsaWNhczogMQp0aGFub3NfcXVlcnlfZnJvbnRlbmRfcmVwbGljYXM6IDEKdGhhbm9zX3N0b3JlX2dhdGV3YXlfcmVwbGljYXM6IDEKdGhhbm9zX3BvZF9hbnRpX2FmZmluaXR5X3ByZXNldDogc29mdAp0aGFub3NfcGRiX21pbl9hdmFpbGFibGU6IDAKdGhhbm9zX3N0b3JlX2dhdGV3YXlfc3RvcmFnZV9zaXplOiA1R2kKdGhhbm9zX2NvbXBhY3Rvcl9zdG9yYWdlX3NpemU6IDEwR2kKYGBgCgpUaGUgcHJvZHVjdGlvbiByZXBsaWNhIGNvdW50IGNhbm5vdCBzY2hlZHVsZSBvbiBhbiBBSU8sIHNvIHRoZSBBSU8gcnVucyBvbmUgcmVwbGljYSBhbmQgc29mdCBhbnRpLWFmZmluaXR5LiBBIHByb2R1Y3Rpb24gZGlzcnVwdGlvbiBidWRnZXQgb2YgdHdvIGFsc28gcHJldmVudHMgdm9sdW50YXJ5IGV2aWN0aW9uIGZyb20gdGhlIG9ubHkgbm9kZSwgc28gdGhlIEFJTyB1c2VzIHplcm8uIFRoZSBwcm9kdWN0aW9uIHBlcnNpc3RlbmNlIHNpemVzIHdvcmsgb24gQUlPIGJ1dCBhcmUgaW50ZW50aW9uYWxseSByZWR1Y2VkIHRvIGF2b2lkIHdhc3Rpbmcgc3RvcmFnZS4gVGhlIGRlZmF1bHQgcmVzb3VyY2UgcmVxdWVzdHMgYW5kIGxpbWl0cyBmaXQgYW5kIHdlcmUgcmV0YWluZWQgaW4gdGhlIEFJTyB2YWxpZGF0aW9uLgoKIyMgVmFsaWRhdGlvbgoKLSBgZ28gdGVzdCAuL3JvbGVzL3RoYW5vcyAuL2NoYXJ0c2AKLSB0YXJnZXRlZCBgZ28gdGVzdCAuL3JvbGVzL2t1YmVfcHJvbWV0aGV1c19zdGFja2AgY292ZXJhZ2UgZm9yIGJvdGggaW5saW5lIGFuZCBleGlzdGluZyBvYmplY3Qtc3RvcmFnZSBTZWNyZXQgdGFza3MKLSBgaGVsbSBsaW50IGNoYXJ0cy90aGFub3NgIHdpdGggUXVlcnkgRnJvbnRlbmQsIENvbXBhY3RvciwgU3RvcmUgR2F0ZXdheSwgcGVyc2lzdGVuY2UsIGRpc3J1cHRpb24gYnVkZ2V0cywgYW5kIGFuIGV4aXN0aW5nIG9iamVjdC1zdG9yYWdlIFNlY3JldCBlbmFibGVkCi0gYGFuc2libGUtcGxheWJvb2sgLS1zeW50YXgtY2hlY2sgLWkgbG9jYWxob3N0LCBtb2xlY3VsZS9haW8vdmVyaWZ5LnltbGAKLSB0YXJnZXRlZCBwcmUtY29tbWl0IGVuZC1vZi1maWxlLCB0cmFpbGluZy13aGl0ZXNwYWNlLCBhbmQgbWl4ZWQtbGluZS1lbmRpbmcgaG9va3MKLSByZW5kZXJlZCBwcm9kdWN0aW9uIG1hbmlmZXN0cyBjb250YWluIHRocmVlIHJlcGxpY2FzLCBQREIgbWluaW11bSB0d28sIGhhcmQgYW50aS1hZmZpbml0eSwgYW5kIGEgbm8tc3VyZ2Uvb25lLXVuYXZhaWxhYmxlIERlcGxveW1lbnQgcm9sbG91dAotIGxpdmUgT1ZOIEFJTyB0YWctc2NvcGVkIGRlcGxveW1lbnQgd2l0aCBwcm9kdWN0aW9uIHJlc291cmNlIHNpemluZyBhbmQgZXhwbGljaXQgc2luZ2xlLW5vZGUgcGxhY2VtZW50IG92ZXJyaWRlcwotIGxpdmUgdmVyaWZpZXIgcGFzc2VkIGFsbCByb2xsb3V0cywgYSBub24tZW1wdHkgUXVlcnkgRnJvbnRlbmQgcXVlcnksIGhlYWx0aHkgU2lkZWNhciBhbmQgU3RvcmUgR2F0ZXdheSBlbmRwb2ludHMsIHRoZSBQcm9tZXRoZXVzIHNpZGVjYXIvb2JqZWN0LXN0b3JhZ2UgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBHcmFmYW5hIGRhdGFzb3VyY2UKLSBib3RoIGlubGluZSBvYmplY3Qtc3RvcmFnZSBjb25maWd1cmF0aW9uIGFuZCBleHRlcm5hbGx5IG1hbmFnZWQgU2VjcmV0IGRlcGxveW1lbnQgcGF0aHMgcGFzc2VkOyB0aGUgbGF0dGVyIHJlbWFpbmVkIGlkZW1wb3RlbnQKLSBhIHJlcGVhdGVkIHRhZy1zY29wZWQgZGVwbG95bWVudCBjb21wbGV0ZWQgd2l0aCBgY2hhbmdlZD0wYCwgYGZhaWxlZD0wYAotIHRoZSBQcm9tZXRoZXVzIHNpZGVjYXIgdXBsb2FkZWQgYSByZWFsIGJsb2NrIHdpdGggemVybyB1cGxvYWQgZmFpbHVyZXM7IFN0b3JlIEdhdGV3YXkgbG9hZGVkIHRoZSBibG9jayBhbmQgYSBxdWVyeSBmaWx0ZXJlZCBleGNsdXNpdmVseSB0byBTdG9yZSBHYXRld2F5IHJldHVybmVkIGFyY2hpdmVkIGRhdGEKCmB0b3ggLWUgZG9jc2AgYWxzbyBwYXJzZWQgdGhlIG5ldyBtb25pdG9yaW5nIHNlY3Rpb24gd2l0aG91dCBhIHdhcm5pbmcsIGJ1dCB0aGUgcmVwb3NpdG9yeS13aWRlIGJ1aWxkIHJlbWFpbnMgbm9uLXplcm8gb24gcHJlLWV4aXN0aW5nIG1pc3NpbmcgaW1hZ2UgRG9ja2VyZmlsZSBpbmNsdWRlcywgYW4gZXhpc3RpbmcgdGl0bGUgdW5kZXJsaW5lLCBhbmQgYW4gZXhpc3RpbmcgZHVwbGljYXRlIHRhcmdldC4K
      patchset: 75ff540db155bcd93f06d3cf486d00345696548a
      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: 099fd2fd24246f4d89259206430c3a124dcf45ad
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
          untrusted/project_0/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
          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: 099fd2fd24246f4d89259206430c3a124dcf45ad
          untrusted/project_3/github.com/vexxhost/atmosphere-zuul-jobs:
            canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
            checkout: main
            commit: acb8e36a801f3b93fdd30dec43a15b6f8d809c2f
          untrusted/project_4/opendev.org/openstack/openstack-helm:
            canonical_name: opendev.org/openstack/openstack-helm
            checkout: master
            commit: d03dd061a8112c468e2f6529cb0663873f96b50f
        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: c32445cecf982c98b95393f9ffa6f64d99cca3f4
          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: ef1937b771670f104853d16888dd1083f983bc65
          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: 46ae0a39a02cfa9bd1713f814ebb43b76fbdca30
          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: 6a1268a1331fccbe57984edcbb09d978c2010274
          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: 49532a5b6cb05c9bf8902f6256f7eef3841fc307
          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: b1d809d9f301c359ddcda70849db6187fee7a876
          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: d87ebb249b48b0a1d8c291cf6aaaa3dcaa92268a
          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: 3942d5f8d06360982cff93571e33aab051674714
          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: 9d5de1cc18913b012de2196667e5e6868d41d7e3
          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: 75ff540db155bcd93f06d3cf486d00345696548a
          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/4142/head
      resources: {}
      tenant: oss
      timeout: 1800
      topic: null
      voting: true
