all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feec:aec1
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: a81801c3-105e-4413-8292-851f00e4c524
        host_id: de4c9765152b8ccf16bcbbf90e33fb083884dc744cc344501046bc88
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feec:aec1
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.109
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.82
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feec:aec1
        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 yamllint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint explicit: None implied: None source: osism/container-image-inventory-reconciler/.zuul.yaml@main#104>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: fb68c3dc2c3f4aec8f402babcfafbadb
      build_refs:
      - branch: main
        change: '521'
        change_message: "Stage ansible.cfg via rsync for atomic updates\n\n## Summary\n\n-
          Render `ansible.cfg` into `/inventory.merge/ansible/` so it ships as part
          of the staging-tree rsync rather than being written directly into `/inventory/ansible/`
          after the rsync completes.\n- Add `--delay-updates` to the `/inventory.merge/
          \u2192 /inventory` rsync so consumers see an atomic `renameat` swap of each
          file, including `ansible.cfg`.\n- Drop the now-unnecessary post-rsync `mkdir
          -p /inventory/ansible` + `python3 /merge-ansible-cfg.py` sequence.\n\n##
          Why\n\nThe previous ordering had a short window (tens to hundreds of milliseconds)
          in which `/inventory/ansible/ansible.cfg` did not exist: the `rsync --delete`
          at `run.sh:84` removed the previous copy, and `merge-ansible-cfg.py` at
          `run.sh:105` had not yet rewritten it. Consumer containers (`osism-ansible`,
          `kolla-ansible` for 2023.2 / 2024.1 / 2024.2 / 2025.1 / 2025.2, `ceph-ansible`)
          that resolved `ANSIBLE_CONFIG` during that window silently fell through
          to the image-baked `/etc/ansible/ansible.cfg`, which carries a stale `private_key_file`
          pointer, producing `UNREACHABLE` on gather-facts and a silently corrupt
          fact cache for the rest of the deploy.\n\nWith the merge staged before the
          rsync and `--delay-updates` engaged, the live `ansible.cfg` transitions
          old \u2192 new via a single atomic `rename(2)`; there is no absent window.
          No consumer-side change is required \u2014 all three container families
          use the same three-tier ladder against `/ansible/inventory/ansible/ansible.cfg`.\n\n##
          Recent CI evidence\n\nFive most recent hits of the `ok=1 changed=0 ... ignored=1`
          PLAY RECAP fingerprint in `osism/testbed` Zuul periodic jobs (sweep run
          2026-04-22):\n\n| Date | UUID | Job | Log |\n|---|---|---|---|\n| 2026-04-22
          | `b65aed14` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b65/osism/b65aed14c9df4fc6a843f034b5ab63a5/
          |\n| 2026-04-22 | `b8d90e36` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b8d/osism/b8d90e36115f486386f7c62f5e48a27f/
          |\n| 2026-04-21 | `f871de0e` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/f87/osism/f871de0e9edf4d3eaf1997946d17c1df/
          |\n| 2026-04-20 | `0c547945` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/0c5/osism/0c547945e3c249e19555e011f583bccb/
          |\n| 2026-04-19 | `233cebef` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/233/osism/233cebefaf8f44b2921355cd5995b046/
          |\n\nEach build shows all 7 testbed hosts returning `ok=1 changed=0 ...
          ignored=1` from `osism apply gather-facts`, matching the byte-for-byte reproducer
          of the `ANSIBLE_CONFIG` fall-through (confirmed at ends of the longer sweep
          window via `grep '/ansible/secrets/id_rsa'` against the build logs). Several
          of the hits progressed past k3s-join because the 20-retry loop absorbed
          the loopback symptom, then failed on an unrelated tempest regression \u2014
          the fact cache was still silently corrupt for the entire build.\n\n## Test
          plan\n\n- [ ] Rebuild `container-image-inventory-reconciler` from this branch.\n-
          [ ] Run `contrib/operator-loop.py` (in `osism/testbed`) against a fresh-deploy
          cloudpod to exercise the reconciler/consumer race over multiple cycles.\n-
          [ ] With a tight `stat`/`inotify` watcher on `/ansible/inventory/ansible/ansible.cfg`
          during a reconciler cycle, confirm the file is never absent (only ever replaced).\n-
          [ ] Confirm no gather-facts `UNREACHABLE` recaps attributable to the silent
          `ANSIBLE_CONFIG` fall-through during repeated deploy loops.\n\n## Notes\n\n-
          Companion hygiene fixes (strip the stale `private_key_file` line from the
          three image-default `ansible.cfg` files, fail-loud guard on `ANSIBLE_CONFIG`
          in `run-generic.sh`, drop `ignore_unreachable: true` from `gather-facts.yml`)
          are tracked separately and do not depend on this change; this PR removes
          the race at its source.\n- The sibling post-rsync writer `generate-clustershell-ansible-file.py`
          at `run.sh:101` opens a smaller window for clustershell consumers. It is
          not currently biting the silent-cache-miss bug (no gather-facts path reads
          `/inventory/clustershell/`), but the same staging pattern would close it
          and is worth a follow-up PR."
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/521
        commit_id: 288a01abddda8607d0a9c52386758d01b0ca45ab
        patchset: 288a01abddda8607d0a9c52386758d01b0ca45ab
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      buildset: df7faf4855404906a52309fcac34c781
      buildset_refs:
      - branch: main
        change: '521'
        change_message: "Stage ansible.cfg via rsync for atomic updates\n\n## Summary\n\n-
          Render `ansible.cfg` into `/inventory.merge/ansible/` so it ships as part
          of the staging-tree rsync rather than being written directly into `/inventory/ansible/`
          after the rsync completes.\n- Add `--delay-updates` to the `/inventory.merge/
          \u2192 /inventory` rsync so consumers see an atomic `renameat` swap of each
          file, including `ansible.cfg`.\n- Drop the now-unnecessary post-rsync `mkdir
          -p /inventory/ansible` + `python3 /merge-ansible-cfg.py` sequence.\n\n##
          Why\n\nThe previous ordering had a short window (tens to hundreds of milliseconds)
          in which `/inventory/ansible/ansible.cfg` did not exist: the `rsync --delete`
          at `run.sh:84` removed the previous copy, and `merge-ansible-cfg.py` at
          `run.sh:105` had not yet rewritten it. Consumer containers (`osism-ansible`,
          `kolla-ansible` for 2023.2 / 2024.1 / 2024.2 / 2025.1 / 2025.2, `ceph-ansible`)
          that resolved `ANSIBLE_CONFIG` during that window silently fell through
          to the image-baked `/etc/ansible/ansible.cfg`, which carries a stale `private_key_file`
          pointer, producing `UNREACHABLE` on gather-facts and a silently corrupt
          fact cache for the rest of the deploy.\n\nWith the merge staged before the
          rsync and `--delay-updates` engaged, the live `ansible.cfg` transitions
          old \u2192 new via a single atomic `rename(2)`; there is no absent window.
          No consumer-side change is required \u2014 all three container families
          use the same three-tier ladder against `/ansible/inventory/ansible/ansible.cfg`.\n\n##
          Recent CI evidence\n\nFive most recent hits of the `ok=1 changed=0 ... ignored=1`
          PLAY RECAP fingerprint in `osism/testbed` Zuul periodic jobs (sweep run
          2026-04-22):\n\n| Date | UUID | Job | Log |\n|---|---|---|---|\n| 2026-04-22
          | `b65aed14` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b65/osism/b65aed14c9df4fc6a843f034b5ab63a5/
          |\n| 2026-04-22 | `b8d90e36` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b8d/osism/b8d90e36115f486386f7c62f5e48a27f/
          |\n| 2026-04-21 | `f871de0e` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/f87/osism/f871de0e9edf4d3eaf1997946d17c1df/
          |\n| 2026-04-20 | `0c547945` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/0c5/osism/0c547945e3c249e19555e011f583bccb/
          |\n| 2026-04-19 | `233cebef` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/233/osism/233cebefaf8f44b2921355cd5995b046/
          |\n\nEach build shows all 7 testbed hosts returning `ok=1 changed=0 ...
          ignored=1` from `osism apply gather-facts`, matching the byte-for-byte reproducer
          of the `ANSIBLE_CONFIG` fall-through (confirmed at ends of the longer sweep
          window via `grep '/ansible/secrets/id_rsa'` against the build logs). Several
          of the hits progressed past k3s-join because the 20-retry loop absorbed
          the loopback symptom, then failed on an unrelated tempest regression \u2014
          the fact cache was still silently corrupt for the entire build.\n\n## Test
          plan\n\n- [ ] Rebuild `container-image-inventory-reconciler` from this branch.\n-
          [ ] Run `contrib/operator-loop.py` (in `osism/testbed`) against a fresh-deploy
          cloudpod to exercise the reconciler/consumer race over multiple cycles.\n-
          [ ] With a tight `stat`/`inotify` watcher on `/ansible/inventory/ansible/ansible.cfg`
          during a reconciler cycle, confirm the file is never absent (only ever replaced).\n-
          [ ] Confirm no gather-facts `UNREACHABLE` recaps attributable to the silent
          `ANSIBLE_CONFIG` fall-through during repeated deploy loops.\n\n## Notes\n\n-
          Companion hygiene fixes (strip the stale `private_key_file` line from the
          three image-default `ansible.cfg` files, fail-loud guard on `ANSIBLE_CONFIG`
          in `run-generic.sh`, drop `ignore_unreachable: true` from `gather-facts.yml`)
          are tracked separately and do not depend on this change; this PR removes
          the race at its source.\n- The sibling post-rsync writer `generate-clustershell-ansible-file.py`
          at `run.sh:101` opens a smaller window for clustershell consumers. It is
          not currently biting the silent-cache-miss bug (no gather-facts path reads
          `/inventory/clustershell/`), but the same staging pattern would close it
          and is worth a follow-up PR."
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/521
        commit_id: 288a01abddda8607d0a9c52386758d01b0ca45ab
        patchset: 288a01abddda8607d0a9c52386758d01b0ca45ab
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      change: '521'
      change_message: "Stage ansible.cfg via rsync for atomic updates\n\n## Summary\n\n-
        Render `ansible.cfg` into `/inventory.merge/ansible/` so it ships as part
        of the staging-tree rsync rather than being written directly into `/inventory/ansible/`
        after the rsync completes.\n- Add `--delay-updates` to the `/inventory.merge/
        \u2192 /inventory` rsync so consumers see an atomic `renameat` swap of each
        file, including `ansible.cfg`.\n- Drop the now-unnecessary post-rsync `mkdir
        -p /inventory/ansible` + `python3 /merge-ansible-cfg.py` sequence.\n\n## Why\n\nThe
        previous ordering had a short window (tens to hundreds of milliseconds) in
        which `/inventory/ansible/ansible.cfg` did not exist: the `rsync --delete`
        at `run.sh:84` removed the previous copy, and `merge-ansible-cfg.py` at `run.sh:105`
        had not yet rewritten it. Consumer containers (`osism-ansible`, `kolla-ansible`
        for 2023.2 / 2024.1 / 2024.2 / 2025.1 / 2025.2, `ceph-ansible`) that resolved
        `ANSIBLE_CONFIG` during that window silently fell through to the image-baked
        `/etc/ansible/ansible.cfg`, which carries a stale `private_key_file` pointer,
        producing `UNREACHABLE` on gather-facts and a silently corrupt fact cache
        for the rest of the deploy.\n\nWith the merge staged before the rsync and
        `--delay-updates` engaged, the live `ansible.cfg` transitions old \u2192 new
        via a single atomic `rename(2)`; there is no absent window. No consumer-side
        change is required \u2014 all three container families use the same three-tier
        ladder against `/ansible/inventory/ansible/ansible.cfg`.\n\n## Recent CI evidence\n\nFive
        most recent hits of the `ok=1 changed=0 ... ignored=1` PLAY RECAP fingerprint
        in `osism/testbed` Zuul periodic jobs (sweep run 2026-04-22):\n\n| Date |
        UUID | Job | Log |\n|---|---|---|---|\n| 2026-04-22 | `b65aed14` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
        | https://logs.services.osism.tech/b65/osism/b65aed14c9df4fc6a843f034b5ab63a5/
        |\n| 2026-04-22 | `b8d90e36` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
        | https://logs.services.osism.tech/b8d/osism/b8d90e36115f486386f7c62f5e48a27f/
        |\n| 2026-04-21 | `f871de0e` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
        | https://logs.services.osism.tech/f87/osism/f871de0e9edf4d3eaf1997946d17c1df/
        |\n| 2026-04-20 | `0c547945` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
        | https://logs.services.osism.tech/0c5/osism/0c547945e3c249e19555e011f583bccb/
        |\n| 2026-04-19 | `233cebef` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
        | https://logs.services.osism.tech/233/osism/233cebefaf8f44b2921355cd5995b046/
        |\n\nEach build shows all 7 testbed hosts returning `ok=1 changed=0 ... ignored=1`
        from `osism apply gather-facts`, matching the byte-for-byte reproducer of
        the `ANSIBLE_CONFIG` fall-through (confirmed at ends of the longer sweep window
        via `grep '/ansible/secrets/id_rsa'` against the build logs). Several of the
        hits progressed past k3s-join because the 20-retry loop absorbed the loopback
        symptom, then failed on an unrelated tempest regression \u2014 the fact cache
        was still silently corrupt for the entire build.\n\n## Test plan\n\n- [ ]
        Rebuild `container-image-inventory-reconciler` from this branch.\n- [ ] Run
        `contrib/operator-loop.py` (in `osism/testbed`) against a fresh-deploy cloudpod
        to exercise the reconciler/consumer race over multiple cycles.\n- [ ] With
        a tight `stat`/`inotify` watcher on `/ansible/inventory/ansible/ansible.cfg`
        during a reconciler cycle, confirm the file is never absent (only ever replaced).\n-
        [ ] Confirm no gather-facts `UNREACHABLE` recaps attributable to the silent
        `ANSIBLE_CONFIG` fall-through during repeated deploy loops.\n\n## Notes\n\n-
        Companion hygiene fixes (strip the stale `private_key_file` line from the
        three image-default `ansible.cfg` files, fail-loud guard on `ANSIBLE_CONFIG`
        in `run-generic.sh`, drop `ignore_unreachable: true` from `gather-facts.yml`)
        are tracked separately and do not depend on this change; this PR removes the
        race at its source.\n- The sibling post-rsync writer `generate-clustershell-ansible-file.py`
        at `run.sh:101` opens a smaller window for clustershell consumers. It is not
        currently biting the silent-cache-miss bug (no gather-facts path reads `/inventory/clustershell/`),
        but the same staging pattern would close it and is worth a follow-up PR."
      change_url: https://github.com/osism/container-image-inventory-reconciler/pull/521
      child_jobs: []
      commit_id: 288a01abddda8607d0a9c52386758d01b0ca45ab
      event_id: 48597630-40ca-11f1-8203-63ae81bd9051
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/fb68c3dc2c3f4aec8f402babcfafbadb/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/fb68c3dc2c3f4aec8f402babcfafbadb/work/logs
        result_data_file: /var/lib/zuul/builds/fb68c3dc2c3f4aec8f402babcfafbadb/work/results.json
        src_root: /var/lib/zuul/builds/fb68c3dc2c3f4aec8f402babcfafbadb/work/src
        work_root: /var/lib/zuul/builds/fb68c3dc2c3f4aec8f402babcfafbadb/work
      include_vars: []
      items:
      - branch: main
        change: '521'
        change_message: "Stage ansible.cfg via rsync for atomic updates\n\n## Summary\n\n-
          Render `ansible.cfg` into `/inventory.merge/ansible/` so it ships as part
          of the staging-tree rsync rather than being written directly into `/inventory/ansible/`
          after the rsync completes.\n- Add `--delay-updates` to the `/inventory.merge/
          \u2192 /inventory` rsync so consumers see an atomic `renameat` swap of each
          file, including `ansible.cfg`.\n- Drop the now-unnecessary post-rsync `mkdir
          -p /inventory/ansible` + `python3 /merge-ansible-cfg.py` sequence.\n\n##
          Why\n\nThe previous ordering had a short window (tens to hundreds of milliseconds)
          in which `/inventory/ansible/ansible.cfg` did not exist: the `rsync --delete`
          at `run.sh:84` removed the previous copy, and `merge-ansible-cfg.py` at
          `run.sh:105` had not yet rewritten it. Consumer containers (`osism-ansible`,
          `kolla-ansible` for 2023.2 / 2024.1 / 2024.2 / 2025.1 / 2025.2, `ceph-ansible`)
          that resolved `ANSIBLE_CONFIG` during that window silently fell through
          to the image-baked `/etc/ansible/ansible.cfg`, which carries a stale `private_key_file`
          pointer, producing `UNREACHABLE` on gather-facts and a silently corrupt
          fact cache for the rest of the deploy.\n\nWith the merge staged before the
          rsync and `--delay-updates` engaged, the live `ansible.cfg` transitions
          old \u2192 new via a single atomic `rename(2)`; there is no absent window.
          No consumer-side change is required \u2014 all three container families
          use the same three-tier ladder against `/ansible/inventory/ansible/ansible.cfg`.\n\n##
          Recent CI evidence\n\nFive most recent hits of the `ok=1 changed=0 ... ignored=1`
          PLAY RECAP fingerprint in `osism/testbed` Zuul periodic jobs (sweep run
          2026-04-22):\n\n| Date | UUID | Job | Log |\n|---|---|---|---|\n| 2026-04-22
          | `b65aed14` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b65/osism/b65aed14c9df4fc6a843f034b5ab63a5/
          |\n| 2026-04-22 | `b8d90e36` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/b8d/osism/b8d90e36115f486386f7c62f5e48a27f/
          |\n| 2026-04-21 | `f871de0e` | `testbed-deploy-next-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/f87/osism/f871de0e9edf4d3eaf1997946d17c1df/
          |\n| 2026-04-20 | `0c547945` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/0c5/osism/0c547945e3c249e19555e011f583bccb/
          |\n| 2026-04-19 | `233cebef` | `testbed-deploy-current-in-a-nutshell-with-tempest-ubuntu-24.04`
          | https://logs.services.osism.tech/233/osism/233cebefaf8f44b2921355cd5995b046/
          |\n\nEach build shows all 7 testbed hosts returning `ok=1 changed=0 ...
          ignored=1` from `osism apply gather-facts`, matching the byte-for-byte reproducer
          of the `ANSIBLE_CONFIG` fall-through (confirmed at ends of the longer sweep
          window via `grep '/ansible/secrets/id_rsa'` against the build logs). Several
          of the hits progressed past k3s-join because the 20-retry loop absorbed
          the loopback symptom, then failed on an unrelated tempest regression \u2014
          the fact cache was still silently corrupt for the entire build.\n\n## Test
          plan\n\n- [ ] Rebuild `container-image-inventory-reconciler` from this branch.\n-
          [ ] Run `contrib/operator-loop.py` (in `osism/testbed`) against a fresh-deploy
          cloudpod to exercise the reconciler/consumer race over multiple cycles.\n-
          [ ] With a tight `stat`/`inotify` watcher on `/ansible/inventory/ansible/ansible.cfg`
          during a reconciler cycle, confirm the file is never absent (only ever replaced).\n-
          [ ] Confirm no gather-facts `UNREACHABLE` recaps attributable to the silent
          `ANSIBLE_CONFIG` fall-through during repeated deploy loops.\n\n## Notes\n\n-
          Companion hygiene fixes (strip the stale `private_key_file` line from the
          three image-default `ansible.cfg` files, fail-loud guard on `ANSIBLE_CONFIG`
          in `run-generic.sh`, drop `ignore_unreachable: true` from `gather-facts.yml`)
          are tracked separately and do not depend on this change; this PR removes
          the race at its source.\n- The sibling post-rsync writer `generate-clustershell-ansible-file.py`
          at `run.sh:101` opens a smaller window for clustershell consumers. It is
          not currently biting the silent-cache-miss bug (no gather-facts path reads
          `/inventory/clustershell/`), but the same staging pattern would close it
          and is worth a follow-up PR."
        change_url: https://github.com/osism/container-image-inventory-reconciler/pull/521
        commit_id: 288a01abddda8607d0a9c52386758d01b0ca45ab
        patchset: 288a01abddda8607d0a9c52386758d01b0ca45ab
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          name: osism/container-image-inventory-reconciler
          short_name: container-image-inventory-reconciler
          src_dir: src/github.com/osism/container-image-inventory-reconciler
        topic: null
      job: yamllint
      jobtags: []
      max_attempts: 3
      message: U3RhZ2UgYW5zaWJsZS5jZmcgdmlhIHJzeW5jIGZvciBhdG9taWMgdXBkYXRlcwoKIyMgU3VtbWFyeQoKLSBSZW5kZXIgYGFuc2libGUuY2ZnYCBpbnRvIGAvaW52ZW50b3J5Lm1lcmdlL2Fuc2libGUvYCBzbyBpdCBzaGlwcyBhcyBwYXJ0IG9mIHRoZSBzdGFnaW5nLXRyZWUgcnN5bmMgcmF0aGVyIHRoYW4gYmVpbmcgd3JpdHRlbiBkaXJlY3RseSBpbnRvIGAvaW52ZW50b3J5L2Fuc2libGUvYCBhZnRlciB0aGUgcnN5bmMgY29tcGxldGVzLgotIEFkZCBgLS1kZWxheS11cGRhdGVzYCB0byB0aGUgYC9pbnZlbnRvcnkubWVyZ2UvIOKGkiAvaW52ZW50b3J5YCByc3luYyBzbyBjb25zdW1lcnMgc2VlIGFuIGF0b21pYyBgcmVuYW1lYXRgIHN3YXAgb2YgZWFjaCBmaWxlLCBpbmNsdWRpbmcgYGFuc2libGUuY2ZnYC4KLSBEcm9wIHRoZSBub3ctdW5uZWNlc3NhcnkgcG9zdC1yc3luYyBgbWtkaXIgLXAgL2ludmVudG9yeS9hbnNpYmxlYCArIGBweXRob24zIC9tZXJnZS1hbnNpYmxlLWNmZy5weWAgc2VxdWVuY2UuCgojIyBXaHkKClRoZSBwcmV2aW91cyBvcmRlcmluZyBoYWQgYSBzaG9ydCB3aW5kb3cgKHRlbnMgdG8gaHVuZHJlZHMgb2YgbWlsbGlzZWNvbmRzKSBpbiB3aGljaCBgL2ludmVudG9yeS9hbnNpYmxlL2Fuc2libGUuY2ZnYCBkaWQgbm90IGV4aXN0OiB0aGUgYHJzeW5jIC0tZGVsZXRlYCBhdCBgcnVuLnNoOjg0YCByZW1vdmVkIHRoZSBwcmV2aW91cyBjb3B5LCBhbmQgYG1lcmdlLWFuc2libGUtY2ZnLnB5YCBhdCBgcnVuLnNoOjEwNWAgaGFkIG5vdCB5ZXQgcmV3cml0dGVuIGl0LiBDb25zdW1lciBjb250YWluZXJzIChgb3Npc20tYW5zaWJsZWAsIGBrb2xsYS1hbnNpYmxlYCBmb3IgMjAyMy4yIC8gMjAyNC4xIC8gMjAyNC4yIC8gMjAyNS4xIC8gMjAyNS4yLCBgY2VwaC1hbnNpYmxlYCkgdGhhdCByZXNvbHZlZCBgQU5TSUJMRV9DT05GSUdgIGR1cmluZyB0aGF0IHdpbmRvdyBzaWxlbnRseSBmZWxsIHRocm91Z2ggdG8gdGhlIGltYWdlLWJha2VkIGAvZXRjL2Fuc2libGUvYW5zaWJsZS5jZmdgLCB3aGljaCBjYXJyaWVzIGEgc3RhbGUgYHByaXZhdGVfa2V5X2ZpbGVgIHBvaW50ZXIsIHByb2R1Y2luZyBgVU5SRUFDSEFCTEVgIG9uIGdhdGhlci1mYWN0cyBhbmQgYSBzaWxlbnRseSBjb3JydXB0IGZhY3QgY2FjaGUgZm9yIHRoZSByZXN0IG9mIHRoZSBkZXBsb3kuCgpXaXRoIHRoZSBtZXJnZSBzdGFnZWQgYmVmb3JlIHRoZSByc3luYyBhbmQgYC0tZGVsYXktdXBkYXRlc2AgZW5nYWdlZCwgdGhlIGxpdmUgYGFuc2libGUuY2ZnYCB0cmFuc2l0aW9ucyBvbGQg4oaSIG5ldyB2aWEgYSBzaW5nbGUgYXRvbWljIGByZW5hbWUoMilgOyB0aGVyZSBpcyBubyBhYnNlbnQgd2luZG93LiBObyBjb25zdW1lci1zaWRlIGNoYW5nZSBpcyByZXF1aXJlZCDigJQgYWxsIHRocmVlIGNvbnRhaW5lciBmYW1pbGllcyB1c2UgdGhlIHNhbWUgdGhyZWUtdGllciBsYWRkZXIgYWdhaW5zdCBgL2Fuc2libGUvaW52ZW50b3J5L2Fuc2libGUvYW5zaWJsZS5jZmdgLgoKIyMgUmVjZW50IENJIGV2aWRlbmNlCgpGaXZlIG1vc3QgcmVjZW50IGhpdHMgb2YgdGhlIGBvaz0xIGNoYW5nZWQ9MCAuLi4gaWdub3JlZD0xYCBQTEFZIFJFQ0FQIGZpbmdlcnByaW50IGluIGBvc2lzbS90ZXN0YmVkYCBadXVsIHBlcmlvZGljIGpvYnMgKHN3ZWVwIHJ1biAyMDI2LTA0LTIyKToKCnwgRGF0ZSB8IFVVSUQgfCBKb2IgfCBMb2cgfAp8LS0tfC0tLXwtLS18LS0tfAp8IDIwMjYtMDQtMjIgfCBgYjY1YWVkMTRgIHwgYHRlc3RiZWQtZGVwbG95LWN1cnJlbnQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YCB8IGh0dHBzOi8vbG9ncy5zZXJ2aWNlcy5vc2lzbS50ZWNoL2I2NS9vc2lzbS9iNjVhZWQxNGM5ZGY0ZmM2YTg0M2YwMzRiNWFiNjNhNS8gfAp8IDIwMjYtMDQtMjIgfCBgYjhkOTBlMzZgIHwgYHRlc3RiZWQtZGVwbG95LW5leHQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YCB8IGh0dHBzOi8vbG9ncy5zZXJ2aWNlcy5vc2lzbS50ZWNoL2I4ZC9vc2lzbS9iOGQ5MGUzNjExNWY0ODYzODZmN2M2MmY1ZTQ4YTI3Zi8gfAp8IDIwMjYtMDQtMjEgfCBgZjg3MWRlMGVgIHwgYHRlc3RiZWQtZGVwbG95LW5leHQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YCB8IGh0dHBzOi8vbG9ncy5zZXJ2aWNlcy5vc2lzbS50ZWNoL2Y4Ny9vc2lzbS9mODcxZGUwZTllZGY0ZDNlYWYxOTk3OTQ2ZDE3YzFkZi8gfAp8IDIwMjYtMDQtMjAgfCBgMGM1NDc5NDVgIHwgYHRlc3RiZWQtZGVwbG95LWN1cnJlbnQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YCB8IGh0dHBzOi8vbG9ncy5zZXJ2aWNlcy5vc2lzbS50ZWNoLzBjNS9vc2lzbS8wYzU0Nzk0NWUzYzI0OWUxOTU1NWUwMTFmNTgzYmNjYi8gfAp8IDIwMjYtMDQtMTkgfCBgMjMzY2ViZWZgIHwgYHRlc3RiZWQtZGVwbG95LWN1cnJlbnQtaW4tYS1udXRzaGVsbC13aXRoLXRlbXBlc3QtdWJ1bnR1LTI0LjA0YCB8IGh0dHBzOi8vbG9ncy5zZXJ2aWNlcy5vc2lzbS50ZWNoLzIzMy9vc2lzbS8yMzNjZWJlZmFmOGY0NGIyOTIxMzU1Y2Q1OTk1YjA0Ni8gfAoKRWFjaCBidWlsZCBzaG93cyBhbGwgNyB0ZXN0YmVkIGhvc3RzIHJldHVybmluZyBgb2s9MSBjaGFuZ2VkPTAgLi4uIGlnbm9yZWQ9MWAgZnJvbSBgb3Npc20gYXBwbHkgZ2F0aGVyLWZhY3RzYCwgbWF0Y2hpbmcgdGhlIGJ5dGUtZm9yLWJ5dGUgcmVwcm9kdWNlciBvZiB0aGUgYEFOU0lCTEVfQ09ORklHYCBmYWxsLXRocm91Z2ggKGNvbmZpcm1lZCBhdCBlbmRzIG9mIHRoZSBsb25nZXIgc3dlZXAgd2luZG93IHZpYSBgZ3JlcCAnL2Fuc2libGUvc2VjcmV0cy9pZF9yc2EnYCBhZ2FpbnN0IHRoZSBidWlsZCBsb2dzKS4gU2V2ZXJhbCBvZiB0aGUgaGl0cyBwcm9ncmVzc2VkIHBhc3QgazNzLWpvaW4gYmVjYXVzZSB0aGUgMjAtcmV0cnkgbG9vcCBhYnNvcmJlZCB0aGUgbG9vcGJhY2sgc3ltcHRvbSwgdGhlbiBmYWlsZWQgb24gYW4gdW5yZWxhdGVkIHRlbXBlc3QgcmVncmVzc2lvbiDigJQgdGhlIGZhY3QgY2FjaGUgd2FzIHN0aWxsIHNpbGVudGx5IGNvcnJ1cHQgZm9yIHRoZSBlbnRpcmUgYnVpbGQuCgojIyBUZXN0IHBsYW4KCi0gWyBdIFJlYnVpbGQgYGNvbnRhaW5lci1pbWFnZS1pbnZlbnRvcnktcmVjb25jaWxlcmAgZnJvbSB0aGlzIGJyYW5jaC4KLSBbIF0gUnVuIGBjb250cmliL29wZXJhdG9yLWxvb3AucHlgIChpbiBgb3Npc20vdGVzdGJlZGApIGFnYWluc3QgYSBmcmVzaC1kZXBsb3kgY2xvdWRwb2QgdG8gZXhlcmNpc2UgdGhlIHJlY29uY2lsZXIvY29uc3VtZXIgcmFjZSBvdmVyIG11bHRpcGxlIGN5Y2xlcy4KLSBbIF0gV2l0aCBhIHRpZ2h0IGBzdGF0YC9gaW5vdGlmeWAgd2F0Y2hlciBvbiBgL2Fuc2libGUvaW52ZW50b3J5L2Fuc2libGUvYW5zaWJsZS5jZmdgIGR1cmluZyBhIHJlY29uY2lsZXIgY3ljbGUsIGNvbmZpcm0gdGhlIGZpbGUgaXMgbmV2ZXIgYWJzZW50IChvbmx5IGV2ZXIgcmVwbGFjZWQpLgotIFsgXSBDb25maXJtIG5vIGdhdGhlci1mYWN0cyBgVU5SRUFDSEFCTEVgIHJlY2FwcyBhdHRyaWJ1dGFibGUgdG8gdGhlIHNpbGVudCBgQU5TSUJMRV9DT05GSUdgIGZhbGwtdGhyb3VnaCBkdXJpbmcgcmVwZWF0ZWQgZGVwbG95IGxvb3BzLgoKIyMgTm90ZXMKCi0gQ29tcGFuaW9uIGh5Z2llbmUgZml4ZXMgKHN0cmlwIHRoZSBzdGFsZSBgcHJpdmF0ZV9rZXlfZmlsZWAgbGluZSBmcm9tIHRoZSB0aHJlZSBpbWFnZS1kZWZhdWx0IGBhbnNpYmxlLmNmZ2AgZmlsZXMsIGZhaWwtbG91ZCBndWFyZCBvbiBgQU5TSUJMRV9DT05GSUdgIGluIGBydW4tZ2VuZXJpYy5zaGAsIGRyb3AgYGlnbm9yZV91bnJlYWNoYWJsZTogdHJ1ZWAgZnJvbSBgZ2F0aGVyLWZhY3RzLnltbGApIGFyZSB0cmFja2VkIHNlcGFyYXRlbHkgYW5kIGRvIG5vdCBkZXBlbmQgb24gdGhpcyBjaGFuZ2U7IHRoaXMgUFIgcmVtb3ZlcyB0aGUgcmFjZSBhdCBpdHMgc291cmNlLgotIFRoZSBzaWJsaW5nIHBvc3QtcnN5bmMgd3JpdGVyIGBnZW5lcmF0ZS1jbHVzdGVyc2hlbGwtYW5zaWJsZS1maWxlLnB5YCBhdCBgcnVuLnNoOjEwMWAgb3BlbnMgYSBzbWFsbGVyIHdpbmRvdyBmb3IgY2x1c3RlcnNoZWxsIGNvbnN1bWVycy4gSXQgaXMgbm90IGN1cnJlbnRseSBiaXRpbmcgdGhlIHNpbGVudC1jYWNoZS1taXNzIGJ1ZyAobm8gZ2F0aGVyLWZhY3RzIHBhdGggcmVhZHMgYC9pbnZlbnRvcnkvY2x1c3RlcnNoZWxsL2ApLCBidXQgdGhlIHNhbWUgc3RhZ2luZyBwYXR0ZXJuIHdvdWxkIGNsb3NlIGl0IGFuZCBpcyB3b3J0aCBhIGZvbGxvdy11cCBQUi4=
      patchset: 288a01abddda8607d0a9c52386758d01b0ca45ab
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 8ad17ed1be1f63229e054fab94af45f2511a98ea
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 4f450aa36c28b035ce97359a888edbd7599eaf31
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/yamllint/run.yaml
          roles:
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_0/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_0/zuul-jobs/roles
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/container-image-inventory-reconciler
        name: osism/container-image-inventory-reconciler
        short_name: container-image-inventory-reconciler
        src_dir: src/github.com/osism/container-image-inventory-reconciler
      projects:
        github.com/osism/container-image-inventory-reconciler:
          canonical_hostname: github.com
          canonical_name: github.com/osism/container-image-inventory-reconciler
          checkout: main
          checkout_description: zuul branch
          commit: 888ae89ff79e323cc72cb2e17272ee367d4c64fa
          name: osism/container-image-inventory-reconciler
          required: false
          short_name: container-image-inventory-reconciler
          src_dir: src/github.com/osism/container-image-inventory-reconciler
      ref: refs/pull/521/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
