all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe11:a5c8
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 209250c2-8e16-4009-ab8a-fbaeeb210181
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe11:a5c8
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.181
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.59
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe11:a5c8
        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#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 019edb65b39f419d9a9415a40c54d0c2
      build_refs:
      - branch: main
        change: '2331'
        change_message: "Return non-zero exit codes on CLI failure paths\n\nFixes
          the exit-code-0-on-failure pattern audited in #2314: several `osism`\nsubcommands
          logged an error on a failure path and then returned control\nwithout a non-zero
          exit code, so a failed operation looked like success in\n`set -e` scripts
          and `&&` chains. See #2314 for the full audit and rationale.\n\n### Why
          multiple commits\n\nThe work is split by **type of fix**, not by file, so
          each commit is one\nreviewable decision and the riskier behaviour changes
          are isolated at the end\nof the stack:\n\n1. `Return non-zero on task-wait
          timeouts` \u2014 Category A timeout handlers.\n2. `Fix wait exit code and
          timeout handling for --live` \u2014 the wait.py\n   structural fix (init
          `rc`, drop the broken `len(task_ids) == 1` guard).\n3. `Return non-zero
          on inventory query failures in report` \u2014 Category B.\n4. `Return non-zero
          on failed lookups in CLI commands` \u2014 not-found / lookup\n   failures
          (Category C + D).\n5. `Return non-zero on precondition and operational failures`
          \u2014 unmet\n   preconditions, missing integrations, swallowed exceptions.\n6.
          `Return non-zero on invalid command arguments` \u2014 **behaviour change.**\n7.
          `Return non-zero on unconfirmed destructive --all` \u2014 **behaviour change.**\n\nCommits
          1\u20135 are correctness fixes: an operation actually ran and failed, so\nexit
          0 was simply wrong. Commits 6\u20137 are deliberate behaviour changes \u2014
          those\npaths reject the invocation up front without attempting anything
          \u2014 so they sit\nlast on the stack and can be reviewed (or dropped) independently
          of the\ncorrectness fixes.\n\nEmpty-result and status paths that legitimately
          exit 0 (e.g. the netbox\n`--list` \"No NetBox instances configured\" report,
          report's \"No hosts found\")\nare deliberately left untouched, following
          the convention established in #2313.\n\nEach commit adds unit tests mirroring
          #2313 (failure path \u2192 exit 1,\nempty-result path \u2192 exit 0).\n\nRelated-Bug:
          #2314"
        change_url: https://github.com/osism/python-osism/pull/2331
        commit_id: 8278470d34f0e1cc0830e06149621426fc25c41a
        patchset: 8278470d34f0e1cc0830e06149621426fc25c41a
        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: f3d03160f8194ceda918b0a5f689771f
      buildset_refs:
      - branch: main
        change: '2331'
        change_message: "Return non-zero exit codes on CLI failure paths\n\nFixes
          the exit-code-0-on-failure pattern audited in #2314: several `osism`\nsubcommands
          logged an error on a failure path and then returned control\nwithout a non-zero
          exit code, so a failed operation looked like success in\n`set -e` scripts
          and `&&` chains. See #2314 for the full audit and rationale.\n\n### Why
          multiple commits\n\nThe work is split by **type of fix**, not by file, so
          each commit is one\nreviewable decision and the riskier behaviour changes
          are isolated at the end\nof the stack:\n\n1. `Return non-zero on task-wait
          timeouts` \u2014 Category A timeout handlers.\n2. `Fix wait exit code and
          timeout handling for --live` \u2014 the wait.py\n   structural fix (init
          `rc`, drop the broken `len(task_ids) == 1` guard).\n3. `Return non-zero
          on inventory query failures in report` \u2014 Category B.\n4. `Return non-zero
          on failed lookups in CLI commands` \u2014 not-found / lookup\n   failures
          (Category C + D).\n5. `Return non-zero on precondition and operational failures`
          \u2014 unmet\n   preconditions, missing integrations, swallowed exceptions.\n6.
          `Return non-zero on invalid command arguments` \u2014 **behaviour change.**\n7.
          `Return non-zero on unconfirmed destructive --all` \u2014 **behaviour change.**\n\nCommits
          1\u20135 are correctness fixes: an operation actually ran and failed, so\nexit
          0 was simply wrong. Commits 6\u20137 are deliberate behaviour changes \u2014
          those\npaths reject the invocation up front without attempting anything
          \u2014 so they sit\nlast on the stack and can be reviewed (or dropped) independently
          of the\ncorrectness fixes.\n\nEmpty-result and status paths that legitimately
          exit 0 (e.g. the netbox\n`--list` \"No NetBox instances configured\" report,
          report's \"No hosts found\")\nare deliberately left untouched, following
          the convention established in #2313.\n\nEach commit adds unit tests mirroring
          #2313 (failure path \u2192 exit 1,\nempty-result path \u2192 exit 0).\n\nRelated-Bug:
          #2314"
        change_url: https://github.com/osism/python-osism/pull/2331
        commit_id: 8278470d34f0e1cc0830e06149621426fc25c41a
        patchset: 8278470d34f0e1cc0830e06149621426fc25c41a
        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: '2331'
      change_message: "Return non-zero exit codes on CLI failure paths\n\nFixes the
        exit-code-0-on-failure pattern audited in #2314: several `osism`\nsubcommands
        logged an error on a failure path and then returned control\nwithout a non-zero
        exit code, so a failed operation looked like success in\n`set -e` scripts
        and `&&` chains. See #2314 for the full audit and rationale.\n\n### Why multiple
        commits\n\nThe work is split by **type of fix**, not by file, so each commit
        is one\nreviewable decision and the riskier behaviour changes are isolated
        at the end\nof the stack:\n\n1. `Return non-zero on task-wait timeouts` \u2014
        Category A timeout handlers.\n2. `Fix wait exit code and timeout handling
        for --live` \u2014 the wait.py\n   structural fix (init `rc`, drop the broken
        `len(task_ids) == 1` guard).\n3. `Return non-zero on inventory query failures
        in report` \u2014 Category B.\n4. `Return non-zero on failed lookups in CLI
        commands` \u2014 not-found / lookup\n   failures (Category C + D).\n5. `Return
        non-zero on precondition and operational failures` \u2014 unmet\n   preconditions,
        missing integrations, swallowed exceptions.\n6. `Return non-zero on invalid
        command arguments` \u2014 **behaviour change.**\n7. `Return non-zero on unconfirmed
        destructive --all` \u2014 **behaviour change.**\n\nCommits 1\u20135 are correctness
        fixes: an operation actually ran and failed, so\nexit 0 was simply wrong.
        Commits 6\u20137 are deliberate behaviour changes \u2014 those\npaths reject
        the invocation up front without attempting anything \u2014 so they sit\nlast
        on the stack and can be reviewed (or dropped) independently of the\ncorrectness
        fixes.\n\nEmpty-result and status paths that legitimately exit 0 (e.g. the
        netbox\n`--list` \"No NetBox instances configured\" report, report's \"No
        hosts found\")\nare deliberately left untouched, following the convention
        established in #2313.\n\nEach commit adds unit tests mirroring #2313 (failure
        path \u2192 exit 1,\nempty-result path \u2192 exit 0).\n\nRelated-Bug: #2314"
      change_url: https://github.com/osism/python-osism/pull/2331
      child_jobs: []
      commit_id: 8278470d34f0e1cc0830e06149621426fc25c41a
      event_id: 80b9d4e0-6328-11f1-8fd6-0fac101d5d68
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/019edb65b39f419d9a9415a40c54d0c2/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/019edb65b39f419d9a9415a40c54d0c2/work/logs
        result_data_file: /var/lib/zuul/builds/019edb65b39f419d9a9415a40c54d0c2/work/results.json
        src_root: /var/lib/zuul/builds/019edb65b39f419d9a9415a40c54d0c2/work/src
        work_root: /var/lib/zuul/builds/019edb65b39f419d9a9415a40c54d0c2/work
      include_vars: []
      items:
      - branch: main
        change: '2331'
        change_message: "Return non-zero exit codes on CLI failure paths\n\nFixes
          the exit-code-0-on-failure pattern audited in #2314: several `osism`\nsubcommands
          logged an error on a failure path and then returned control\nwithout a non-zero
          exit code, so a failed operation looked like success in\n`set -e` scripts
          and `&&` chains. See #2314 for the full audit and rationale.\n\n### Why
          multiple commits\n\nThe work is split by **type of fix**, not by file, so
          each commit is one\nreviewable decision and the riskier behaviour changes
          are isolated at the end\nof the stack:\n\n1. `Return non-zero on task-wait
          timeouts` \u2014 Category A timeout handlers.\n2. `Fix wait exit code and
          timeout handling for --live` \u2014 the wait.py\n   structural fix (init
          `rc`, drop the broken `len(task_ids) == 1` guard).\n3. `Return non-zero
          on inventory query failures in report` \u2014 Category B.\n4. `Return non-zero
          on failed lookups in CLI commands` \u2014 not-found / lookup\n   failures
          (Category C + D).\n5. `Return non-zero on precondition and operational failures`
          \u2014 unmet\n   preconditions, missing integrations, swallowed exceptions.\n6.
          `Return non-zero on invalid command arguments` \u2014 **behaviour change.**\n7.
          `Return non-zero on unconfirmed destructive --all` \u2014 **behaviour change.**\n\nCommits
          1\u20135 are correctness fixes: an operation actually ran and failed, so\nexit
          0 was simply wrong. Commits 6\u20137 are deliberate behaviour changes \u2014
          those\npaths reject the invocation up front without attempting anything
          \u2014 so they sit\nlast on the stack and can be reviewed (or dropped) independently
          of the\ncorrectness fixes.\n\nEmpty-result and status paths that legitimately
          exit 0 (e.g. the netbox\n`--list` \"No NetBox instances configured\" report,
          report's \"No hosts found\")\nare deliberately left untouched, following
          the convention established in #2313.\n\nEach commit adds unit tests mirroring
          #2313 (failure path \u2192 exit 1,\nempty-result path \u2192 exit 0).\n\nRelated-Bug:
          #2314"
        change_url: https://github.com/osism/python-osism/pull/2331
        commit_id: 8278470d34f0e1cc0830e06149621426fc25c41a
        patchset: 8278470d34f0e1cc0830e06149621426fc25c41a
        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: UmV0dXJuIG5vbi16ZXJvIGV4aXQgY29kZXMgb24gQ0xJIGZhaWx1cmUgcGF0aHMKCkZpeGVzIHRoZSBleGl0LWNvZGUtMC1vbi1mYWlsdXJlIHBhdHRlcm4gYXVkaXRlZCBpbiAjMjMxNDogc2V2ZXJhbCBgb3Npc21gCnN1YmNvbW1hbmRzIGxvZ2dlZCBhbiBlcnJvciBvbiBhIGZhaWx1cmUgcGF0aCBhbmQgdGhlbiByZXR1cm5lZCBjb250cm9sCndpdGhvdXQgYSBub24temVybyBleGl0IGNvZGUsIHNvIGEgZmFpbGVkIG9wZXJhdGlvbiBsb29rZWQgbGlrZSBzdWNjZXNzIGluCmBzZXQgLWVgIHNjcmlwdHMgYW5kIGAmJmAgY2hhaW5zLiBTZWUgIzIzMTQgZm9yIHRoZSBmdWxsIGF1ZGl0IGFuZCByYXRpb25hbGUuCgojIyMgV2h5IG11bHRpcGxlIGNvbW1pdHMKClRoZSB3b3JrIGlzIHNwbGl0IGJ5ICoqdHlwZSBvZiBmaXgqKiwgbm90IGJ5IGZpbGUsIHNvIGVhY2ggY29tbWl0IGlzIG9uZQpyZXZpZXdhYmxlIGRlY2lzaW9uIGFuZCB0aGUgcmlza2llciBiZWhhdmlvdXIgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgYXQgdGhlIGVuZApvZiB0aGUgc3RhY2s6CgoxLiBgUmV0dXJuIG5vbi16ZXJvIG9uIHRhc2std2FpdCB0aW1lb3V0c2Ag4oCUIENhdGVnb3J5IEEgdGltZW91dCBoYW5kbGVycy4KMi4gYEZpeCB3YWl0IGV4aXQgY29kZSBhbmQgdGltZW91dCBoYW5kbGluZyBmb3IgLS1saXZlYCDigJQgdGhlIHdhaXQucHkKICAgc3RydWN0dXJhbCBmaXggKGluaXQgYHJjYCwgZHJvcCB0aGUgYnJva2VuIGBsZW4odGFza19pZHMpID09IDFgIGd1YXJkKS4KMy4gYFJldHVybiBub24temVybyBvbiBpbnZlbnRvcnkgcXVlcnkgZmFpbHVyZXMgaW4gcmVwb3J0YCDigJQgQ2F0ZWdvcnkgQi4KNC4gYFJldHVybiBub24temVybyBvbiBmYWlsZWQgbG9va3VwcyBpbiBDTEkgY29tbWFuZHNgIOKAlCBub3QtZm91bmQgLyBsb29rdXAKICAgZmFpbHVyZXMgKENhdGVnb3J5IEMgKyBEKS4KNS4gYFJldHVybiBub24temVybyBvbiBwcmVjb25kaXRpb24gYW5kIG9wZXJhdGlvbmFsIGZhaWx1cmVzYCDigJQgdW5tZXQKICAgcHJlY29uZGl0aW9ucywgbWlzc2luZyBpbnRlZ3JhdGlvbnMsIHN3YWxsb3dlZCBleGNlcHRpb25zLgo2LiBgUmV0dXJuIG5vbi16ZXJvIG9uIGludmFsaWQgY29tbWFuZCBhcmd1bWVudHNgIOKAlCAqKmJlaGF2aW91ciBjaGFuZ2UuKioKNy4gYFJldHVybiBub24temVybyBvbiB1bmNvbmZpcm1lZCBkZXN0cnVjdGl2ZSAtLWFsbGAg4oCUICoqYmVoYXZpb3VyIGNoYW5nZS4qKgoKQ29tbWl0cyAx4oCTNSBhcmUgY29ycmVjdG5lc3MgZml4ZXM6IGFuIG9wZXJhdGlvbiBhY3R1YWxseSByYW4gYW5kIGZhaWxlZCwgc28KZXhpdCAwIHdhcyBzaW1wbHkgd3JvbmcuIENvbW1pdHMgNuKAkzcgYXJlIGRlbGliZXJhdGUgYmVoYXZpb3VyIGNoYW5nZXMg4oCUIHRob3NlCnBhdGhzIHJlamVjdCB0aGUgaW52b2NhdGlvbiB1cCBmcm9udCB3aXRob3V0IGF0dGVtcHRpbmcgYW55dGhpbmcg4oCUIHNvIHRoZXkgc2l0Cmxhc3Qgb24gdGhlIHN0YWNrIGFuZCBjYW4gYmUgcmV2aWV3ZWQgKG9yIGRyb3BwZWQpIGluZGVwZW5kZW50bHkgb2YgdGhlCmNvcnJlY3RuZXNzIGZpeGVzLgoKRW1wdHktcmVzdWx0IGFuZCBzdGF0dXMgcGF0aHMgdGhhdCBsZWdpdGltYXRlbHkgZXhpdCAwIChlLmcuIHRoZSBuZXRib3gKYC0tbGlzdGAgIk5vIE5ldEJveCBpbnN0YW5jZXMgY29uZmlndXJlZCIgcmVwb3J0LCByZXBvcnQncyAiTm8gaG9zdHMgZm91bmQiKQphcmUgZGVsaWJlcmF0ZWx5IGxlZnQgdW50b3VjaGVkLCBmb2xsb3dpbmcgdGhlIGNvbnZlbnRpb24gZXN0YWJsaXNoZWQgaW4gIzIzMTMuCgpFYWNoIGNvbW1pdCBhZGRzIHVuaXQgdGVzdHMgbWlycm9yaW5nICMyMzEzIChmYWlsdXJlIHBhdGgg4oaSIGV4aXQgMSwKZW1wdHktcmVzdWx0IHBhdGgg4oaSIGV4aXQgMCkuCgpSZWxhdGVkLUJ1ZzogIzIzMTQ=
      patchset: 8278470d34f0e1cc0830e06149621426fc25c41a
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          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/python-osism:
            canonical_name: github.com/osism/python-osism
            checkout: main
            commit: 0a171b64d32854f28d0e99b05d682e6752d3a5e9
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        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: null
      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: 0a171b64d32854f28d0e99b05d682e6752d3a5e9
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2331/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
