all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe62:c4a0
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 7ad0db41-d613-479d-834d-42b921313f0e
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe62:c4a0
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.141
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.206
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe62:c4a0
        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 python-osism-unit-tests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/python-osism/.zuul.yaml@main#133>'
      - '<Job python-osism-unit-tests explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#143>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: eb4dfa8a52f84fabaa01de2f4313e1d2
      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`
          (33 tests), `test_check.py` (44), `test_compose.py` (3), `test_sync.py`
          (27), `test_log.py` (16), `test_console.py` (27)\n- **Extended** (existing
          tests unchanged): `test_validate.py` (+13), `test_wait.py` (+9), `test_get.py`
          (+14)\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## Current behavior pinned
          \u2014 follow-up fix candidates\n\nThe tests characterize the code as it
          is today; a few of the pinned behaviors look like latent bugs worth separate
          issues:\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:403).\n-
          The collection branch of `apply.Run.take_action` breaks the retry loop with
          `rc=None` and returns `None` instead of an exit code (anticipated by the
          issue).\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)"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 065dec8552cf106e5f0005609681e0f6354e294c
        patchset: 065dec8552cf106e5f0005609681e0f6354e294c
        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: d884a7e2254f46d4a986407e31031a35
      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`
          (33 tests), `test_check.py` (44), `test_compose.py` (3), `test_sync.py`
          (27), `test_log.py` (16), `test_console.py` (27)\n- **Extended** (existing
          tests unchanged): `test_validate.py` (+13), `test_wait.py` (+9), `test_get.py`
          (+14)\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## Current behavior pinned
          \u2014 follow-up fix candidates\n\nThe tests characterize the code as it
          is today; a few of the pinned behaviors look like latent bugs worth separate
          issues:\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:403).\n-
          The collection branch of `apply.Run.take_action` breaks the retry loop with
          `rc=None` and returns `None` instead of an exit code (anticipated by the
          issue).\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)"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 065dec8552cf106e5f0005609681e0f6354e294c
        patchset: 065dec8552cf106e5f0005609681e0f6354e294c
        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` (33
        tests), `test_check.py` (44), `test_compose.py` (3), `test_sync.py` (27),
        `test_log.py` (16), `test_console.py` (27)\n- **Extended** (existing tests
        unchanged): `test_validate.py` (+13), `test_wait.py` (+9), `test_get.py` (+14)\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## Current behavior pinned \u2014 follow-up fix candidates\n\nThe
        tests characterize the code as it is today; a few of the pinned behaviors
        look like latent bugs worth separate issues:\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:403).\n- The collection branch of `apply.Run.take_action`
        breaks the retry loop with `rc=None` and returns `None` instead of an exit
        code (anticipated by the issue).\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)"
      change_url: https://github.com/osism/python-osism/pull/2480
      child_jobs: []
      commit_id: 065dec8552cf106e5f0005609681e0f6354e294c
      event_id: 66ade110-85cc-11f1-9034-77bc5c8b6e03
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/eb4dfa8a52f84fabaa01de2f4313e1d2/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/eb4dfa8a52f84fabaa01de2f4313e1d2/work/logs
        result_data_file: /var/lib/zuul/builds/eb4dfa8a52f84fabaa01de2f4313e1d2/work/results.json
        src_root: /var/lib/zuul/builds/eb4dfa8a52f84fabaa01de2f4313e1d2/work/src
        work_root: /var/lib/zuul/builds/eb4dfa8a52f84fabaa01de2f4313e1d2/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`
          (33 tests), `test_check.py` (44), `test_compose.py` (3), `test_sync.py`
          (27), `test_log.py` (16), `test_console.py` (27)\n- **Extended** (existing
          tests unchanged): `test_validate.py` (+13), `test_wait.py` (+9), `test_get.py`
          (+14)\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## Current behavior pinned
          \u2014 follow-up fix candidates\n\nThe tests characterize the code as it
          is today; a few of the pinned behaviors look like latent bugs worth separate
          issues:\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:403).\n-
          The collection branch of `apply.Run.take_action` breaks the retry loop with
          `rc=None` and returns `None` instead of an exit code (anticipated by the
          issue).\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)"
        change_url: https://github.com/osism/python-osism/pull/2480
        commit_id: 065dec8552cf106e5f0005609681e0f6354e294c
        patchset: 065dec8552cf106e5f0005609681e0f6354e294c
        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: python-osism-unit-tests
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIHdvcmtmbG93IGNvbW1hbmRzCgpJbXBsZW1lbnRzICMyMzYzOiB1bml0IHRlc3RzIGZvciB0aGUgd29ya2Zsb3ctb3JpZW50ZWQgQ0xJIGNvbW1hbmQgbW9kdWxlcyB1bmRlciBgb3Npc20vY29tbWFuZHMvYCAoYGFwcGx5YCwgYGNoZWNrYCwgYGNvbXBvc2VgLCBgc3luY2AsIGBnZXRgLCBgbG9nYCwgYGNvbnNvbGVgLCBgdmFsaWRhdGVgLCBgd2FpdGApLgoKIyMgV2hhdCdzIGNvdmVyZWQKCi0gKipOZXcgdGVzdCBtb2R1bGVzKio6IGB0ZXN0X2FwcGx5LnB5YCAoMzMgdGVzdHMpLCBgdGVzdF9jaGVjay5weWAgKDQ0KSwgYHRlc3RfY29tcG9zZS5weWAgKDMpLCBgdGVzdF9zeW5jLnB5YCAoMjcpLCBgdGVzdF9sb2cucHlgICgxNiksIGB0ZXN0X2NvbnNvbGUucHlgICgyNykKLSAqKkV4dGVuZGVkKiogKGV4aXN0aW5nIHRlc3RzIHVuY2hhbmdlZCk6IGB0ZXN0X3ZhbGlkYXRlLnB5YCAoKzEzKSwgYHRlc3Rfd2FpdC5weWAgKCs5KSwgYHRlc3RfZ2V0LnB5YCAoKzE0KQoKQWxsIHRlc3QgdGFyZ2V0cyBmcm9tIHRoZSBpc3N1ZSBhcmUgaW1wbGVtZW50ZWQsIGluY2x1ZGluZyB0aGUgcHVyZSBoZWxwZXJzIGluIGBjaGVjay5weWAgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgaG9zdC1yZXNvbHV0aW9uIGhlbHBlcnMgaW4gYGNvbnNvbGUucHlgIHRoYXQgdGhlIGlzc3VlIGZsYWdzIGZvciDiiaU5NSAlIGNvdmVyYWdlLiBBbGwgQ2VsZXJ5IHRhc2sgY2FsbHMsIHN1YnByb2Nlc3NlcywgRG9ja2VyL05ldGJveC9SZWRpcyBjbGllbnRzIGFuZCBpbnRlcmFjdGl2ZSBwcm9tcHRzIGFyZSBtb2NrZWQ7IGxvZyBhc3NlcnRpb25zIHVzZSBhIGxvZ3VydSBzaW5rIChgbG9ndXJ1X2xvZ3NgIGZpeHR1cmUpIHNpbmNlIGBjYXBsb2dgIGRvZXMgbm90IGNhcHR1cmUgbG9ndXJ1IHJlY29yZHMuCgojIyBDdXJyZW50IGJlaGF2aW9yIHBpbm5lZCDigJQgZm9sbG93LXVwIGZpeCBjYW5kaWRhdGVzCgpUaGUgdGVzdHMgY2hhcmFjdGVyaXplIHRoZSBjb2RlIGFzIGl0IGlzIHRvZGF5OyBhIGZldyBvZiB0aGUgcGlubmVkIGJlaGF2aW9ycyBsb29rIGxpa2UgbGF0ZW50IGJ1Z3Mgd29ydGggc2VwYXJhdGUgaXNzdWVzOgoKLSBgYXBwbHkuUnVuLmhhbmRsZV9yb2xlYCBsb2dzIGB0YXNrLnRhc2tfaWRgIGJlZm9yZSB0aGUgYEdyb3VwUmVzdWx0YCBpc2luc3RhbmNlIGNoZWNrLCBidXQgYEdyb3VwUmVzdWx0YCBoYXMgbm8gYHRhc2tfaWRgIGF0dHJpYnV0ZSDigJQgdGhlIHJlYWwgYGxvYWRiYWxhbmNlci1uZ2AgcGF0aCB3b3VsZCByYWlzZSBgQXR0cmlidXRlRXJyb3JgIChhcHBseS5weTo0MDMpLgotIFRoZSBjb2xsZWN0aW9uIGJyYW5jaCBvZiBgYXBwbHkuUnVuLnRha2VfYWN0aW9uYCBicmVha3MgdGhlIHJldHJ5IGxvb3Agd2l0aCBgcmM9Tm9uZWAgYW5kIHJldHVybnMgYE5vbmVgIGluc3RlYWQgb2YgYW4gZXhpdCBjb2RlIChhbnRpY2lwYXRlZCBieSB0aGUgaXNzdWUpLgotIGB3YWl0IC0tcmVmcmVzaGAgaXMgYSBuby1vcCB3aGVuIHRhc2sgaWRzIGFyZSBwYXNzZWQgb24gdGhlIENMSTogYGRvX3JlZnJlc2hgIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHRoZSBpZCBsaXN0IGNvbWVzIGZyb20gdGhlIGluc3BlY3Rvci4KLSBgbG9nLkZpbGVgIGVycm9yIGxvZ3MgdXNlIHByaW50Zi1zdHlsZSBgJXNgIHBsYWNlaG9sZGVycywgd2hpY2ggbG9ndXJ1IGRvZXMgbm90IGludGVycG9sYXRlIOKAlCB0aGUgcGxhY2Vob2xkZXJzIGFwcGVhciBsaXRlcmFsbHkgaW4gdGhlIGxvZyBvdXRwdXQuCi0gYHZhbGlkYXRlLlJ1bi5faGFuZGxlX3Rhc2tgIG1peGVzIGB0LmlkYCAoZmV0Y2gpIGFuZCBgdC50YXNrX2lkYCAobG9nL3ByaW50KSwgYW5kIGl0cyB0aW1lb3V0IG1lc3NhZ2Ugc2F5cyAiKHN5bmMgaW52ZW50b3J5KSIuCgpgZmxha2U4YCBhbmQgYGJsYWNrIC0tY2hlY2tgIHBhc3MgbG9jYWxseTsgdGhlIHRlc3Qgc3VpdGUgaXRzZWxmIHJ1bnMgaW4gQ0kgcGVyIHByb2plY3Qgd29ya2Zsb3cuCgpDbG9zZXMgIzIzNjMKCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUp
      patchset: 065dec8552cf106e5f0005609681e0f6354e294c
      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/python-osism:
            canonical_name: github.com/osism/python-osism
            checkout: main
            commit: dc7cddb87ba3c8e90fd6da8a885572d6f7cc9392
          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
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
        playbooks:
        - path: untrusted/project_0/github.com/osism/python-osism/playbooks/test-unit.yml
          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
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_3/zuul-jobs
            link_target: untrusted/project_3/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_3/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: dc7cddb87ba3c8e90fd6da8a885572d6f7cc9392
          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
