all:
  children:
    cephs:
      hosts:
        instance: null
    computes:
      hosts:
        instance: null
    controllers:
      hosts:
        instance: null
    zuul_unreachable:
      hosts: {}
  hosts:
    instance:
      ansible_connection: ssh
      ansible_host: 162.253.55.166
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      atmosphere_image_prefix: harbor.atmosphere.dev/
      nodepool:
        az: yul2
        cloud: public
        external_id: 96072f41-c72f-4b1c-81ca-657bd9f31477
        host_id: 93674e3abb95d9a0157a37aef808315912c5b6797422061cb536c972
        interface_ip: 162.253.55.166
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.166
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.166
        public_ipv6: 2604:e100:1:0:f816:3eff:fe7c:662f
        region: ca-ymq-1
        slot: null
      zuul_node:
        az: yul2
        cloud: public
        external_id: 96072f41-c72f-4b1c-81ca-657bd9f31477
        host_id: 93674e3abb95d9a0157a37aef808315912c5b6797422061cb536c972
        interface_ip: 162.253.55.166
        label: ubuntu-jammy
        node_properties: {}
        private_ipv4: 162.253.55.166
        private_ipv6: null
        provider: yul1
        public_ipv4: 162.253.55.166
        public_ipv6: 2604:e100:1:0:f816:3eff:fe7c:662f
        region: ca-ymq-1
        slot: null
        uuid: null
  vars:
    atmosphere_image_prefix: harbor.atmosphere.dev/
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: vexxhost/zuul-config/zuul.d/jobs.yaml@main#1>'
      - '<Job atmosphere-zuul-jobs-test-atmosphere-build-manifest explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: vexxhost/atmosphere-zuul-jobs/zuul.d/tests.yaml@main#1>'
      - '<Job atmosphere-zuul-jobs-test-atmosphere-build-manifest explicit: None implied:
        None source: vexxhost/atmosphere-zuul-jobs/zuul.d/tests.yaml@main#32>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 9541b46d00f94d519bcfd34038bad6a6
      build_refs:
      - branch: main
        change: '8'
        change_message: "test: add jobs for the release manifest roles\n\nAdds tests
          for the release manifest roles from #7, following the pattern used in opendev's
          `zuul/zuul-jobs`: jobs that run only when the roles, their playbooks or
          these tests change, and a playbook under `test-playbooks/`.\n\nThe jobs
          mirror how the molecule jobs use the roles:\n\n- `atmosphere-zuul-jobs-test-atmosphere-build-manifest`
          runs the `atmosphere-build-manifest` role against the Atmosphere checkout
          with `atmosphere_image_prefix: harbor.atmosphere.dev/`.\n- `atmosphere-zuul-jobs-test-atmosphere-use-manifest`
          depends on it, runs the `atmosphere-use-manifest` role, and checks that:\n
          \ - Atmosphere is pointed at the registry reference and CA\n  - the manifest
          is valid, records its inputs, and every image is pinned by digest with its
          original reference (not the cache prefix used to resolve it)\n  - the role
          pushed exactly the manifest the build job generated (it fails otherwise),
          and the registry serves the same content back\n  - Atmosphere's own manifest
          code reads the same images from the registry through the mirror rule and
          CA\n\nThe jobs live in `zuul.d/tests.yaml`, since loading a separate `zuul-tests.d/`
          like opendev does needs a tenant configuration change.\n\nDepends-On: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7\nDepends-On:
          https://github.com/vexxhost/atmosphere/pull/4420\n"
        change_url: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/8
        commit_id: e9332ae8e25dd6002b3c675bb401c539fb176209
        patchset: e9332ae8e25dd6002b3c675bb401c539fb176209
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
          name: vexxhost/atmosphere-zuul-jobs
          short_name: atmosphere-zuul-jobs
          src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        topic: null
      buildset: 16dd13a38ff44ba9a969b131dd569f26
      buildset_refs:
      - branch: main
        change: '8'
        change_message: "test: add jobs for the release manifest roles\n\nAdds tests
          for the release manifest roles from #7, following the pattern used in opendev's
          `zuul/zuul-jobs`: jobs that run only when the roles, their playbooks or
          these tests change, and a playbook under `test-playbooks/`.\n\nThe jobs
          mirror how the molecule jobs use the roles:\n\n- `atmosphere-zuul-jobs-test-atmosphere-build-manifest`
          runs the `atmosphere-build-manifest` role against the Atmosphere checkout
          with `atmosphere_image_prefix: harbor.atmosphere.dev/`.\n- `atmosphere-zuul-jobs-test-atmosphere-use-manifest`
          depends on it, runs the `atmosphere-use-manifest` role, and checks that:\n
          \ - Atmosphere is pointed at the registry reference and CA\n  - the manifest
          is valid, records its inputs, and every image is pinned by digest with its
          original reference (not the cache prefix used to resolve it)\n  - the role
          pushed exactly the manifest the build job generated (it fails otherwise),
          and the registry serves the same content back\n  - Atmosphere's own manifest
          code reads the same images from the registry through the mirror rule and
          CA\n\nThe jobs live in `zuul.d/tests.yaml`, since loading a separate `zuul-tests.d/`
          like opendev does needs a tenant configuration change.\n\nDepends-On: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7\nDepends-On:
          https://github.com/vexxhost/atmosphere/pull/4420\n"
        change_url: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/8
        commit_id: e9332ae8e25dd6002b3c675bb401c539fb176209
        patchset: e9332ae8e25dd6002b3c675bb401c539fb176209
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
          name: vexxhost/atmosphere-zuul-jobs
          short_name: atmosphere-zuul-jobs
          src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        topic: null
      change: '8'
      change_message: "test: add jobs for the release manifest roles\n\nAdds tests
        for the release manifest roles from #7, following the pattern used in opendev's
        `zuul/zuul-jobs`: jobs that run only when the roles, their playbooks or these
        tests change, and a playbook under `test-playbooks/`.\n\nThe jobs mirror how
        the molecule jobs use the roles:\n\n- `atmosphere-zuul-jobs-test-atmosphere-build-manifest`
        runs the `atmosphere-build-manifest` role against the Atmosphere checkout
        with `atmosphere_image_prefix: harbor.atmosphere.dev/`.\n- `atmosphere-zuul-jobs-test-atmosphere-use-manifest`
        depends on it, runs the `atmosphere-use-manifest` role, and checks that:\n
        \ - Atmosphere is pointed at the registry reference and CA\n  - the manifest
        is valid, records its inputs, and every image is pinned by digest with its
        original reference (not the cache prefix used to resolve it)\n  - the role
        pushed exactly the manifest the build job generated (it fails otherwise),
        and the registry serves the same content back\n  - Atmosphere's own manifest
        code reads the same images from the registry through the mirror rule and CA\n\nThe
        jobs live in `zuul.d/tests.yaml`, since loading a separate `zuul-tests.d/`
        like opendev does needs a tenant configuration change.\n\nDepends-On: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7\nDepends-On:
        https://github.com/vexxhost/atmosphere/pull/4420\n"
      change_url: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/8
      child_jobs:
      - atmosphere-zuul-jobs-test-atmosphere-use-manifest
      commit_id: e9332ae8e25dd6002b3c675bb401c539fb176209
      event_id: 04b5f2c0-c96c-11f1-8e87-9f2ce683e7c7
      executor:
        hostname: 2d72f0692154
        inventory_file: /var/lib/zuul/builds/9541b46d00f94d519bcfd34038bad6a6/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/9541b46d00f94d519bcfd34038bad6a6/work/logs
        result_data_file: /var/lib/zuul/builds/9541b46d00f94d519bcfd34038bad6a6/work/results.json
        src_root: /var/lib/zuul/builds/9541b46d00f94d519bcfd34038bad6a6/work/src
        work_root: /var/lib/zuul/builds/9541b46d00f94d519bcfd34038bad6a6/work
      include_vars: []
      items:
      - branch: main
        change: '7'
        change_message: 'feat(molecule): deploy from one release manifest per buildset


          The molecule jobs deploy whatever tags `roles/defaults/vars/main.yml` points
          at when each job runs, while releases ship digest-pinned images. With vexxhost/atmosphere#4420,
          Atmosphere publishes a digest-pinned release manifest per commit; this makes
          CI generate that manifest once per buildset and deploy exactly it, through
          the same registry path customers use.


          - **`atmosphere-release-manifest` job** (`atmosphere-build-manifest` role):
          builds `atmosphere-release` from the change under test, generates the manifest
          (resolving tags through `harbor.atmosphere.dev/` to avoid upstream rate
          limits; the manifest records the original references) and returns the manifest
          and the binary as Zuul artifacts, with the digest of the artifact that pushing
          the manifest produces.

          - **Molecule jobs** depend on it. Their pre-run uses the new `atmosphere-use-manifest`
          role: it starts a CNCF Distribution registry on the node (pinned, checksum-verified)
          with TLS from a throwaway CA and password authentication, pushes the manifest,
          and fails unless the pushed artifact has the digest the build job reported.
          Atmosphere then reads it by reference (`atmosphere_release_manifest`, `atmosphere_release_manifest_ca_file`,
          and a mirror rule that keeps `atmosphere_image_prefix` away from that registry).

          - Every job therefore deploys the same manifest, and after merge `atmosphere-release
          publish` finds this buildset''s manifest through the Zuul API and publishes
          it unchanged.


          This calls `cmd/atmosphere-release` on every branch these jobs run against,
          so it must merge **after** vexxhost/atmosphere#4420 and its backports.


          Tested through `Depends-On` from vexxhost/atmosphere#4420 and by the role
          tests in #8.

          '
        change_url: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7
        commit_id: ff3b350ee39f2370048cfa7c3350df5abe02d5f1
        patchset: ff3b350ee39f2370048cfa7c3350df5abe02d5f1
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
          name: vexxhost/atmosphere-zuul-jobs
          short_name: atmosphere-zuul-jobs
          src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        topic: null
      - branch: main
        change: '4420'
        change_message: "feat: publish release manifests and deploy from them\n\nToday
          a release resolves image tags at release time, after CI has run: 88 of the
          232 entries in `roles/defaults/vars/main.yml` are plain tags, and `cmd/pinimages`
          resolves them into the Galaxy collection, silently skipping any it cannot
          resolve (it logs 94 errors on `main` today). The digests a release ships
          are only recorded inside the Galaxy tarball, and mirroring for air-gapped
          installs goes through the `image_manifest` role, whose registry rewrite
          keeps only the last path component, so `rook/ceph` and `ceph/ceph` both
          become `<registry>/ceph`.\n\nThis PR makes a digest-pinned **release manifest**
          the source of truth for which images a commit or release deploys.\n\n**Publishing**\n-
          On every push to `main` and `stable/*`, `atmosphere-release publish` publishes
          the manifest as an OCI artifact to `ghcr.io/vexxhost/atmosphere-release`,
          tagged with the full commit SHA and the branch (`main`, `stable-2025.2`,
          ...) as computed by `docker/metadata-action`. It looks up the merged pull
          request through the GitHub API and asks Zuul for the newest buildset in
          which every job passed for that PR's head commit (`gate`, then `check`).
          If that buildset's manifest was generated from the same image inputs as
          this commit, it is published unchanged, so what ships is exactly what CI
          deployed. Otherwise (direct push, no passing buildset, logs expired, or
          another merge changed the image list) the manifest the `build` job just
          generated is published with `com.vexxhost.atmosphere.tested: \"false\"`.\n-
          Manifests record `inputs`, a digest of the rendered image list before tags
          are resolved, and pushes are reproducible (fixed creation time), so the
          same manifest always has the same artifact digest wherever it is pushed.\n-
          `release.yaml` uses `docker/metadata-action` for the release tag and promotes
          the released commit's manifest to it (no tag is resolved again). GoReleaser
          (`.goreleaser.yaml`) attaches `atmosphere-release` archives for linux/darwin
          amd64/arm64, their checksums and the release manifest to the existing GitHub
          release without touching its notes, and the Galaxy collection is pinned
          from that same manifest.\n\n**Deploying**\n- `atmosphere_release_manifest`
          (OCI reference or file path) deploys exactly a manifest's images. OCI references
          are read through `atmosphere_image_mirrors` and `atmosphere_image_prefix`
          like every image, so Harbor-prefix and mirror users also fetch the manifest
          through their cache. `atmosphere_release_manifest_ca_file` adds a private
          CA to trust; credentials come from the Docker configuration. Kubernetes
          control plane images fall back to the tag when another `atmosphere_kubernetes_version`
          is deployed.\n- `atmosphere_image_mirrors` redirects images per registry,
          namespace or repository (most specific rule wins); `atmosphere_image_prefix`
          still applies to everything no rule matches, so Harbor proxy projects with
          custom names now work too.\n- Resolution happens in the rendered references,
          so it works with any Kubernetes and container runtime. `atmosphere_image_overrides`
          are applied last, unchanged.\n\n**`atmosphere-release` command** (`cmd/atmosphere-release`,
          replaces `cmd/pinimages`)\n- `generate [--write-vars] [--resolve-prefix]`,
          `push`, `promote`, `publish`, `digest`, `show`, `diff`, `check`. `push`
          and `promote` take `repository:tag` references, so they consume `docker/metadata-action`
          output directly; `--resolve-prefix` resolves tags through a pull-through
          cache (falling back to the source registry) to avoid upstream rate limits.\n-
          `mirror` to a registry, or `--to-dir` / `--from-dir` for disconnected sites,
          in `nested`, `flat` (`quay.io--ceph--ceph`) or `single-repo` layouts. Images
          are copied with every platform so digests never change, each digest is verified,
          kubeadm's images stay under one prefix with their original names, the manifest
          artifact itself is copied with its digest intact, and the `atmosphere_release_manifest`
          / `atmosphere_image_mirrors` vars are written out.\n\nThe `image_manifest`
          role keeps working but now warns that it is deprecated.\n\n### Compatibility\n\nDeployments
          that set none of the new variables get byte-identical `atmosphere_images`:
          I rendered the `defaults` role through `ansible-playbook` before and after
          this change with no prefix, with a Harbor prefix, and with prefix + overrides,
          on `main` (231 images) and on `stable/zed` (216 images); all outputs are
          identical. `write-vars` produces the same vars file as `pinimages` except
          that Ceph is now pinned too (`pinimages` could not resolve its `{{ ceph_version
          }}` template).\n\n### Testing\n\n- Go: `internal/releasemanifest` tests
          cover generation, `write-vars`, push/fetch/promote, every mirror layout
          with multi-arch images in in-memory registries, directory export/import,
          digest-mismatch detection, registries with ports and retry on rate limits.\n-
          Go: `publish` against a fake Zuul API (tested manifest used unchanged with
          the same artifact digest, gate searched before check, failed buildsets skipped,
          fallback when inputs changed, nothing passed or Zuul is unreachable), and
          reproducible pushes.\n- Python: the `resolve_images` filter and the Go resolver
          run the same cases from `internal/releasemanifest/testdata/resolve.yaml`;
          the lookup is tested against a local HTTP registry with token auth and blob
          redirects (credentials must not reach storage) and tampered content, and
          against an HTTPS registry with a private CA and basic authentication (fails
          without the CA or credentials), including fetching the manifest through
          the prefix and mirror rules. A new `python-test` CI job runs these (the
          existing `tests/unit` suite is not run in CI and has a stale magnum expectation,
          so the job only runs the new tests).\n- End to end against a local CNCF
          Distribution registry with real images from `registry.k8s.io`, `ghcr.io`
          and Docker Hub: `generate`, `push`, `promote`, `show`, nested mirror, export
          \u2192 flat import, `check`, `diff`, plus deploying the mirrored manifest
          through the lookup.\n- `generate` against the real registries resolves all
          231 images on `main` and `stable/2025.2`.\n\n### Backports\n\n`go.mod` and
          `go.sum` are untouched; every dependency is already present at the same
          version on all stable branches.\n\n- `stable/2025.2` cherry-picks cleanly
          and passes everything above.\n- `stable/2025.1` back to `stable/zed` conflict
          in one hunk of `roles/defaults/vars/main.yml`: the conflict context includes
          `main`'s `_atmosphere_storage` block, which those branches don't have. Resolve
          it by keeping the new `atmosphere_images` block and dropping the `_atmosphere_storage`
          lines. I did this on `stable/zed` and the Go tests, Python tests and the
          old/new rendering comparison all pass.\n\n### CI deploys the manifest\n\nWith
          vexxhost/atmosphere-zuul-jobs#7, an `atmosphere-release-manifest` job generates
          this change's release manifest once per buildset. Every molecule job (AIO,
          CSI, Keycloak) depends on it, pushes that exact manifest to a TLS registry
          with password authentication on its node, checks the pushed digest matches,
          and deploys by registry reference with `atmosphere_release_manifest`, `atmosphere_release_manifest_ca_file`
          and a mirror rule, the same path customers use for published releases. That
          buildset's manifest is what `publish` publishes after merge.\n\n### Before
          merging / follow-ups\n\n- After the first push publishes `ghcr.io/vexxhost/atmosphere-release`,
          make the package public and set retention (keep release tags; commit tags
          can be pruned).\n- Docker Hub's anonymous rate limit can still fail `generate`
          after its retries; previously this silently produced unpinned images.\n-
          `harbor.atmosphere.dev` has no proxy project for `packages.vexxhost.com`
          (used by `prometheus_smartctl_exporter`).\n- The docs build with `-W` already
          fails on `main` because of existing warnings in `admin/monitoring.rst` and
          `arch/images.rst`; the new page adds none.\n\nDepends-On: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7\n"
        change_url: https://github.com/vexxhost/atmosphere/pull/4420
        commit_id: fa8ad22e3041bf8da3878e40ba44d657caf57b9d
        patchset: fa8ad22e3041bf8da3878e40ba44d657caf57b9d
        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
      - branch: main
        change: '8'
        change_message: "test: add jobs for the release manifest roles\n\nAdds tests
          for the release manifest roles from #7, following the pattern used in opendev's
          `zuul/zuul-jobs`: jobs that run only when the roles, their playbooks or
          these tests change, and a playbook under `test-playbooks/`.\n\nThe jobs
          mirror how the molecule jobs use the roles:\n\n- `atmosphere-zuul-jobs-test-atmosphere-build-manifest`
          runs the `atmosphere-build-manifest` role against the Atmosphere checkout
          with `atmosphere_image_prefix: harbor.atmosphere.dev/`.\n- `atmosphere-zuul-jobs-test-atmosphere-use-manifest`
          depends on it, runs the `atmosphere-use-manifest` role, and checks that:\n
          \ - Atmosphere is pointed at the registry reference and CA\n  - the manifest
          is valid, records its inputs, and every image is pinned by digest with its
          original reference (not the cache prefix used to resolve it)\n  - the role
          pushed exactly the manifest the build job generated (it fails otherwise),
          and the registry serves the same content back\n  - Atmosphere's own manifest
          code reads the same images from the registry through the mirror rule and
          CA\n\nThe jobs live in `zuul.d/tests.yaml`, since loading a separate `zuul-tests.d/`
          like opendev does needs a tenant configuration change.\n\nDepends-On: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/7\nDepends-On:
          https://github.com/vexxhost/atmosphere/pull/4420\n"
        change_url: https://github.com/vexxhost/atmosphere-zuul-jobs/pull/8
        commit_id: e9332ae8e25dd6002b3c675bb401c539fb176209
        patchset: e9332ae8e25dd6002b3c675bb401c539fb176209
        project:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
          name: vexxhost/atmosphere-zuul-jobs
          short_name: atmosphere-zuul-jobs
          src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
        topic: null
      job: atmosphere-zuul-jobs-test-atmosphere-build-manifest
      jobtags: []
      max_attempts: 3
      message: dGVzdDogYWRkIGpvYnMgZm9yIHRoZSByZWxlYXNlIG1hbmlmZXN0IHJvbGVzCgpBZGRzIHRlc3RzIGZvciB0aGUgcmVsZWFzZSBtYW5pZmVzdCByb2xlcyBmcm9tICM3LCBmb2xsb3dpbmcgdGhlIHBhdHRlcm4gdXNlZCBpbiBvcGVuZGV2J3MgYHp1dWwvenV1bC1qb2JzYDogam9icyB0aGF0IHJ1biBvbmx5IHdoZW4gdGhlIHJvbGVzLCB0aGVpciBwbGF5Ym9va3Mgb3IgdGhlc2UgdGVzdHMgY2hhbmdlLCBhbmQgYSBwbGF5Ym9vayB1bmRlciBgdGVzdC1wbGF5Ym9va3MvYC4KClRoZSBqb2JzIG1pcnJvciBob3cgdGhlIG1vbGVjdWxlIGpvYnMgdXNlIHRoZSByb2xlczoKCi0gYGF0bW9zcGhlcmUtenV1bC1qb2JzLXRlc3QtYXRtb3NwaGVyZS1idWlsZC1tYW5pZmVzdGAgcnVucyB0aGUgYGF0bW9zcGhlcmUtYnVpbGQtbWFuaWZlc3RgIHJvbGUgYWdhaW5zdCB0aGUgQXRtb3NwaGVyZSBjaGVja291dCB3aXRoIGBhdG1vc3BoZXJlX2ltYWdlX3ByZWZpeDogaGFyYm9yLmF0bW9zcGhlcmUuZGV2L2AuCi0gYGF0bW9zcGhlcmUtenV1bC1qb2JzLXRlc3QtYXRtb3NwaGVyZS11c2UtbWFuaWZlc3RgIGRlcGVuZHMgb24gaXQsIHJ1bnMgdGhlIGBhdG1vc3BoZXJlLXVzZS1tYW5pZmVzdGAgcm9sZSwgYW5kIGNoZWNrcyB0aGF0OgogIC0gQXRtb3NwaGVyZSBpcyBwb2ludGVkIGF0IHRoZSByZWdpc3RyeSByZWZlcmVuY2UgYW5kIENBCiAgLSB0aGUgbWFuaWZlc3QgaXMgdmFsaWQsIHJlY29yZHMgaXRzIGlucHV0cywgYW5kIGV2ZXJ5IGltYWdlIGlzIHBpbm5lZCBieSBkaWdlc3Qgd2l0aCBpdHMgb3JpZ2luYWwgcmVmZXJlbmNlIChub3QgdGhlIGNhY2hlIHByZWZpeCB1c2VkIHRvIHJlc29sdmUgaXQpCiAgLSB0aGUgcm9sZSBwdXNoZWQgZXhhY3RseSB0aGUgbWFuaWZlc3QgdGhlIGJ1aWxkIGpvYiBnZW5lcmF0ZWQgKGl0IGZhaWxzIG90aGVyd2lzZSksIGFuZCB0aGUgcmVnaXN0cnkgc2VydmVzIHRoZSBzYW1lIGNvbnRlbnQgYmFjawogIC0gQXRtb3NwaGVyZSdzIG93biBtYW5pZmVzdCBjb2RlIHJlYWRzIHRoZSBzYW1lIGltYWdlcyBmcm9tIHRoZSByZWdpc3RyeSB0aHJvdWdoIHRoZSBtaXJyb3IgcnVsZSBhbmQgQ0EKClRoZSBqb2JzIGxpdmUgaW4gYHp1dWwuZC90ZXN0cy55YW1sYCwgc2luY2UgbG9hZGluZyBhIHNlcGFyYXRlIGB6dXVsLXRlc3RzLmQvYCBsaWtlIG9wZW5kZXYgZG9lcyBuZWVkcyBhIHRlbmFudCBjb25maWd1cmF0aW9uIGNoYW5nZS4KCkRlcGVuZHMtT246IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXh4aG9zdC9hdG1vc3BoZXJlLXp1dWwtam9icy9wdWxsLzcKRGVwZW5kcy1PbjogaHR0cHM6Ly9naXRodWIuY29tL3ZleHhob3N0L2F0bW9zcGhlcmUvcHVsbC80NDIwCg==
      patchset: e9332ae8e25dd6002b3c675bb401c539fb176209
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          trusted/project_1/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: be52461cd48abccbf95b13a58b2551ac673d8ad7
          trusted/project_2/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
          untrusted/project_0/github.com/vexxhost/atmosphere-zuul-jobs:
            canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
            checkout: main
            commit: cd7e8aad54d0c78706282a13253b88c2c497eda9
          untrusted/project_1/github.com/vexxhost/zuul-config:
            canonical_name: github.com/vexxhost/zuul-config
            checkout: main
            commit: 298983cd1253e6833abdb49d87d912527e0e6597
          untrusted/project_2/opendev.org/zuul/zuul-jobs:
            canonical_name: opendev.org/zuul/zuul-jobs
            checkout: master
            commit: be52461cd48abccbf95b13a58b2551ac673d8ad7
          untrusted/project_3/github.com/vexxhost/zuul-jobs:
            canonical_name: github.com/vexxhost/zuul-jobs
            checkout: main
            commit: c286bf94224b5660b8e49e9a058289e61062a9a0
        playbooks:
        - path: untrusted/project_0/github.com/vexxhost/atmosphere-zuul-jobs/playbooks/release-manifest/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/atmosphere-zuul-jobs
            link_target: untrusted/project_0/github.com/vexxhost/atmosphere-zuul-jobs
            role_path: ansible/playbook_0/role_0/atmosphere-zuul-jobs/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_2/opendev.org/zuul/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_3/zuul-jobs
            link_target: untrusted/project_3/github.com/vexxhost/zuul-jobs
            role_path: ansible/playbook_0/role_3/zuul-jobs/roles
        post_playbooks:
        - 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_0/role_1/zuul-jobs
            link_target: trusted/project_1/opendev.org/zuul/zuul-jobs
            role_path: ansible/post_playbook_0/role_1/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/post_playbook_0/role_2/zuul-jobs
            link_target: trusted/project_2/github.com/vexxhost/zuul-jobs
            role_path: ansible/post_playbook_0/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_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
        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
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
        name: vexxhost/atmosphere-zuul-jobs
        short_name: atmosphere-zuul-jobs
        src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
      projects:
        github.com/vexxhost/atmosphere:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere
          checkout: main
          checkout_description: zuul branch
          commit: fa8ad22e3041bf8da3878e40ba44d657caf57b9d
          name: vexxhost/atmosphere
          required: true
          short_name: atmosphere
          src_dir: src/github.com/vexxhost/atmosphere
        github.com/vexxhost/atmosphere-zuul-jobs:
          canonical_hostname: github.com
          canonical_name: github.com/vexxhost/atmosphere-zuul-jobs
          checkout: main
          checkout_description: zuul branch
          commit: cd7e8aad54d0c78706282a13253b88c2c497eda9
          name: vexxhost/atmosphere-zuul-jobs
          required: false
          short_name: atmosphere-zuul-jobs
          src_dir: src/github.com/vexxhost/atmosphere-zuul-jobs
      ref: refs/pull/8/head
      resources: {}
      tenant: oss
      timeout: 1800
      topic: null
      voting: true
