all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fefd:a674
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: c96fec9c-262f-4ea2-95c8-35fac03f9b4e
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fefd:a674
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.145
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.187
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fefd:a674
        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 flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#143>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 04ff9ae1604b4d14bd88fe92cd266a72
      build_refs:
      - branch: main
        change: '2389'
        change_message: "Add 'osism reset facts' command to clear the Ansible fact
          cache\n\n## Summary\r\n\r\nAdds `osism reset facts`, a command that clears
          the Ansible fact cache so\r\noperators can drop stale or incorrect facts
          during troubleshooting. The\r\nfact cache lives in Redis under `ansible_facts<host>`
          keys (read by\r\n`osism get facts`, `osism/api.py`, and `check_ansible_facts`);
          until now\r\nthere was no command to clear it.\r\n\r\n- By default the command
          flushes the **entire** cache.\r\n- `-l/--limit <pattern>` restricts the
          reset to selected hosts or groups,\r\n  resolving the pattern through `ansible-inventory
          --list --limit`.\r\n- It only clears the cache \u2014 it does **not** start
          a fact-gathering run and\r\n  asks for **no** confirmation. The cache rebuilds
          on the next Ansible run\r\n  that gathers facts.\r\n\r\nCloses #2388\r\n\r\n##
          Changes (in commit order)\r\n\r\n1. **`Add 'osism reset facts' command to
          clear the fact cache`**\r\n   - New `osism/commands/reset.py` with `class
          Facts(Command)`:\r\n     - No limit \u2192 SCAN `ansible_facts*` and batch-delete
          every key\r\n       (mirrors the scan loop in `osism/utils/__init__.py:check_ansible_facts`).\r\n
          \    - `-l/--limit` \u2192 expand the host/group pattern via `ansible-inventory`\r\n
          \      and delete only the matching `ansible_facts<host>` keys\r\n       (mirrors
          the limit\u2192inventory idiom in `osism/commands/report.py`).\r\n     -
          Redis key deletion reuses the `utils.redis.delete(...)` idiom from\r\n       `osism/commands/vault.py`.\r\n
          \  - Registers the entry point `reset facts = osism.commands.reset:Facts`\r\n
          \    in `setup.cfg` (no `reset` namespace existed before; no collision).\r\n\r\n2.
          **`Add unit tests for 'osism reset facts'`**\r\n   - New `tests/unit/commands/test_reset.py`
          covering flush-all,\r\n     empty-cache no-op, Redis error, `--limit` host
          expansion, and the\r\n     inventory-load failure and timeout paths.\r\n\r\n##
          Notes for reviewers\r\n\r\n- **Command name** (`reset facts`) is a design
          choice the issue did not\r\n  fix. It avoids overloading `sync facts` (which
          *does* gather) and there\r\n  is no existing `reset` namespace. Renaming
          is a one-line `setup.cfg`\r\n  change if you prefer e.g. `facts reset`.\r\n-
          **Redis cache only.** A second, file-based fact cache at\r\n  `/cache/facts/<host>`
          is read only by `osism/api.py:search_inventory`.\r\n  This command clears
          the canonical Redis cache that the operator-facing\r\n  CLI uses; clearing
          the API's file cache is out of scope absent a\r\n  confirmed need.\r\n-
          The external CLI reference (osism.tech) lives in a separate repo and is\r\n
          \ not updated here; the in-repo doc surface is the command docstring and\r\n
          \ `--limit` help text rendered by `osism reset facts --help`.\r\n\r\n##
          Local verification\r\n\r\n- `flake8 osism/commands/reset.py tests/unit/commands/test_reset.py`
          \u2014 pass\r\n- Unit suite (`pytest tests/unit`) runs in CI/Zuul per project
          convention.\r\n\r\n---\r\n\r\n_Implemented by [planwerk-review](https://github.com/planwerk/planwerk-review)
          with Claude:claude-opus-4-8_\r\n"
        change_url: https://github.com/osism/python-osism/pull/2389
        commit_id: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        patchset: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      buildset: f65f16fd67da4afd950663cbd78f4e77
      buildset_refs:
      - branch: main
        change: '2389'
        change_message: "Add 'osism reset facts' command to clear the Ansible fact
          cache\n\n## Summary\r\n\r\nAdds `osism reset facts`, a command that clears
          the Ansible fact cache so\r\noperators can drop stale or incorrect facts
          during troubleshooting. The\r\nfact cache lives in Redis under `ansible_facts<host>`
          keys (read by\r\n`osism get facts`, `osism/api.py`, and `check_ansible_facts`);
          until now\r\nthere was no command to clear it.\r\n\r\n- By default the command
          flushes the **entire** cache.\r\n- `-l/--limit <pattern>` restricts the
          reset to selected hosts or groups,\r\n  resolving the pattern through `ansible-inventory
          --list --limit`.\r\n- It only clears the cache \u2014 it does **not** start
          a fact-gathering run and\r\n  asks for **no** confirmation. The cache rebuilds
          on the next Ansible run\r\n  that gathers facts.\r\n\r\nCloses #2388\r\n\r\n##
          Changes (in commit order)\r\n\r\n1. **`Add 'osism reset facts' command to
          clear the fact cache`**\r\n   - New `osism/commands/reset.py` with `class
          Facts(Command)`:\r\n     - No limit \u2192 SCAN `ansible_facts*` and batch-delete
          every key\r\n       (mirrors the scan loop in `osism/utils/__init__.py:check_ansible_facts`).\r\n
          \    - `-l/--limit` \u2192 expand the host/group pattern via `ansible-inventory`\r\n
          \      and delete only the matching `ansible_facts<host>` keys\r\n       (mirrors
          the limit\u2192inventory idiom in `osism/commands/report.py`).\r\n     -
          Redis key deletion reuses the `utils.redis.delete(...)` idiom from\r\n       `osism/commands/vault.py`.\r\n
          \  - Registers the entry point `reset facts = osism.commands.reset:Facts`\r\n
          \    in `setup.cfg` (no `reset` namespace existed before; no collision).\r\n\r\n2.
          **`Add unit tests for 'osism reset facts'`**\r\n   - New `tests/unit/commands/test_reset.py`
          covering flush-all,\r\n     empty-cache no-op, Redis error, `--limit` host
          expansion, and the\r\n     inventory-load failure and timeout paths.\r\n\r\n##
          Notes for reviewers\r\n\r\n- **Command name** (`reset facts`) is a design
          choice the issue did not\r\n  fix. It avoids overloading `sync facts` (which
          *does* gather) and there\r\n  is no existing `reset` namespace. Renaming
          is a one-line `setup.cfg`\r\n  change if you prefer e.g. `facts reset`.\r\n-
          **Redis cache only.** A second, file-based fact cache at\r\n  `/cache/facts/<host>`
          is read only by `osism/api.py:search_inventory`.\r\n  This command clears
          the canonical Redis cache that the operator-facing\r\n  CLI uses; clearing
          the API's file cache is out of scope absent a\r\n  confirmed need.\r\n-
          The external CLI reference (osism.tech) lives in a separate repo and is\r\n
          \ not updated here; the in-repo doc surface is the command docstring and\r\n
          \ `--limit` help text rendered by `osism reset facts --help`.\r\n\r\n##
          Local verification\r\n\r\n- `flake8 osism/commands/reset.py tests/unit/commands/test_reset.py`
          \u2014 pass\r\n- Unit suite (`pytest tests/unit`) runs in CI/Zuul per project
          convention.\r\n\r\n---\r\n\r\n_Implemented by [planwerk-review](https://github.com/planwerk/planwerk-review)
          with Claude:claude-opus-4-8_\r\n"
        change_url: https://github.com/osism/python-osism/pull/2389
        commit_id: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        patchset: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      change: '2389'
      change_message: "Add 'osism reset facts' command to clear the Ansible fact cache\n\n##
        Summary\r\n\r\nAdds `osism reset facts`, a command that clears the Ansible
        fact cache so\r\noperators can drop stale or incorrect facts during troubleshooting.
        The\r\nfact cache lives in Redis under `ansible_facts<host>` keys (read by\r\n`osism
        get facts`, `osism/api.py`, and `check_ansible_facts`); until now\r\nthere
        was no command to clear it.\r\n\r\n- By default the command flushes the **entire**
        cache.\r\n- `-l/--limit <pattern>` restricts the reset to selected hosts or
        groups,\r\n  resolving the pattern through `ansible-inventory --list --limit`.\r\n-
        It only clears the cache \u2014 it does **not** start a fact-gathering run
        and\r\n  asks for **no** confirmation. The cache rebuilds on the next Ansible
        run\r\n  that gathers facts.\r\n\r\nCloses #2388\r\n\r\n## Changes (in commit
        order)\r\n\r\n1. **`Add 'osism reset facts' command to clear the fact cache`**\r\n
        \  - New `osism/commands/reset.py` with `class Facts(Command)`:\r\n     -
        No limit \u2192 SCAN `ansible_facts*` and batch-delete every key\r\n       (mirrors
        the scan loop in `osism/utils/__init__.py:check_ansible_facts`).\r\n     -
        `-l/--limit` \u2192 expand the host/group pattern via `ansible-inventory`\r\n
        \      and delete only the matching `ansible_facts<host>` keys\r\n       (mirrors
        the limit\u2192inventory idiom in `osism/commands/report.py`).\r\n     - Redis
        key deletion reuses the `utils.redis.delete(...)` idiom from\r\n       `osism/commands/vault.py`.\r\n
        \  - Registers the entry point `reset facts = osism.commands.reset:Facts`\r\n
        \    in `setup.cfg` (no `reset` namespace existed before; no collision).\r\n\r\n2.
        **`Add unit tests for 'osism reset facts'`**\r\n   - New `tests/unit/commands/test_reset.py`
        covering flush-all,\r\n     empty-cache no-op, Redis error, `--limit` host
        expansion, and the\r\n     inventory-load failure and timeout paths.\r\n\r\n##
        Notes for reviewers\r\n\r\n- **Command name** (`reset facts`) is a design
        choice the issue did not\r\n  fix. It avoids overloading `sync facts` (which
        *does* gather) and there\r\n  is no existing `reset` namespace. Renaming is
        a one-line `setup.cfg`\r\n  change if you prefer e.g. `facts reset`.\r\n-
        **Redis cache only.** A second, file-based fact cache at\r\n  `/cache/facts/<host>`
        is read only by `osism/api.py:search_inventory`.\r\n  This command clears
        the canonical Redis cache that the operator-facing\r\n  CLI uses; clearing
        the API's file cache is out of scope absent a\r\n  confirmed need.\r\n- The
        external CLI reference (osism.tech) lives in a separate repo and is\r\n  not
        updated here; the in-repo doc surface is the command docstring and\r\n  `--limit`
        help text rendered by `osism reset facts --help`.\r\n\r\n## Local verification\r\n\r\n-
        `flake8 osism/commands/reset.py tests/unit/commands/test_reset.py` \u2014
        pass\r\n- Unit suite (`pytest tests/unit`) runs in CI/Zuul per project convention.\r\n\r\n---\r\n\r\n_Implemented
        by [planwerk-review](https://github.com/planwerk/planwerk-review) with Claude:claude-opus-4-8_\r\n"
      change_url: https://github.com/osism/python-osism/pull/2389
      child_jobs: []
      commit_id: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
      event_id: 76d61c50-7128-11f1-8523-3741ffd16ddf
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/04ff9ae1604b4d14bd88fe92cd266a72/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/04ff9ae1604b4d14bd88fe92cd266a72/work/logs
        result_data_file: /var/lib/zuul/builds/04ff9ae1604b4d14bd88fe92cd266a72/work/results.json
        src_root: /var/lib/zuul/builds/04ff9ae1604b4d14bd88fe92cd266a72/work/src
        work_root: /var/lib/zuul/builds/04ff9ae1604b4d14bd88fe92cd266a72/work
      include_vars: []
      items:
      - branch: main
        change: '2389'
        change_message: "Add 'osism reset facts' command to clear the Ansible fact
          cache\n\n## Summary\r\n\r\nAdds `osism reset facts`, a command that clears
          the Ansible fact cache so\r\noperators can drop stale or incorrect facts
          during troubleshooting. The\r\nfact cache lives in Redis under `ansible_facts<host>`
          keys (read by\r\n`osism get facts`, `osism/api.py`, and `check_ansible_facts`);
          until now\r\nthere was no command to clear it.\r\n\r\n- By default the command
          flushes the **entire** cache.\r\n- `-l/--limit <pattern>` restricts the
          reset to selected hosts or groups,\r\n  resolving the pattern through `ansible-inventory
          --list --limit`.\r\n- It only clears the cache \u2014 it does **not** start
          a fact-gathering run and\r\n  asks for **no** confirmation. The cache rebuilds
          on the next Ansible run\r\n  that gathers facts.\r\n\r\nCloses #2388\r\n\r\n##
          Changes (in commit order)\r\n\r\n1. **`Add 'osism reset facts' command to
          clear the fact cache`**\r\n   - New `osism/commands/reset.py` with `class
          Facts(Command)`:\r\n     - No limit \u2192 SCAN `ansible_facts*` and batch-delete
          every key\r\n       (mirrors the scan loop in `osism/utils/__init__.py:check_ansible_facts`).\r\n
          \    - `-l/--limit` \u2192 expand the host/group pattern via `ansible-inventory`\r\n
          \      and delete only the matching `ansible_facts<host>` keys\r\n       (mirrors
          the limit\u2192inventory idiom in `osism/commands/report.py`).\r\n     -
          Redis key deletion reuses the `utils.redis.delete(...)` idiom from\r\n       `osism/commands/vault.py`.\r\n
          \  - Registers the entry point `reset facts = osism.commands.reset:Facts`\r\n
          \    in `setup.cfg` (no `reset` namespace existed before; no collision).\r\n\r\n2.
          **`Add unit tests for 'osism reset facts'`**\r\n   - New `tests/unit/commands/test_reset.py`
          covering flush-all,\r\n     empty-cache no-op, Redis error, `--limit` host
          expansion, and the\r\n     inventory-load failure and timeout paths.\r\n\r\n##
          Notes for reviewers\r\n\r\n- **Command name** (`reset facts`) is a design
          choice the issue did not\r\n  fix. It avoids overloading `sync facts` (which
          *does* gather) and there\r\n  is no existing `reset` namespace. Renaming
          is a one-line `setup.cfg`\r\n  change if you prefer e.g. `facts reset`.\r\n-
          **Redis cache only.** A second, file-based fact cache at\r\n  `/cache/facts/<host>`
          is read only by `osism/api.py:search_inventory`.\r\n  This command clears
          the canonical Redis cache that the operator-facing\r\n  CLI uses; clearing
          the API's file cache is out of scope absent a\r\n  confirmed need.\r\n-
          The external CLI reference (osism.tech) lives in a separate repo and is\r\n
          \ not updated here; the in-repo doc surface is the command docstring and\r\n
          \ `--limit` help text rendered by `osism reset facts --help`.\r\n\r\n##
          Local verification\r\n\r\n- `flake8 osism/commands/reset.py tests/unit/commands/test_reset.py`
          \u2014 pass\r\n- Unit suite (`pytest tests/unit`) runs in CI/Zuul per project
          convention.\r\n\r\n---\r\n\r\n_Implemented by [planwerk-review](https://github.com/planwerk/planwerk-review)
          with Claude:claude-opus-4-8_\r\n"
        change_url: https://github.com/osism/python-osism/pull/2389
        commit_id: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        patchset: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
        topic: null
      job: flake8
      jobtags: []
      max_attempts: 3
      message: QWRkICdvc2lzbSByZXNldCBmYWN0cycgY29tbWFuZCB0byBjbGVhciB0aGUgQW5zaWJsZSBmYWN0IGNhY2hlCgojIyBTdW1tYXJ5DQoNCkFkZHMgYG9zaXNtIHJlc2V0IGZhY3RzYCwgYSBjb21tYW5kIHRoYXQgY2xlYXJzIHRoZSBBbnNpYmxlIGZhY3QgY2FjaGUgc28NCm9wZXJhdG9ycyBjYW4gZHJvcCBzdGFsZSBvciBpbmNvcnJlY3QgZmFjdHMgZHVyaW5nIHRyb3VibGVzaG9vdGluZy4gVGhlDQpmYWN0IGNhY2hlIGxpdmVzIGluIFJlZGlzIHVuZGVyIGBhbnNpYmxlX2ZhY3RzPGhvc3Q+YCBrZXlzIChyZWFkIGJ5DQpgb3Npc20gZ2V0IGZhY3RzYCwgYG9zaXNtL2FwaS5weWAsIGFuZCBgY2hlY2tfYW5zaWJsZV9mYWN0c2ApOyB1bnRpbCBub3cNCnRoZXJlIHdhcyBubyBjb21tYW5kIHRvIGNsZWFyIGl0Lg0KDQotIEJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgZmx1c2hlcyB0aGUgKiplbnRpcmUqKiBjYWNoZS4NCi0gYC1sLy0tbGltaXQgPHBhdHRlcm4+YCByZXN0cmljdHMgdGhlIHJlc2V0IHRvIHNlbGVjdGVkIGhvc3RzIG9yIGdyb3VwcywNCiAgcmVzb2x2aW5nIHRoZSBwYXR0ZXJuIHRocm91Z2ggYGFuc2libGUtaW52ZW50b3J5IC0tbGlzdCAtLWxpbWl0YC4NCi0gSXQgb25seSBjbGVhcnMgdGhlIGNhY2hlIOKAlCBpdCBkb2VzICoqbm90Kiogc3RhcnQgYSBmYWN0LWdhdGhlcmluZyBydW4gYW5kDQogIGFza3MgZm9yICoqbm8qKiBjb25maXJtYXRpb24uIFRoZSBjYWNoZSByZWJ1aWxkcyBvbiB0aGUgbmV4dCBBbnNpYmxlIHJ1bg0KICB0aGF0IGdhdGhlcnMgZmFjdHMuDQoNCkNsb3NlcyAjMjM4OA0KDQojIyBDaGFuZ2VzIChpbiBjb21taXQgb3JkZXIpDQoNCjEuICoqYEFkZCAnb3Npc20gcmVzZXQgZmFjdHMnIGNvbW1hbmQgdG8gY2xlYXIgdGhlIGZhY3QgY2FjaGVgKioNCiAgIC0gTmV3IGBvc2lzbS9jb21tYW5kcy9yZXNldC5weWAgd2l0aCBgY2xhc3MgRmFjdHMoQ29tbWFuZClgOg0KICAgICAtIE5vIGxpbWl0IOKGkiBTQ0FOIGBhbnNpYmxlX2ZhY3RzKmAgYW5kIGJhdGNoLWRlbGV0ZSBldmVyeSBrZXkNCiAgICAgICAobWlycm9ycyB0aGUgc2NhbiBsb29wIGluIGBvc2lzbS91dGlscy9fX2luaXRfXy5weTpjaGVja19hbnNpYmxlX2ZhY3RzYCkuDQogICAgIC0gYC1sLy0tbGltaXRgIOKGkiBleHBhbmQgdGhlIGhvc3QvZ3JvdXAgcGF0dGVybiB2aWEgYGFuc2libGUtaW52ZW50b3J5YA0KICAgICAgIGFuZCBkZWxldGUgb25seSB0aGUgbWF0Y2hpbmcgYGFuc2libGVfZmFjdHM8aG9zdD5gIGtleXMNCiAgICAgICAobWlycm9ycyB0aGUgbGltaXTihpJpbnZlbnRvcnkgaWRpb20gaW4gYG9zaXNtL2NvbW1hbmRzL3JlcG9ydC5weWApLg0KICAgICAtIFJlZGlzIGtleSBkZWxldGlvbiByZXVzZXMgdGhlIGB1dGlscy5yZWRpcy5kZWxldGUoLi4uKWAgaWRpb20gZnJvbQ0KICAgICAgIGBvc2lzbS9jb21tYW5kcy92YXVsdC5weWAuDQogICAtIFJlZ2lzdGVycyB0aGUgZW50cnkgcG9pbnQgYHJlc2V0IGZhY3RzID0gb3Npc20uY29tbWFuZHMucmVzZXQ6RmFjdHNgDQogICAgIGluIGBzZXR1cC5jZmdgIChubyBgcmVzZXRgIG5hbWVzcGFjZSBleGlzdGVkIGJlZm9yZTsgbm8gY29sbGlzaW9uKS4NCg0KMi4gKipgQWRkIHVuaXQgdGVzdHMgZm9yICdvc2lzbSByZXNldCBmYWN0cydgKioNCiAgIC0gTmV3IGB0ZXN0cy91bml0L2NvbW1hbmRzL3Rlc3RfcmVzZXQucHlgIGNvdmVyaW5nIGZsdXNoLWFsbCwNCiAgICAgZW1wdHktY2FjaGUgbm8tb3AsIFJlZGlzIGVycm9yLCBgLS1saW1pdGAgaG9zdCBleHBhbnNpb24sIGFuZCB0aGUNCiAgICAgaW52ZW50b3J5LWxvYWQgZmFpbHVyZSBhbmQgdGltZW91dCBwYXRocy4NCg0KIyMgTm90ZXMgZm9yIHJldmlld2Vycw0KDQotICoqQ29tbWFuZCBuYW1lKiogKGByZXNldCBmYWN0c2ApIGlzIGEgZGVzaWduIGNob2ljZSB0aGUgaXNzdWUgZGlkIG5vdA0KICBmaXguIEl0IGF2b2lkcyBvdmVybG9hZGluZyBgc3luYyBmYWN0c2AgKHdoaWNoICpkb2VzKiBnYXRoZXIpIGFuZCB0aGVyZQ0KICBpcyBubyBleGlzdGluZyBgcmVzZXRgIG5hbWVzcGFjZS4gUmVuYW1pbmcgaXMgYSBvbmUtbGluZSBgc2V0dXAuY2ZnYA0KICBjaGFuZ2UgaWYgeW91IHByZWZlciBlLmcuIGBmYWN0cyByZXNldGAuDQotICoqUmVkaXMgY2FjaGUgb25seS4qKiBBIHNlY29uZCwgZmlsZS1iYXNlZCBmYWN0IGNhY2hlIGF0DQogIGAvY2FjaGUvZmFjdHMvPGhvc3Q+YCBpcyByZWFkIG9ubHkgYnkgYG9zaXNtL2FwaS5weTpzZWFyY2hfaW52ZW50b3J5YC4NCiAgVGhpcyBjb21tYW5kIGNsZWFycyB0aGUgY2Fub25pY2FsIFJlZGlzIGNhY2hlIHRoYXQgdGhlIG9wZXJhdG9yLWZhY2luZw0KICBDTEkgdXNlczsgY2xlYXJpbmcgdGhlIEFQSSdzIGZpbGUgY2FjaGUgaXMgb3V0IG9mIHNjb3BlIGFic2VudCBhDQogIGNvbmZpcm1lZCBuZWVkLg0KLSBUaGUgZXh0ZXJuYWwgQ0xJIHJlZmVyZW5jZSAob3Npc20udGVjaCkgbGl2ZXMgaW4gYSBzZXBhcmF0ZSByZXBvIGFuZCBpcw0KICBub3QgdXBkYXRlZCBoZXJlOyB0aGUgaW4tcmVwbyBkb2Mgc3VyZmFjZSBpcyB0aGUgY29tbWFuZCBkb2NzdHJpbmcgYW5kDQogIGAtLWxpbWl0YCBoZWxwIHRleHQgcmVuZGVyZWQgYnkgYG9zaXNtIHJlc2V0IGZhY3RzIC0taGVscGAuDQoNCiMjIExvY2FsIHZlcmlmaWNhdGlvbg0KDQotIGBmbGFrZTggb3Npc20vY29tbWFuZHMvcmVzZXQucHkgdGVzdHMvdW5pdC9jb21tYW5kcy90ZXN0X3Jlc2V0LnB5YCDigJQgcGFzcw0KLSBVbml0IHN1aXRlIChgcHl0ZXN0IHRlc3RzL3VuaXRgKSBydW5zIGluIENJL1p1dWwgcGVyIHByb2plY3QgY29udmVudGlvbi4NCg0KLS0tDQoNCl9JbXBsZW1lbnRlZCBieSBbcGxhbndlcmstcmV2aWV3XShodHRwczovL2dpdGh1Yi5jb20vcGxhbndlcmsvcGxhbndlcmstcmV2aWV3KSB3aXRoIENsYXVkZTpjbGF1ZGUtb3B1cy00LThfDQo=
      patchset: c21be3f69f3fe43ba0b56ff6ac49cdae2389d72a
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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/flake8/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: 1800
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/python-osism
        name: osism/python-osism
        short_name: python-osism
        src_dir: src/github.com/osism/python-osism
      projects:
        github.com/osism/python-osism:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          checkout: main
          checkout_description: zuul branch
          commit: 94bee135f321a9e6000d739443a4d2ab5f074b75
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2389/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
