all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feac:25d6
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: b1c60a5a-50e5-4c22-8c47-073fd4379388
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feac:25d6
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.115
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.191
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feac:25d6
        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 hadolint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#37>'
      - '<Job hadolint explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#143>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: a9cec89b84284b0eae84ca4b4e20e252
      build_refs:
      - branch: main
        change: '2480'
        change_message: "Add unit tests for workflow commands\n\nImplements #2363:
          unit tests for the workflow-oriented CLI command modules under `osism/commands/`
          (`apply`, `check`, `compose`, `sync`, `get`, `log`, `console`, `validate`,
          `wait`).\n\n## What's covered\n\n- **New test modules**: `test_apply.py`,
          `test_check.py`, `test_compose.py`, `test_sync.py`, `test_log.py`, `test_console.py`\n-
          **Extended** (existing tests unchanged): `test_validate.py`, `test_wait.py`,
          `test_get.py`\n\nAll test targets from the issue are implemented, including
          the pure helpers in `check.py` and the module-level host-resolution helpers
          in `console.py` that the issue flags for \u226595 % coverage. All Celery
          task calls, subprocesses, Docker/Netbox/Redis clients and interactive prompts
          are mocked; log assertions use a loguru sink (`loguru_logs` fixture) since
          `caplog` does not capture loguru records.\n\n## Misbehavior pinned as strict
          xfail\n\nPer review, tests that would have pinned misbehavior green now
          assert the **corrected** behavior and are marked `xfail(strict=True)` \u2014
          they turn red (XPASS) the moment the follow-up fix lands, forcing removal
          of the marker:\n\n- `compose` mangles multi-token subcommands into unrunnable
          commands: `osism compose <host> <env> up -d` is sent as `up-d` (`\"\".join`
          instead of `\" \".join`, compose.py:28).\n- A successful collection segment
          silently skips the remaining `//` segments and exits 0, because `handle_collection`
          returns `None` instead of an exit code (apply.py:218, loop at apply.py:455).\n-
          A failed loadbalancer child playbook does not propagate its rc \u2014 `handle_loadbalancer_task`
          returns only the parent rc and reads children solely for logging; the child
          rcs live in the task-output stream (`handle_task`/`fetch_task_output`),
          not in the Celery result (apply.py:106-133).\n\n## Remaining follow-up fix
          candidates (pinned as-is)\n\n- `apply.Run.handle_role` logs `task.task_id`
          before the `GroupResult` isinstance check, but `GroupResult` has no `task_id`
          attribute \u2014 the real `loadbalancer-ng` path would raise `AttributeError`
          (apply.py:381).\n- `handle_collection` under `--dry-run` logs \"No tasks
          are scheduled\" (and the `--dry-run` help says \"do not initiate tasks\"),
          yet still dispatches the noop group via `apply_async()` (apply.py:235, :261).\n-
          `wait --refresh` is a no-op when task ids are passed on the CLI: `do_refresh`
          is only enabled when the id list comes from the inspector.\n- `log.File`
          error logs use printf-style `%s` placeholders, which loguru does not interpolate
          \u2014 the placeholders appear literally in the log output.\n- `validate.Run._handle_task`
          mixes `t.id` (fetch) and `t.task_id` (log/print), and its timeout message
          says \"(sync inventory)\".\n\n`flake8` and `black --check` pass locally;
          the test suite itself runs in CI per project workflow.\n\nCloses #2363\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01WgHtkSVmEuwwPxiEsSnXL7"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        patchset: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        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: f4a7335ebb254b859f47bb8cb8e6cd8b
      buildset_refs:
      - branch: main
        change: '2480'
        change_message: "Add unit tests for workflow commands\n\nImplements #2363:
          unit tests for the workflow-oriented CLI command modules under `osism/commands/`
          (`apply`, `check`, `compose`, `sync`, `get`, `log`, `console`, `validate`,
          `wait`).\n\n## What's covered\n\n- **New test modules**: `test_apply.py`,
          `test_check.py`, `test_compose.py`, `test_sync.py`, `test_log.py`, `test_console.py`\n-
          **Extended** (existing tests unchanged): `test_validate.py`, `test_wait.py`,
          `test_get.py`\n\nAll test targets from the issue are implemented, including
          the pure helpers in `check.py` and the module-level host-resolution helpers
          in `console.py` that the issue flags for \u226595 % coverage. All Celery
          task calls, subprocesses, Docker/Netbox/Redis clients and interactive prompts
          are mocked; log assertions use a loguru sink (`loguru_logs` fixture) since
          `caplog` does not capture loguru records.\n\n## Misbehavior pinned as strict
          xfail\n\nPer review, tests that would have pinned misbehavior green now
          assert the **corrected** behavior and are marked `xfail(strict=True)` \u2014
          they turn red (XPASS) the moment the follow-up fix lands, forcing removal
          of the marker:\n\n- `compose` mangles multi-token subcommands into unrunnable
          commands: `osism compose <host> <env> up -d` is sent as `up-d` (`\"\".join`
          instead of `\" \".join`, compose.py:28).\n- A successful collection segment
          silently skips the remaining `//` segments and exits 0, because `handle_collection`
          returns `None` instead of an exit code (apply.py:218, loop at apply.py:455).\n-
          A failed loadbalancer child playbook does not propagate its rc \u2014 `handle_loadbalancer_task`
          returns only the parent rc and reads children solely for logging; the child
          rcs live in the task-output stream (`handle_task`/`fetch_task_output`),
          not in the Celery result (apply.py:106-133).\n\n## Remaining follow-up fix
          candidates (pinned as-is)\n\n- `apply.Run.handle_role` logs `task.task_id`
          before the `GroupResult` isinstance check, but `GroupResult` has no `task_id`
          attribute \u2014 the real `loadbalancer-ng` path would raise `AttributeError`
          (apply.py:381).\n- `handle_collection` under `--dry-run` logs \"No tasks
          are scheduled\" (and the `--dry-run` help says \"do not initiate tasks\"),
          yet still dispatches the noop group via `apply_async()` (apply.py:235, :261).\n-
          `wait --refresh` is a no-op when task ids are passed on the CLI: `do_refresh`
          is only enabled when the id list comes from the inspector.\n- `log.File`
          error logs use printf-style `%s` placeholders, which loguru does not interpolate
          \u2014 the placeholders appear literally in the log output.\n- `validate.Run._handle_task`
          mixes `t.id` (fetch) and `t.task_id` (log/print), and its timeout message
          says \"(sync inventory)\".\n\n`flake8` and `black --check` pass locally;
          the test suite itself runs in CI per project workflow.\n\nCloses #2363\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01WgHtkSVmEuwwPxiEsSnXL7"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        patchset: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        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: '2480'
      change_message: "Add unit tests for workflow commands\n\nImplements #2363: unit
        tests for the workflow-oriented CLI command modules under `osism/commands/`
        (`apply`, `check`, `compose`, `sync`, `get`, `log`, `console`, `validate`,
        `wait`).\n\n## What's covered\n\n- **New test modules**: `test_apply.py`,
        `test_check.py`, `test_compose.py`, `test_sync.py`, `test_log.py`, `test_console.py`\n-
        **Extended** (existing tests unchanged): `test_validate.py`, `test_wait.py`,
        `test_get.py`\n\nAll test targets from the issue are implemented, including
        the pure helpers in `check.py` and the module-level host-resolution helpers
        in `console.py` that the issue flags for \u226595 % coverage. All Celery task
        calls, subprocesses, Docker/Netbox/Redis clients and interactive prompts are
        mocked; log assertions use a loguru sink (`loguru_logs` fixture) since `caplog`
        does not capture loguru records.\n\n## Misbehavior pinned as strict xfail\n\nPer
        review, tests that would have pinned misbehavior green now assert the **corrected**
        behavior and are marked `xfail(strict=True)` \u2014 they turn red (XPASS)
        the moment the follow-up fix lands, forcing removal of the marker:\n\n- `compose`
        mangles multi-token subcommands into unrunnable commands: `osism compose <host>
        <env> up -d` is sent as `up-d` (`\"\".join` instead of `\" \".join`, compose.py:28).\n-
        A successful collection segment silently skips the remaining `//` segments
        and exits 0, because `handle_collection` returns `None` instead of an exit
        code (apply.py:218, loop at apply.py:455).\n- A failed loadbalancer child
        playbook does not propagate its rc \u2014 `handle_loadbalancer_task` returns
        only the parent rc and reads children solely for logging; the child rcs live
        in the task-output stream (`handle_task`/`fetch_task_output`), not in the
        Celery result (apply.py:106-133).\n\n## Remaining follow-up fix candidates
        (pinned as-is)\n\n- `apply.Run.handle_role` logs `task.task_id` before the
        `GroupResult` isinstance check, but `GroupResult` has no `task_id` attribute
        \u2014 the real `loadbalancer-ng` path would raise `AttributeError` (apply.py:381).\n-
        `handle_collection` under `--dry-run` logs \"No tasks are scheduled\" (and
        the `--dry-run` help says \"do not initiate tasks\"), yet still dispatches
        the noop group via `apply_async()` (apply.py:235, :261).\n- `wait --refresh`
        is a no-op when task ids are passed on the CLI: `do_refresh` is only enabled
        when the id list comes from the inspector.\n- `log.File` error logs use printf-style
        `%s` placeholders, which loguru does not interpolate \u2014 the placeholders
        appear literally in the log output.\n- `validate.Run._handle_task` mixes `t.id`
        (fetch) and `t.task_id` (log/print), and its timeout message says \"(sync
        inventory)\".\n\n`flake8` and `black --check` pass locally; the test suite
        itself runs in CI per project workflow.\n\nCloses #2363\n\n\U0001F916 Generated
        with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01WgHtkSVmEuwwPxiEsSnXL7"
      change_url: https://github.com/osism/python-osism/pull/2480
      child_jobs: []
      commit_id: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
      event_id: 3b400b90-85d4-11f1-8361-c228171f7d5c
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/a9cec89b84284b0eae84ca4b4e20e252/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/a9cec89b84284b0eae84ca4b4e20e252/work/logs
        result_data_file: /var/lib/zuul/builds/a9cec89b84284b0eae84ca4b4e20e252/work/results.json
        src_root: /var/lib/zuul/builds/a9cec89b84284b0eae84ca4b4e20e252/work/src
        work_root: /var/lib/zuul/builds/a9cec89b84284b0eae84ca4b4e20e252/work
      include_vars: []
      items:
      - branch: main
        change: '2480'
        change_message: "Add unit tests for workflow commands\n\nImplements #2363:
          unit tests for the workflow-oriented CLI command modules under `osism/commands/`
          (`apply`, `check`, `compose`, `sync`, `get`, `log`, `console`, `validate`,
          `wait`).\n\n## What's covered\n\n- **New test modules**: `test_apply.py`,
          `test_check.py`, `test_compose.py`, `test_sync.py`, `test_log.py`, `test_console.py`\n-
          **Extended** (existing tests unchanged): `test_validate.py`, `test_wait.py`,
          `test_get.py`\n\nAll test targets from the issue are implemented, including
          the pure helpers in `check.py` and the module-level host-resolution helpers
          in `console.py` that the issue flags for \u226595 % coverage. All Celery
          task calls, subprocesses, Docker/Netbox/Redis clients and interactive prompts
          are mocked; log assertions use a loguru sink (`loguru_logs` fixture) since
          `caplog` does not capture loguru records.\n\n## Misbehavior pinned as strict
          xfail\n\nPer review, tests that would have pinned misbehavior green now
          assert the **corrected** behavior and are marked `xfail(strict=True)` \u2014
          they turn red (XPASS) the moment the follow-up fix lands, forcing removal
          of the marker:\n\n- `compose` mangles multi-token subcommands into unrunnable
          commands: `osism compose <host> <env> up -d` is sent as `up-d` (`\"\".join`
          instead of `\" \".join`, compose.py:28).\n- A successful collection segment
          silently skips the remaining `//` segments and exits 0, because `handle_collection`
          returns `None` instead of an exit code (apply.py:218, loop at apply.py:455).\n-
          A failed loadbalancer child playbook does not propagate its rc \u2014 `handle_loadbalancer_task`
          returns only the parent rc and reads children solely for logging; the child
          rcs live in the task-output stream (`handle_task`/`fetch_task_output`),
          not in the Celery result (apply.py:106-133).\n\n## Remaining follow-up fix
          candidates (pinned as-is)\n\n- `apply.Run.handle_role` logs `task.task_id`
          before the `GroupResult` isinstance check, but `GroupResult` has no `task_id`
          attribute \u2014 the real `loadbalancer-ng` path would raise `AttributeError`
          (apply.py:381).\n- `handle_collection` under `--dry-run` logs \"No tasks
          are scheduled\" (and the `--dry-run` help says \"do not initiate tasks\"),
          yet still dispatches the noop group via `apply_async()` (apply.py:235, :261).\n-
          `wait --refresh` is a no-op when task ids are passed on the CLI: `do_refresh`
          is only enabled when the id list comes from the inspector.\n- `log.File`
          error logs use printf-style `%s` placeholders, which loguru does not interpolate
          \u2014 the placeholders appear literally in the log output.\n- `validate.Run._handle_task`
          mixes `t.id` (fetch) and `t.task_id` (log/print), and its timeout message
          says \"(sync inventory)\".\n\n`flake8` and `black --check` pass locally;
          the test suite itself runs in CI per project workflow.\n\nCloses #2363\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n\nhttps://claude.ai/code/session_01WgHtkSVmEuwwPxiEsSnXL7"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        patchset: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
        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: hadolint
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIHdvcmtmbG93IGNvbW1hbmRzCgpJbXBsZW1lbnRzICMyMzYzOiB1bml0IHRlc3RzIGZvciB0aGUgd29ya2Zsb3ctb3JpZW50ZWQgQ0xJIGNvbW1hbmQgbW9kdWxlcyB1bmRlciBgb3Npc20vY29tbWFuZHMvYCAoYGFwcGx5YCwgYGNoZWNrYCwgYGNvbXBvc2VgLCBgc3luY2AsIGBnZXRgLCBgbG9nYCwgYGNvbnNvbGVgLCBgdmFsaWRhdGVgLCBgd2FpdGApLgoKIyMgV2hhdCdzIGNvdmVyZWQKCi0gKipOZXcgdGVzdCBtb2R1bGVzKio6IGB0ZXN0X2FwcGx5LnB5YCwgYHRlc3RfY2hlY2sucHlgLCBgdGVzdF9jb21wb3NlLnB5YCwgYHRlc3Rfc3luYy5weWAsIGB0ZXN0X2xvZy5weWAsIGB0ZXN0X2NvbnNvbGUucHlgCi0gKipFeHRlbmRlZCoqIChleGlzdGluZyB0ZXN0cyB1bmNoYW5nZWQpOiBgdGVzdF92YWxpZGF0ZS5weWAsIGB0ZXN0X3dhaXQucHlgLCBgdGVzdF9nZXQucHlgCgpBbGwgdGVzdCB0YXJnZXRzIGZyb20gdGhlIGlzc3VlIGFyZSBpbXBsZW1lbnRlZCwgaW5jbHVkaW5nIHRoZSBwdXJlIGhlbHBlcnMgaW4gYGNoZWNrLnB5YCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBob3N0LXJlc29sdXRpb24gaGVscGVycyBpbiBgY29uc29sZS5weWAgdGhhdCB0aGUgaXNzdWUgZmxhZ3MgZm9yIOKJpTk1ICUgY292ZXJhZ2UuIEFsbCBDZWxlcnkgdGFzayBjYWxscywgc3VicHJvY2Vzc2VzLCBEb2NrZXIvTmV0Ym94L1JlZGlzIGNsaWVudHMgYW5kIGludGVyYWN0aXZlIHByb21wdHMgYXJlIG1vY2tlZDsgbG9nIGFzc2VydGlvbnMgdXNlIGEgbG9ndXJ1IHNpbmsgKGBsb2d1cnVfbG9nc2AgZml4dHVyZSkgc2luY2UgYGNhcGxvZ2AgZG9lcyBub3QgY2FwdHVyZSBsb2d1cnUgcmVjb3Jkcy4KCiMjIE1pc2JlaGF2aW9yIHBpbm5lZCBhcyBzdHJpY3QgeGZhaWwKClBlciByZXZpZXcsIHRlc3RzIHRoYXQgd291bGQgaGF2ZSBwaW5uZWQgbWlzYmVoYXZpb3IgZ3JlZW4gbm93IGFzc2VydCB0aGUgKipjb3JyZWN0ZWQqKiBiZWhhdmlvciBhbmQgYXJlIG1hcmtlZCBgeGZhaWwoc3RyaWN0PVRydWUpYCDigJQgdGhleSB0dXJuIHJlZCAoWFBBU1MpIHRoZSBtb21lbnQgdGhlIGZvbGxvdy11cCBmaXggbGFuZHMsIGZvcmNpbmcgcmVtb3ZhbCBvZiB0aGUgbWFya2VyOgoKLSBgY29tcG9zZWAgbWFuZ2xlcyBtdWx0aS10b2tlbiBzdWJjb21tYW5kcyBpbnRvIHVucnVubmFibGUgY29tbWFuZHM6IGBvc2lzbSBjb21wb3NlIDxob3N0PiA8ZW52PiB1cCAtZGAgaXMgc2VudCBhcyBgdXAtZGAgKGAiIi5qb2luYCBpbnN0ZWFkIG9mIGAiICIuam9pbmAsIGNvbXBvc2UucHk6MjgpLgotIEEgc3VjY2Vzc2Z1bCBjb2xsZWN0aW9uIHNlZ21lbnQgc2lsZW50bHkgc2tpcHMgdGhlIHJlbWFpbmluZyBgLy9gIHNlZ21lbnRzIGFuZCBleGl0cyAwLCBiZWNhdXNlIGBoYW5kbGVfY29sbGVjdGlvbmAgcmV0dXJucyBgTm9uZWAgaW5zdGVhZCBvZiBhbiBleGl0IGNvZGUgKGFwcGx5LnB5OjIxOCwgbG9vcCBhdCBhcHBseS5weTo0NTUpLgotIEEgZmFpbGVkIGxvYWRiYWxhbmNlciBjaGlsZCBwbGF5Ym9vayBkb2VzIG5vdCBwcm9wYWdhdGUgaXRzIHJjIOKAlCBgaGFuZGxlX2xvYWRiYWxhbmNlcl90YXNrYCByZXR1cm5zIG9ubHkgdGhlIHBhcmVudCByYyBhbmQgcmVhZHMgY2hpbGRyZW4gc29sZWx5IGZvciBsb2dnaW5nOyB0aGUgY2hpbGQgcmNzIGxpdmUgaW4gdGhlIHRhc2stb3V0cHV0IHN0cmVhbSAoYGhhbmRsZV90YXNrYC9gZmV0Y2hfdGFza19vdXRwdXRgKSwgbm90IGluIHRoZSBDZWxlcnkgcmVzdWx0IChhcHBseS5weToxMDYtMTMzKS4KCiMjIFJlbWFpbmluZyBmb2xsb3ctdXAgZml4IGNhbmRpZGF0ZXMgKHBpbm5lZCBhcy1pcykKCi0gYGFwcGx5LlJ1bi5oYW5kbGVfcm9sZWAgbG9ncyBgdGFzay50YXNrX2lkYCBiZWZvcmUgdGhlIGBHcm91cFJlc3VsdGAgaXNpbnN0YW5jZSBjaGVjaywgYnV0IGBHcm91cFJlc3VsdGAgaGFzIG5vIGB0YXNrX2lkYCBhdHRyaWJ1dGUg4oCUIHRoZSByZWFsIGBsb2FkYmFsYW5jZXItbmdgIHBhdGggd291bGQgcmFpc2UgYEF0dHJpYnV0ZUVycm9yYCAoYXBwbHkucHk6MzgxKS4KLSBgaGFuZGxlX2NvbGxlY3Rpb25gIHVuZGVyIGAtLWRyeS1ydW5gIGxvZ3MgIk5vIHRhc2tzIGFyZSBzY2hlZHVsZWQiIChhbmQgdGhlIGAtLWRyeS1ydW5gIGhlbHAgc2F5cyAiZG8gbm90IGluaXRpYXRlIHRhc2tzIiksIHlldCBzdGlsbCBkaXNwYXRjaGVzIHRoZSBub29wIGdyb3VwIHZpYSBgYXBwbHlfYXN5bmMoKWAgKGFwcGx5LnB5OjIzNSwgOjI2MSkuCi0gYHdhaXQgLS1yZWZyZXNoYCBpcyBhIG5vLW9wIHdoZW4gdGFzayBpZHMgYXJlIHBhc3NlZCBvbiB0aGUgQ0xJOiBgZG9fcmVmcmVzaGAgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlIGlkIGxpc3QgY29tZXMgZnJvbSB0aGUgaW5zcGVjdG9yLgotIGBsb2cuRmlsZWAgZXJyb3IgbG9ncyB1c2UgcHJpbnRmLXN0eWxlIGAlc2AgcGxhY2Vob2xkZXJzLCB3aGljaCBsb2d1cnUgZG9lcyBub3QgaW50ZXJwb2xhdGUg4oCUIHRoZSBwbGFjZWhvbGRlcnMgYXBwZWFyIGxpdGVyYWxseSBpbiB0aGUgbG9nIG91dHB1dC4KLSBgdmFsaWRhdGUuUnVuLl9oYW5kbGVfdGFza2AgbWl4ZXMgYHQuaWRgIChmZXRjaCkgYW5kIGB0LnRhc2tfaWRgIChsb2cvcHJpbnQpLCBhbmQgaXRzIHRpbWVvdXQgbWVzc2FnZSBzYXlzICIoc3luYyBpbnZlbnRvcnkpIi4KCmBmbGFrZThgIGFuZCBgYmxhY2sgLS1jaGVja2AgcGFzcyBsb2NhbGx5OyB0aGUgdGVzdCBzdWl0ZSBpdHNlbGYgcnVucyBpbiBDSSBwZXIgcHJvamVjdCB3b3JrZmxvdy4KCkNsb3NlcyAjMjM2MwoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkKCmh0dHBzOi8vY2xhdWRlLmFpL2NvZGUvc2Vzc2lvbl8wMVdnSHRrU1ZtRXV3d1B4aUVzU25YTDc=
      patchset: 2ef1b88d3a38fda1962f18bec3dbfd752f7fc791
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 71b711c422c10c242a8f785dc6d41ed9d12e9cd3
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 242732586e2cba04d04867d3e302888c766bc231
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/hadolint/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: b45e38a4480c863e8ce5dc4dae6e97efef18c2c4
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2480/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
