all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe56:495b
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 12a26f35-31bd-4527-8936-46a374c8342e
        host_id: 7f2607eceb24f4583c6f9496c53c64b51afe50de5eacda4379b21c42
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe56:495b
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.116
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.90
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe56:495b
        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: e7ea7e847fd544c5862d93886317c6ed
      build_refs:
      - branch: main
        change: '2464'
        change_message: "Add unit tests for task lifecycle commands\n\nImplements
          #2362 (part of the Tier 8 meta issue #2199).\n\nAdds unit tests for the
          nine small task-lifecycle CLI command modules under `osism/commands/`, following
          the established pattern from `tests/unit/commands/test_reconciler.py` /
          `test_wait.py` (`Cmd(MagicMock(), MagicMock())` + `get_parser(\"test\").parse_args([...])`).\n\n##
          New test files\n\n- `test_task.py` \u2014 parser contract and Celery revoke
          with `terminate=True`; pins the latent bug that the one-element `nargs=1`
          list reaches `control.revoke`\n- `test_worker.py` \u2014 concurrency defaults
          (CPU count capped at 4, `OSISM_CELERY_CONCURRENCY` read at parser-build
          time), worker-type \u2192 tasks-module/queue mapping including the `osism-ansible`
          special case and suffix stripping, `-c` propagation, and the unvalidated
          unknown-type command pinned as current behavior\n- `test_lock.py` \u2014
          `Lock`/`Unlock`/`LockStatus` flows: already-locked warnings (with/without
          reason), `--user`/`--reason` pass-through, `OPERATOR_USER` default (also
          baked into the `--user` help at parser-build time), unknown-key fallbacks,
          and non-zero returns when the lock backend fails\n- `test_service.py` \u2014
          exact subprocess command lines for `api`, `listener`, `beat` (seven schedulers,
          one per task module), `flower`, and `reconciler` (env/CPU concurrency logic);
          watchdog observer setup on `/opt/configuration/inventory`, cleanup via `finally`,
          `on_any_event` rebinding, and the inventory event triggering `reconciler.run.delay()`;
          unknown service type as silent no-op\n- `test_container.py` \u2014 parser
          `host`/REMAINDER split, one-shot SSH `docker` execution (key, known-hosts
          option, operator user), known-hosts init failure warning, interactive prompt
          loop, and `Exit`/`exit`/`EXIT` loop termination\n- `test_configuration.py`
          \u2014 REMAINDER forwarding, `delay(..., auto_release_time=60)`, rc propagation
          via `handle_task`; pins the latent builtin-`format` argument\n- `test_set.py`
          / `test_noset.py` \u2014 state playbook scheduling parametrized over the
          `Maintenance`/`Bootstrap` command pairs (`status=True` vs. `status=False`)\n\n##
          Extended\n\n- `test_reconciler.py` \u2014 deprecation warning and concurrency
          of the deprecated worker runner; `Sync` wait/no-wait paths, `--task-timeout`
          forwarding, and the `OSISM_TASK_TIMEOUT` parser default (the existing timeout
          test is kept unchanged)\n\nAll Celery task calls, subprocesses, and the
          Redis task lock are mocked at the command module (lazy imports patched at
          the source module); the tests also assert that `check_task_lock_and_exit`
          runs before any task is scheduled or process is started.\n\nCloses #2362\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2464
        commit_id: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        patchset: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        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: 4a4a508d3b4a4f36963b60aa83cf4e9e
      buildset_refs:
      - branch: main
        change: '2464'
        change_message: "Add unit tests for task lifecycle commands\n\nImplements
          #2362 (part of the Tier 8 meta issue #2199).\n\nAdds unit tests for the
          nine small task-lifecycle CLI command modules under `osism/commands/`, following
          the established pattern from `tests/unit/commands/test_reconciler.py` /
          `test_wait.py` (`Cmd(MagicMock(), MagicMock())` + `get_parser(\"test\").parse_args([...])`).\n\n##
          New test files\n\n- `test_task.py` \u2014 parser contract and Celery revoke
          with `terminate=True`; pins the latent bug that the one-element `nargs=1`
          list reaches `control.revoke`\n- `test_worker.py` \u2014 concurrency defaults
          (CPU count capped at 4, `OSISM_CELERY_CONCURRENCY` read at parser-build
          time), worker-type \u2192 tasks-module/queue mapping including the `osism-ansible`
          special case and suffix stripping, `-c` propagation, and the unvalidated
          unknown-type command pinned as current behavior\n- `test_lock.py` \u2014
          `Lock`/`Unlock`/`LockStatus` flows: already-locked warnings (with/without
          reason), `--user`/`--reason` pass-through, `OPERATOR_USER` default (also
          baked into the `--user` help at parser-build time), unknown-key fallbacks,
          and non-zero returns when the lock backend fails\n- `test_service.py` \u2014
          exact subprocess command lines for `api`, `listener`, `beat` (seven schedulers,
          one per task module), `flower`, and `reconciler` (env/CPU concurrency logic);
          watchdog observer setup on `/opt/configuration/inventory`, cleanup via `finally`,
          `on_any_event` rebinding, and the inventory event triggering `reconciler.run.delay()`;
          unknown service type as silent no-op\n- `test_container.py` \u2014 parser
          `host`/REMAINDER split, one-shot SSH `docker` execution (key, known-hosts
          option, operator user), known-hosts init failure warning, interactive prompt
          loop, and `Exit`/`exit`/`EXIT` loop termination\n- `test_configuration.py`
          \u2014 REMAINDER forwarding, `delay(..., auto_release_time=60)`, rc propagation
          via `handle_task`; pins the latent builtin-`format` argument\n- `test_set.py`
          / `test_noset.py` \u2014 state playbook scheduling parametrized over the
          `Maintenance`/`Bootstrap` command pairs (`status=True` vs. `status=False`)\n\n##
          Extended\n\n- `test_reconciler.py` \u2014 deprecation warning and concurrency
          of the deprecated worker runner; `Sync` wait/no-wait paths, `--task-timeout`
          forwarding, and the `OSISM_TASK_TIMEOUT` parser default (the existing timeout
          test is kept unchanged)\n\nAll Celery task calls, subprocesses, and the
          Redis task lock are mocked at the command module (lazy imports patched at
          the source module); the tests also assert that `check_task_lock_and_exit`
          runs before any task is scheduled or process is started.\n\nCloses #2362\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2464
        commit_id: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        patchset: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        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: '2464'
      change_message: "Add unit tests for task lifecycle commands\n\nImplements #2362
        (part of the Tier 8 meta issue #2199).\n\nAdds unit tests for the nine small
        task-lifecycle CLI command modules under `osism/commands/`, following the
        established pattern from `tests/unit/commands/test_reconciler.py` / `test_wait.py`
        (`Cmd(MagicMock(), MagicMock())` + `get_parser(\"test\").parse_args([...])`).\n\n##
        New test files\n\n- `test_task.py` \u2014 parser contract and Celery revoke
        with `terminate=True`; pins the latent bug that the one-element `nargs=1`
        list reaches `control.revoke`\n- `test_worker.py` \u2014 concurrency defaults
        (CPU count capped at 4, `OSISM_CELERY_CONCURRENCY` read at parser-build time),
        worker-type \u2192 tasks-module/queue mapping including the `osism-ansible`
        special case and suffix stripping, `-c` propagation, and the unvalidated unknown-type
        command pinned as current behavior\n- `test_lock.py` \u2014 `Lock`/`Unlock`/`LockStatus`
        flows: already-locked warnings (with/without reason), `--user`/`--reason`
        pass-through, `OPERATOR_USER` default (also baked into the `--user` help at
        parser-build time), unknown-key fallbacks, and non-zero returns when the lock
        backend fails\n- `test_service.py` \u2014 exact subprocess command lines for
        `api`, `listener`, `beat` (seven schedulers, one per task module), `flower`,
        and `reconciler` (env/CPU concurrency logic); watchdog observer setup on `/opt/configuration/inventory`,
        cleanup via `finally`, `on_any_event` rebinding, and the inventory event triggering
        `reconciler.run.delay()`; unknown service type as silent no-op\n- `test_container.py`
        \u2014 parser `host`/REMAINDER split, one-shot SSH `docker` execution (key,
        known-hosts option, operator user), known-hosts init failure warning, interactive
        prompt loop, and `Exit`/`exit`/`EXIT` loop termination\n- `test_configuration.py`
        \u2014 REMAINDER forwarding, `delay(..., auto_release_time=60)`, rc propagation
        via `handle_task`; pins the latent builtin-`format` argument\n- `test_set.py`
        / `test_noset.py` \u2014 state playbook scheduling parametrized over the `Maintenance`/`Bootstrap`
        command pairs (`status=True` vs. `status=False`)\n\n## Extended\n\n- `test_reconciler.py`
        \u2014 deprecation warning and concurrency of the deprecated worker runner;
        `Sync` wait/no-wait paths, `--task-timeout` forwarding, and the `OSISM_TASK_TIMEOUT`
        parser default (the existing timeout test is kept unchanged)\n\nAll Celery
        task calls, subprocesses, and the Redis task lock are mocked at the command
        module (lazy imports patched at the source module); the tests also assert
        that `check_task_lock_and_exit` runs before any task is scheduled or process
        is started.\n\nCloses #2362\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/python-osism/pull/2464
      child_jobs: []
      commit_id: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
      event_id: ad03fd10-801e-11f1-9ab0-74cfa4d6acc5
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e7ea7e847fd544c5862d93886317c6ed/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e7ea7e847fd544c5862d93886317c6ed/work/logs
        result_data_file: /var/lib/zuul/builds/e7ea7e847fd544c5862d93886317c6ed/work/results.json
        src_root: /var/lib/zuul/builds/e7ea7e847fd544c5862d93886317c6ed/work/src
        work_root: /var/lib/zuul/builds/e7ea7e847fd544c5862d93886317c6ed/work
      include_vars: []
      items:
      - branch: main
        change: '2464'
        change_message: "Add unit tests for task lifecycle commands\n\nImplements
          #2362 (part of the Tier 8 meta issue #2199).\n\nAdds unit tests for the
          nine small task-lifecycle CLI command modules under `osism/commands/`, following
          the established pattern from `tests/unit/commands/test_reconciler.py` /
          `test_wait.py` (`Cmd(MagicMock(), MagicMock())` + `get_parser(\"test\").parse_args([...])`).\n\n##
          New test files\n\n- `test_task.py` \u2014 parser contract and Celery revoke
          with `terminate=True`; pins the latent bug that the one-element `nargs=1`
          list reaches `control.revoke`\n- `test_worker.py` \u2014 concurrency defaults
          (CPU count capped at 4, `OSISM_CELERY_CONCURRENCY` read at parser-build
          time), worker-type \u2192 tasks-module/queue mapping including the `osism-ansible`
          special case and suffix stripping, `-c` propagation, and the unvalidated
          unknown-type command pinned as current behavior\n- `test_lock.py` \u2014
          `Lock`/`Unlock`/`LockStatus` flows: already-locked warnings (with/without
          reason), `--user`/`--reason` pass-through, `OPERATOR_USER` default (also
          baked into the `--user` help at parser-build time), unknown-key fallbacks,
          and non-zero returns when the lock backend fails\n- `test_service.py` \u2014
          exact subprocess command lines for `api`, `listener`, `beat` (seven schedulers,
          one per task module), `flower`, and `reconciler` (env/CPU concurrency logic);
          watchdog observer setup on `/opt/configuration/inventory`, cleanup via `finally`,
          `on_any_event` rebinding, and the inventory event triggering `reconciler.run.delay()`;
          unknown service type as silent no-op\n- `test_container.py` \u2014 parser
          `host`/REMAINDER split, one-shot SSH `docker` execution (key, known-hosts
          option, operator user), known-hosts init failure warning, interactive prompt
          loop, and `Exit`/`exit`/`EXIT` loop termination\n- `test_configuration.py`
          \u2014 REMAINDER forwarding, `delay(..., auto_release_time=60)`, rc propagation
          via `handle_task`; pins the latent builtin-`format` argument\n- `test_set.py`
          / `test_noset.py` \u2014 state playbook scheduling parametrized over the
          `Maintenance`/`Bootstrap` command pairs (`status=True` vs. `status=False`)\n\n##
          Extended\n\n- `test_reconciler.py` \u2014 deprecation warning and concurrency
          of the deprecated worker runner; `Sync` wait/no-wait paths, `--task-timeout`
          forwarding, and the `OSISM_TASK_TIMEOUT` parser default (the existing timeout
          test is kept unchanged)\n\nAll Celery task calls, subprocesses, and the
          Redis task lock are mocked at the command module (lazy imports patched at
          the source module); the tests also assert that `check_task_lock_and_exit`
          runs before any task is scheduled or process is started.\n\nCloses #2362\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2464
        commit_id: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        patchset: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
        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: QWRkIHVuaXQgdGVzdHMgZm9yIHRhc2sgbGlmZWN5Y2xlIGNvbW1hbmRzCgpJbXBsZW1lbnRzICMyMzYyIChwYXJ0IG9mIHRoZSBUaWVyIDggbWV0YSBpc3N1ZSAjMjE5OSkuCgpBZGRzIHVuaXQgdGVzdHMgZm9yIHRoZSBuaW5lIHNtYWxsIHRhc2stbGlmZWN5Y2xlIENMSSBjb21tYW5kIG1vZHVsZXMgdW5kZXIgYG9zaXNtL2NvbW1hbmRzL2AsIGZvbGxvd2luZyB0aGUgZXN0YWJsaXNoZWQgcGF0dGVybiBmcm9tIGB0ZXN0cy91bml0L2NvbW1hbmRzL3Rlc3RfcmVjb25jaWxlci5weWAgLyBgdGVzdF93YWl0LnB5YCAoYENtZChNYWdpY01vY2soKSwgTWFnaWNNb2NrKCkpYCArIGBnZXRfcGFyc2VyKCJ0ZXN0IikucGFyc2VfYXJncyhbLi4uXSlgKS4KCiMjIE5ldyB0ZXN0IGZpbGVzCgotIGB0ZXN0X3Rhc2sucHlgIOKAlCBwYXJzZXIgY29udHJhY3QgYW5kIENlbGVyeSByZXZva2Ugd2l0aCBgdGVybWluYXRlPVRydWVgOyBwaW5zIHRoZSBsYXRlbnQgYnVnIHRoYXQgdGhlIG9uZS1lbGVtZW50IGBuYXJncz0xYCBsaXN0IHJlYWNoZXMgYGNvbnRyb2wucmV2b2tlYAotIGB0ZXN0X3dvcmtlci5weWAg4oCUIGNvbmN1cnJlbmN5IGRlZmF1bHRzIChDUFUgY291bnQgY2FwcGVkIGF0IDQsIGBPU0lTTV9DRUxFUllfQ09OQ1VSUkVOQ1lgIHJlYWQgYXQgcGFyc2VyLWJ1aWxkIHRpbWUpLCB3b3JrZXItdHlwZSDihpIgdGFza3MtbW9kdWxlL3F1ZXVlIG1hcHBpbmcgaW5jbHVkaW5nIHRoZSBgb3Npc20tYW5zaWJsZWAgc3BlY2lhbCBjYXNlIGFuZCBzdWZmaXggc3RyaXBwaW5nLCBgLWNgIHByb3BhZ2F0aW9uLCBhbmQgdGhlIHVudmFsaWRhdGVkIHVua25vd24tdHlwZSBjb21tYW5kIHBpbm5lZCBhcyBjdXJyZW50IGJlaGF2aW9yCi0gYHRlc3RfbG9jay5weWAg4oCUIGBMb2NrYC9gVW5sb2NrYC9gTG9ja1N0YXR1c2AgZmxvd3M6IGFscmVhZHktbG9ja2VkIHdhcm5pbmdzICh3aXRoL3dpdGhvdXQgcmVhc29uKSwgYC0tdXNlcmAvYC0tcmVhc29uYCBwYXNzLXRocm91Z2gsIGBPUEVSQVRPUl9VU0VSYCBkZWZhdWx0IChhbHNvIGJha2VkIGludG8gdGhlIGAtLXVzZXJgIGhlbHAgYXQgcGFyc2VyLWJ1aWxkIHRpbWUpLCB1bmtub3duLWtleSBmYWxsYmFja3MsIGFuZCBub24temVybyByZXR1cm5zIHdoZW4gdGhlIGxvY2sgYmFja2VuZCBmYWlscwotIGB0ZXN0X3NlcnZpY2UucHlgIOKAlCBleGFjdCBzdWJwcm9jZXNzIGNvbW1hbmQgbGluZXMgZm9yIGBhcGlgLCBgbGlzdGVuZXJgLCBgYmVhdGAgKHNldmVuIHNjaGVkdWxlcnMsIG9uZSBwZXIgdGFzayBtb2R1bGUpLCBgZmxvd2VyYCwgYW5kIGByZWNvbmNpbGVyYCAoZW52L0NQVSBjb25jdXJyZW5jeSBsb2dpYyk7IHdhdGNoZG9nIG9ic2VydmVyIHNldHVwIG9uIGAvb3B0L2NvbmZpZ3VyYXRpb24vaW52ZW50b3J5YCwgY2xlYW51cCB2aWEgYGZpbmFsbHlgLCBgb25fYW55X2V2ZW50YCByZWJpbmRpbmcsIGFuZCB0aGUgaW52ZW50b3J5IGV2ZW50IHRyaWdnZXJpbmcgYHJlY29uY2lsZXIucnVuLmRlbGF5KClgOyB1bmtub3duIHNlcnZpY2UgdHlwZSBhcyBzaWxlbnQgbm8tb3AKLSBgdGVzdF9jb250YWluZXIucHlgIOKAlCBwYXJzZXIgYGhvc3RgL1JFTUFJTkRFUiBzcGxpdCwgb25lLXNob3QgU1NIIGBkb2NrZXJgIGV4ZWN1dGlvbiAoa2V5LCBrbm93bi1ob3N0cyBvcHRpb24sIG9wZXJhdG9yIHVzZXIpLCBrbm93bi1ob3N0cyBpbml0IGZhaWx1cmUgd2FybmluZywgaW50ZXJhY3RpdmUgcHJvbXB0IGxvb3AsIGFuZCBgRXhpdGAvYGV4aXRgL2BFWElUYCBsb29wIHRlcm1pbmF0aW9uCi0gYHRlc3RfY29uZmlndXJhdGlvbi5weWAg4oCUIFJFTUFJTkRFUiBmb3J3YXJkaW5nLCBgZGVsYXkoLi4uLCBhdXRvX3JlbGVhc2VfdGltZT02MClgLCByYyBwcm9wYWdhdGlvbiB2aWEgYGhhbmRsZV90YXNrYDsgcGlucyB0aGUgbGF0ZW50IGJ1aWx0aW4tYGZvcm1hdGAgYXJndW1lbnQKLSBgdGVzdF9zZXQucHlgIC8gYHRlc3Rfbm9zZXQucHlgIOKAlCBzdGF0ZSBwbGF5Ym9vayBzY2hlZHVsaW5nIHBhcmFtZXRyaXplZCBvdmVyIHRoZSBgTWFpbnRlbmFuY2VgL2BCb290c3RyYXBgIGNvbW1hbmQgcGFpcnMgKGBzdGF0dXM9VHJ1ZWAgdnMuIGBzdGF0dXM9RmFsc2VgKQoKIyMgRXh0ZW5kZWQKCi0gYHRlc3RfcmVjb25jaWxlci5weWAg4oCUIGRlcHJlY2F0aW9uIHdhcm5pbmcgYW5kIGNvbmN1cnJlbmN5IG9mIHRoZSBkZXByZWNhdGVkIHdvcmtlciBydW5uZXI7IGBTeW5jYCB3YWl0L25vLXdhaXQgcGF0aHMsIGAtLXRhc2stdGltZW91dGAgZm9yd2FyZGluZywgYW5kIHRoZSBgT1NJU01fVEFTS19USU1FT1VUYCBwYXJzZXIgZGVmYXVsdCAodGhlIGV4aXN0aW5nIHRpbWVvdXQgdGVzdCBpcyBrZXB0IHVuY2hhbmdlZCkKCkFsbCBDZWxlcnkgdGFzayBjYWxscywgc3VicHJvY2Vzc2VzLCBhbmQgdGhlIFJlZGlzIHRhc2sgbG9jayBhcmUgbW9ja2VkIGF0IHRoZSBjb21tYW5kIG1vZHVsZSAobGF6eSBpbXBvcnRzIHBhdGNoZWQgYXQgdGhlIHNvdXJjZSBtb2R1bGUpOyB0aGUgdGVzdHMgYWxzbyBhc3NlcnQgdGhhdCBgY2hlY2tfdGFza19sb2NrX2FuZF9leGl0YCBydW5zIGJlZm9yZSBhbnkgdGFzayBpcyBzY2hlZHVsZWQgb3IgcHJvY2VzcyBpcyBzdGFydGVkLgoKQ2xvc2VzICMyMzYyCgrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQ==
      patchset: 6f0b97741d384f2ff95b990a6072ba915e3dabd5
      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: 821da6edc4b43feb2c8e8bee4b5bce10ce5370f5
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2464/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
