all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe5f:4fe1
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 9dabc08c-5ace-4e29-a024-72820d3e1acf
        host_id: 82101243836454d7401d5893feae9e2c5df7cc291646d8a99b33b53b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe5f:4fe1
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.108
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.38
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe5f:4fe1
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job ansible-lint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#7>'
      - '<Job ansible-lint explicit: None implied: None source: osism/ansible-playbooks/.zuul.yaml@main#79>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 36e1ce5ed5a84b5cbd05f030894cfca0
      build_refs:
      - branch: main
        change: '563'
        change_message: "Fix validate-ceph-osds crash on stale cached facts\n\n##
          Problem\n\n`osism validate ceph-osds` fails fatally on every OSD host of
          a freshly\ndeployed, healthy cluster (`HEALTH_OK`, all OSDs up+in):\n\n```\nfatal:
          [testbed-node-3]: FAILED! => {\"msg\": \"The task includes an option with
          an\nundefined variable.. '_osds_containers' is undefined ...\"}\n```\n\nTwo
          stacked defects:\n\n1. **Undefined variable on zero matches.** `_osds_containers`
          is built by a\n   `set_fact` loop guarded by `when: item.name is match('/ceph-osd.*')`.
          When no\n   container matches, the task never runs and the variable is never
          created \u2014\n   the `default([])` exists only inside the accumulating
          expression. The next\n   task evaluates `_osds_containers | length` and
          dies.\n2. **The container list comes from a stale fact cache.** The play
          relies on\n   `gather_facts: true`, but the OSISM-generated ansible.cfg
          uses\n   `gathering = smart` with a Redis fact cache (24 h timeout), so
          gathering is\n   served from cache. On a fresh deploy the cache was last
          written by the facts\n   refresh that runs *before* the ceph role \u2014
          zero `ceph-osd-*` containers in\n   `ansible_local.docker_containers`. Until
          now the only remedy was an\n   undocumented `osism apply facts` before the
          validate.\n\n## Changes\n\n- Initialize `_osds_containers: []` so a host
          with zero OSD containers produces\n  a failed containers-count test (\"expected
          N, found 0\") instead of a fatal.\n- Add an explicit `setup` task: unlike
          `gather_facts` under `gathering = smart`,\n  it always gathers live, re-executing
          the local fact script behind\n  `ansible_local.docker_containers`, and refreshes
          the cache as a side effect.\n  This also removes the inverse risk of *passing*
          against cached containers\n  that no longer run.\n- Aggregate `_osds_test_failed`
          across hosts before the early bail-out and\n  before the final verdict:
          conditionals on `run_once` tasks are evaluated with\n  the first host's
          variables only, so a failure on a non-first host previously\n  skipped the
          bail-out (and later crashed on the empty list in test 4), or\n  produced
          a \"passed\" verdict for per-host failures in tests 4/5.\n- Aggregate the
          per-test result fields in both report blocks the same way, so\n  a report
          can no longer state `validator_result: failed` while the failing\n  test's
          own result field says `passed`.\n\n## Validation\n\n- `ansible-lint` passes
          (production profile).\n- Root cause and fix verified on a live testbed cluster:
          with stale cached\n  facts the validate failed on all three OSD hosts; after
          a real fact refresh\n  it passes. The staleness is observable via\n  `osism
          dump facts <node> ansible_local | grep -c ceph-osd` (0) vs\n  `osism dump
          facts --no-cache ...` (>0).\n\nKnown pre-existing limitation (out of scope):
          a host that legitimately expects\nzero OSDs (empty `devices`/`ceph_osd_devices`)
          still fails in tests 4/5, which\nindex into `_osds_containers[0]` / `_osds_crush_node_data[0]`.
          This predates\nthis PR (such hosts crashed at the count task before).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-playbooks/pull/563
        commit_id: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        patchset: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-playbooks
          name: osism/ansible-playbooks
          short_name: ansible-playbooks
        src_dir: src/github.com/osism/ansible-playbooks
        topic: null
      buildset: b4d3c9e0a7194cdaaf6562627d49605b
      buildset_refs:
      - branch: main
        change: '563'
        change_message: "Fix validate-ceph-osds crash on stale cached facts\n\n##
          Problem\n\n`osism validate ceph-osds` fails fatally on every OSD host of
          a freshly\ndeployed, healthy cluster (`HEALTH_OK`, all OSDs up+in):\n\n```\nfatal:
          [testbed-node-3]: FAILED! => {\"msg\": \"The task includes an option with
          an\nundefined variable.. '_osds_containers' is undefined ...\"}\n```\n\nTwo
          stacked defects:\n\n1. **Undefined variable on zero matches.** `_osds_containers`
          is built by a\n   `set_fact` loop guarded by `when: item.name is match('/ceph-osd.*')`.
          When no\n   container matches, the task never runs and the variable is never
          created \u2014\n   the `default([])` exists only inside the accumulating
          expression. The next\n   task evaluates `_osds_containers | length` and
          dies.\n2. **The container list comes from a stale fact cache.** The play
          relies on\n   `gather_facts: true`, but the OSISM-generated ansible.cfg
          uses\n   `gathering = smart` with a Redis fact cache (24 h timeout), so
          gathering is\n   served from cache. On a fresh deploy the cache was last
          written by the facts\n   refresh that runs *before* the ceph role \u2014
          zero `ceph-osd-*` containers in\n   `ansible_local.docker_containers`. Until
          now the only remedy was an\n   undocumented `osism apply facts` before the
          validate.\n\n## Changes\n\n- Initialize `_osds_containers: []` so a host
          with zero OSD containers produces\n  a failed containers-count test (\"expected
          N, found 0\") instead of a fatal.\n- Add an explicit `setup` task: unlike
          `gather_facts` under `gathering = smart`,\n  it always gathers live, re-executing
          the local fact script behind\n  `ansible_local.docker_containers`, and refreshes
          the cache as a side effect.\n  This also removes the inverse risk of *passing*
          against cached containers\n  that no longer run.\n- Aggregate `_osds_test_failed`
          across hosts before the early bail-out and\n  before the final verdict:
          conditionals on `run_once` tasks are evaluated with\n  the first host's
          variables only, so a failure on a non-first host previously\n  skipped the
          bail-out (and later crashed on the empty list in test 4), or\n  produced
          a \"passed\" verdict for per-host failures in tests 4/5.\n- Aggregate the
          per-test result fields in both report blocks the same way, so\n  a report
          can no longer state `validator_result: failed` while the failing\n  test's
          own result field says `passed`.\n\n## Validation\n\n- `ansible-lint` passes
          (production profile).\n- Root cause and fix verified on a live testbed cluster:
          with stale cached\n  facts the validate failed on all three OSD hosts; after
          a real fact refresh\n  it passes. The staleness is observable via\n  `osism
          dump facts <node> ansible_local | grep -c ceph-osd` (0) vs\n  `osism dump
          facts --no-cache ...` (>0).\n\nKnown pre-existing limitation (out of scope):
          a host that legitimately expects\nzero OSDs (empty `devices`/`ceph_osd_devices`)
          still fails in tests 4/5, which\nindex into `_osds_containers[0]` / `_osds_crush_node_data[0]`.
          This predates\nthis PR (such hosts crashed at the count task before).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-playbooks/pull/563
        commit_id: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        patchset: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-playbooks
          name: osism/ansible-playbooks
          short_name: ansible-playbooks
        src_dir: src/github.com/osism/ansible-playbooks
        topic: null
      change: '563'
      change_message: "Fix validate-ceph-osds crash on stale cached facts\n\n## Problem\n\n`osism
        validate ceph-osds` fails fatally on every OSD host of a freshly\ndeployed,
        healthy cluster (`HEALTH_OK`, all OSDs up+in):\n\n```\nfatal: [testbed-node-3]:
        FAILED! => {\"msg\": \"The task includes an option with an\nundefined variable..
        '_osds_containers' is undefined ...\"}\n```\n\nTwo stacked defects:\n\n1.
        **Undefined variable on zero matches.** `_osds_containers` is built by a\n
        \  `set_fact` loop guarded by `when: item.name is match('/ceph-osd.*')`. When
        no\n   container matches, the task never runs and the variable is never created
        \u2014\n   the `default([])` exists only inside the accumulating expression.
        The next\n   task evaluates `_osds_containers | length` and dies.\n2. **The
        container list comes from a stale fact cache.** The play relies on\n   `gather_facts:
        true`, but the OSISM-generated ansible.cfg uses\n   `gathering = smart` with
        a Redis fact cache (24 h timeout), so gathering is\n   served from cache.
        On a fresh deploy the cache was last written by the facts\n   refresh that
        runs *before* the ceph role \u2014 zero `ceph-osd-*` containers in\n   `ansible_local.docker_containers`.
        Until now the only remedy was an\n   undocumented `osism apply facts` before
        the validate.\n\n## Changes\n\n- Initialize `_osds_containers: []` so a host
        with zero OSD containers produces\n  a failed containers-count test (\"expected
        N, found 0\") instead of a fatal.\n- Add an explicit `setup` task: unlike
        `gather_facts` under `gathering = smart`,\n  it always gathers live, re-executing
        the local fact script behind\n  `ansible_local.docker_containers`, and refreshes
        the cache as a side effect.\n  This also removes the inverse risk of *passing*
        against cached containers\n  that no longer run.\n- Aggregate `_osds_test_failed`
        across hosts before the early bail-out and\n  before the final verdict: conditionals
        on `run_once` tasks are evaluated with\n  the first host's variables only,
        so a failure on a non-first host previously\n  skipped the bail-out (and later
        crashed on the empty list in test 4), or\n  produced a \"passed\" verdict
        for per-host failures in tests 4/5.\n- Aggregate the per-test result fields
        in both report blocks the same way, so\n  a report can no longer state `validator_result:
        failed` while the failing\n  test's own result field says `passed`.\n\n##
        Validation\n\n- `ansible-lint` passes (production profile).\n- Root cause
        and fix verified on a live testbed cluster: with stale cached\n  facts the
        validate failed on all three OSD hosts; after a real fact refresh\n  it passes.
        The staleness is observable via\n  `osism dump facts <node> ansible_local
        | grep -c ceph-osd` (0) vs\n  `osism dump facts --no-cache ...` (>0).\n\nKnown
        pre-existing limitation (out of scope): a host that legitimately expects\nzero
        OSDs (empty `devices`/`ceph_osd_devices`) still fails in tests 4/5, which\nindex
        into `_osds_containers[0]` / `_osds_crush_node_data[0]`. This predates\nthis
        PR (such hosts crashed at the count task before).\n\n\U0001F916 Generated
        with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/ansible-playbooks/pull/563
      child_jobs: []
      commit_id: b8d5a30512b4f2303ee8e80b0183564f9c898c81
      event_id: ba4c2f40-659a-11f1-8a5d-847ea185ec93
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/36e1ce5ed5a84b5cbd05f030894cfca0/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/36e1ce5ed5a84b5cbd05f030894cfca0/work/logs
        result_data_file: /var/lib/zuul/builds/36e1ce5ed5a84b5cbd05f030894cfca0/work/results.json
        src_root: /var/lib/zuul/builds/36e1ce5ed5a84b5cbd05f030894cfca0/work/src
        work_root: /var/lib/zuul/builds/36e1ce5ed5a84b5cbd05f030894cfca0/work
      include_vars: []
      items:
      - branch: main
        change: '563'
        change_message: "Fix validate-ceph-osds crash on stale cached facts\n\n##
          Problem\n\n`osism validate ceph-osds` fails fatally on every OSD host of
          a freshly\ndeployed, healthy cluster (`HEALTH_OK`, all OSDs up+in):\n\n```\nfatal:
          [testbed-node-3]: FAILED! => {\"msg\": \"The task includes an option with
          an\nundefined variable.. '_osds_containers' is undefined ...\"}\n```\n\nTwo
          stacked defects:\n\n1. **Undefined variable on zero matches.** `_osds_containers`
          is built by a\n   `set_fact` loop guarded by `when: item.name is match('/ceph-osd.*')`.
          When no\n   container matches, the task never runs and the variable is never
          created \u2014\n   the `default([])` exists only inside the accumulating
          expression. The next\n   task evaluates `_osds_containers | length` and
          dies.\n2. **The container list comes from a stale fact cache.** The play
          relies on\n   `gather_facts: true`, but the OSISM-generated ansible.cfg
          uses\n   `gathering = smart` with a Redis fact cache (24 h timeout), so
          gathering is\n   served from cache. On a fresh deploy the cache was last
          written by the facts\n   refresh that runs *before* the ceph role \u2014
          zero `ceph-osd-*` containers in\n   `ansible_local.docker_containers`. Until
          now the only remedy was an\n   undocumented `osism apply facts` before the
          validate.\n\n## Changes\n\n- Initialize `_osds_containers: []` so a host
          with zero OSD containers produces\n  a failed containers-count test (\"expected
          N, found 0\") instead of a fatal.\n- Add an explicit `setup` task: unlike
          `gather_facts` under `gathering = smart`,\n  it always gathers live, re-executing
          the local fact script behind\n  `ansible_local.docker_containers`, and refreshes
          the cache as a side effect.\n  This also removes the inverse risk of *passing*
          against cached containers\n  that no longer run.\n- Aggregate `_osds_test_failed`
          across hosts before the early bail-out and\n  before the final verdict:
          conditionals on `run_once` tasks are evaluated with\n  the first host's
          variables only, so a failure on a non-first host previously\n  skipped the
          bail-out (and later crashed on the empty list in test 4), or\n  produced
          a \"passed\" verdict for per-host failures in tests 4/5.\n- Aggregate the
          per-test result fields in both report blocks the same way, so\n  a report
          can no longer state `validator_result: failed` while the failing\n  test's
          own result field says `passed`.\n\n## Validation\n\n- `ansible-lint` passes
          (production profile).\n- Root cause and fix verified on a live testbed cluster:
          with stale cached\n  facts the validate failed on all three OSD hosts; after
          a real fact refresh\n  it passes. The staleness is observable via\n  `osism
          dump facts <node> ansible_local | grep -c ceph-osd` (0) vs\n  `osism dump
          facts --no-cache ...` (>0).\n\nKnown pre-existing limitation (out of scope):
          a host that legitimately expects\nzero OSDs (empty `devices`/`ceph_osd_devices`)
          still fails in tests 4/5, which\nindex into `_osds_containers[0]` / `_osds_crush_node_data[0]`.
          This predates\nthis PR (such hosts crashed at the count task before).\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/ansible-playbooks/pull/563
        commit_id: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        patchset: b8d5a30512b4f2303ee8e80b0183564f9c898c81
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-playbooks
          name: osism/ansible-playbooks
          short_name: ansible-playbooks
          src_dir: src/github.com/osism/ansible-playbooks
        topic: null
      job: ansible-lint
      jobtags: []
      max_attempts: 3
      message: Rml4IHZhbGlkYXRlLWNlcGgtb3NkcyBjcmFzaCBvbiBzdGFsZSBjYWNoZWQgZmFjdHMKCiMjIFByb2JsZW0KCmBvc2lzbSB2YWxpZGF0ZSBjZXBoLW9zZHNgIGZhaWxzIGZhdGFsbHkgb24gZXZlcnkgT1NEIGhvc3Qgb2YgYSBmcmVzaGx5CmRlcGxveWVkLCBoZWFsdGh5IGNsdXN0ZXIgKGBIRUFMVEhfT0tgLCBhbGwgT1NEcyB1cCtpbik6CgpgYGAKZmF0YWw6IFt0ZXN0YmVkLW5vZGUtM106IEZBSUxFRCEgPT4geyJtc2ciOiAiVGhlIHRhc2sgaW5jbHVkZXMgYW4gb3B0aW9uIHdpdGggYW4KdW5kZWZpbmVkIHZhcmlhYmxlLi4gJ19vc2RzX2NvbnRhaW5lcnMnIGlzIHVuZGVmaW5lZCAuLi4ifQpgYGAKClR3byBzdGFja2VkIGRlZmVjdHM6CgoxLiAqKlVuZGVmaW5lZCB2YXJpYWJsZSBvbiB6ZXJvIG1hdGNoZXMuKiogYF9vc2RzX2NvbnRhaW5lcnNgIGlzIGJ1aWx0IGJ5IGEKICAgYHNldF9mYWN0YCBsb29wIGd1YXJkZWQgYnkgYHdoZW46IGl0ZW0ubmFtZSBpcyBtYXRjaCgnL2NlcGgtb3NkLionKWAuIFdoZW4gbm8KICAgY29udGFpbmVyIG1hdGNoZXMsIHRoZSB0YXNrIG5ldmVyIHJ1bnMgYW5kIHRoZSB2YXJpYWJsZSBpcyBuZXZlciBjcmVhdGVkIOKAlAogICB0aGUgYGRlZmF1bHQoW10pYCBleGlzdHMgb25seSBpbnNpZGUgdGhlIGFjY3VtdWxhdGluZyBleHByZXNzaW9uLiBUaGUgbmV4dAogICB0YXNrIGV2YWx1YXRlcyBgX29zZHNfY29udGFpbmVycyB8IGxlbmd0aGAgYW5kIGRpZXMuCjIuICoqVGhlIGNvbnRhaW5lciBsaXN0IGNvbWVzIGZyb20gYSBzdGFsZSBmYWN0IGNhY2hlLioqIFRoZSBwbGF5IHJlbGllcyBvbgogICBgZ2F0aGVyX2ZhY3RzOiB0cnVlYCwgYnV0IHRoZSBPU0lTTS1nZW5lcmF0ZWQgYW5zaWJsZS5jZmcgdXNlcwogICBgZ2F0aGVyaW5nID0gc21hcnRgIHdpdGggYSBSZWRpcyBmYWN0IGNhY2hlICgyNCBoIHRpbWVvdXQpLCBzbyBnYXRoZXJpbmcgaXMKICAgc2VydmVkIGZyb20gY2FjaGUuIE9uIGEgZnJlc2ggZGVwbG95IHRoZSBjYWNoZSB3YXMgbGFzdCB3cml0dGVuIGJ5IHRoZSBmYWN0cwogICByZWZyZXNoIHRoYXQgcnVucyAqYmVmb3JlKiB0aGUgY2VwaCByb2xlIOKAlCB6ZXJvIGBjZXBoLW9zZC0qYCBjb250YWluZXJzIGluCiAgIGBhbnNpYmxlX2xvY2FsLmRvY2tlcl9jb250YWluZXJzYC4gVW50aWwgbm93IHRoZSBvbmx5IHJlbWVkeSB3YXMgYW4KICAgdW5kb2N1bWVudGVkIGBvc2lzbSBhcHBseSBmYWN0c2AgYmVmb3JlIHRoZSB2YWxpZGF0ZS4KCiMjIENoYW5nZXMKCi0gSW5pdGlhbGl6ZSBgX29zZHNfY29udGFpbmVyczogW11gIHNvIGEgaG9zdCB3aXRoIHplcm8gT1NEIGNvbnRhaW5lcnMgcHJvZHVjZXMKICBhIGZhaWxlZCBjb250YWluZXJzLWNvdW50IHRlc3QgKCJleHBlY3RlZCBOLCBmb3VuZCAwIikgaW5zdGVhZCBvZiBhIGZhdGFsLgotIEFkZCBhbiBleHBsaWNpdCBgc2V0dXBgIHRhc2s6IHVubGlrZSBgZ2F0aGVyX2ZhY3RzYCB1bmRlciBgZ2F0aGVyaW5nID0gc21hcnRgLAogIGl0IGFsd2F5cyBnYXRoZXJzIGxpdmUsIHJlLWV4ZWN1dGluZyB0aGUgbG9jYWwgZmFjdCBzY3JpcHQgYmVoaW5kCiAgYGFuc2libGVfbG9jYWwuZG9ja2VyX2NvbnRhaW5lcnNgLCBhbmQgcmVmcmVzaGVzIHRoZSBjYWNoZSBhcyBhIHNpZGUgZWZmZWN0LgogIFRoaXMgYWxzbyByZW1vdmVzIHRoZSBpbnZlcnNlIHJpc2sgb2YgKnBhc3NpbmcqIGFnYWluc3QgY2FjaGVkIGNvbnRhaW5lcnMKICB0aGF0IG5vIGxvbmdlciBydW4uCi0gQWdncmVnYXRlIGBfb3Nkc190ZXN0X2ZhaWxlZGAgYWNyb3NzIGhvc3RzIGJlZm9yZSB0aGUgZWFybHkgYmFpbC1vdXQgYW5kCiAgYmVmb3JlIHRoZSBmaW5hbCB2ZXJkaWN0OiBjb25kaXRpb25hbHMgb24gYHJ1bl9vbmNlYCB0YXNrcyBhcmUgZXZhbHVhdGVkIHdpdGgKICB0aGUgZmlyc3QgaG9zdCdzIHZhcmlhYmxlcyBvbmx5LCBzbyBhIGZhaWx1cmUgb24gYSBub24tZmlyc3QgaG9zdCBwcmV2aW91c2x5CiAgc2tpcHBlZCB0aGUgYmFpbC1vdXQgKGFuZCBsYXRlciBjcmFzaGVkIG9uIHRoZSBlbXB0eSBsaXN0IGluIHRlc3QgNCksIG9yCiAgcHJvZHVjZWQgYSAicGFzc2VkIiB2ZXJkaWN0IGZvciBwZXItaG9zdCBmYWlsdXJlcyBpbiB0ZXN0cyA0LzUuCi0gQWdncmVnYXRlIHRoZSBwZXItdGVzdCByZXN1bHQgZmllbGRzIGluIGJvdGggcmVwb3J0IGJsb2NrcyB0aGUgc2FtZSB3YXksIHNvCiAgYSByZXBvcnQgY2FuIG5vIGxvbmdlciBzdGF0ZSBgdmFsaWRhdG9yX3Jlc3VsdDogZmFpbGVkYCB3aGlsZSB0aGUgZmFpbGluZwogIHRlc3QncyBvd24gcmVzdWx0IGZpZWxkIHNheXMgYHBhc3NlZGAuCgojIyBWYWxpZGF0aW9uCgotIGBhbnNpYmxlLWxpbnRgIHBhc3NlcyAocHJvZHVjdGlvbiBwcm9maWxlKS4KLSBSb290IGNhdXNlIGFuZCBmaXggdmVyaWZpZWQgb24gYSBsaXZlIHRlc3RiZWQgY2x1c3Rlcjogd2l0aCBzdGFsZSBjYWNoZWQKICBmYWN0cyB0aGUgdmFsaWRhdGUgZmFpbGVkIG9uIGFsbCB0aHJlZSBPU0QgaG9zdHM7IGFmdGVyIGEgcmVhbCBmYWN0IHJlZnJlc2gKICBpdCBwYXNzZXMuIFRoZSBzdGFsZW5lc3MgaXMgb2JzZXJ2YWJsZSB2aWEKICBgb3Npc20gZHVtcCBmYWN0cyA8bm9kZT4gYW5zaWJsZV9sb2NhbCB8IGdyZXAgLWMgY2VwaC1vc2RgICgwKSB2cwogIGBvc2lzbSBkdW1wIGZhY3RzIC0tbm8tY2FjaGUgLi4uYCAoPjApLgoKS25vd24gcHJlLWV4aXN0aW5nIGxpbWl0YXRpb24gKG91dCBvZiBzY29wZSk6IGEgaG9zdCB0aGF0IGxlZ2l0aW1hdGVseSBleHBlY3RzCnplcm8gT1NEcyAoZW1wdHkgYGRldmljZXNgL2BjZXBoX29zZF9kZXZpY2VzYCkgc3RpbGwgZmFpbHMgaW4gdGVzdHMgNC81LCB3aGljaAppbmRleCBpbnRvIGBfb3Nkc19jb250YWluZXJzWzBdYCAvIGBfb3Nkc19jcnVzaF9ub2RlX2RhdGFbMF1gLiBUaGlzIHByZWRhdGVzCnRoaXMgUFIgKHN1Y2ggaG9zdHMgY3Jhc2hlZCBhdCB0aGUgY291bnQgdGFzayBiZWZvcmUpLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSk=
      patchset: b8d5a30512b4f2303ee8e80b0183564f9c898c81
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/ansible-lint/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-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/osism/zuul-jobs
            role_path: ansible/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/osism/ansible-playbooks
        name: osism/ansible-playbooks
        short_name: ansible-playbooks
        src_dir: src/github.com/osism/ansible-playbooks
      projects:
        github.com/osism/ansible-playbooks:
          canonical_hostname: github.com
          canonical_name: github.com/osism/ansible-playbooks
          checkout: main
          checkout_description: zuul branch
          commit: 124881206366106c588f725a073546c29e6d9e64
          name: osism/ansible-playbooks
          required: false
          short_name: ansible-playbooks
          src_dir: src/github.com/osism/ansible-playbooks
      ref: refs/pull/563/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
