all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fea8:ef2c
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 0565f74a-95c4-417a-ac12-c445310b0b6c
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fea8:ef2c
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.99
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.22
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fea8:ef2c
        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: ede7ff42565443fb8f3c165bb9590d44
      build_refs:
      - branch: main
        change: '2438'
        change_message: "Add unit tests for osism/tasks thin task wrappers\n\nCloses
          #2354\n\n## Summary\n\nAdds a unit-test suite for the thin task wrappers
          in `osism/tasks/{ansible,ceph,kolla,kubernetes,reconciler}.py`. These modules
          are the Celery entry points that mostly delegate into the ansible runner,
          the Redis task locks, a subprocess call, and the task-output stream. The
          suite exercises that glue with every external effect mocked, so the tests
          need neither a broker nor a reachable Redis.\n\n## Change set\n\nA single
          commit, `7d892fc Add unit tests for osism/tasks thin task wrappers`, adds
          one new file:\n\n- `tests/unit/tasks/test_task_wrappers.py` (535 lines)\n\nThe
          tests are grouped by concern:\n\n- **App config / queue routing** \u2014
          parametrized across the five modules: the default queue, module-pattern
          \u2192 queue routing, and that the tasks register under their explicit names.\n-
          **`setup_periodic_tasks` receivers** \u2014 schedules when the Redis lock
          is acquired, skips when scheduling is disabled, skips when the lock is not
          acquired, and the no-op receiver.\n- **`ansible` task bodies** \u2014 `gather_facts`
          delegates with defaults and forwards `publish=False`; `run` delegates with
          defaults, forwards its arguments, and aborts when the task lock is active;
          `noop` returns `True`.\n- **Worker `run` bodies** \u2014 parametrized across
          `kolla`/`kubernetes`/`ceph`: delegates with defaults, forwards overrides,
          and aborts when the task lock is active.\n- **`reconciler.run`** \u2014
          aborts when the task lock is active, returns `None` when the lock is not
          acquired, publishes output, skips output when publishing is off, and warns
          when the lock was already released.\n- **`run_on_change`** \u2014 returns
          `None` when the lock is not acquired, runs the script without publishing,
          and warns when the lock was already released.\n\n## Notes for the reviewer\n\n-
          No production code is touched \u2014 this is a test-only change.\n- Scope
          matches issue #2354 exactly: the five named `osism/tasks/*` modules and
          their `run`/`gather_facts`/`noop`/`run_on_change` bodies plus the app config
          and periodic-task wiring. No divergence from the issue.\n\n---\n\n_Implemented
          by [planwerk-agent](https://github.com/planwerk/planwerk-agent) 4c14036
          with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/python-osism/pull/2438
        commit_id: 7d892fc0cee80735601368b58fd54dac6eecc629
        patchset: 7d892fc0cee80735601368b58fd54dac6eecc629
        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: 666659a72aff425cb0b13f50623349d8
      buildset_refs:
      - branch: main
        change: '2438'
        change_message: "Add unit tests for osism/tasks thin task wrappers\n\nCloses
          #2354\n\n## Summary\n\nAdds a unit-test suite for the thin task wrappers
          in `osism/tasks/{ansible,ceph,kolla,kubernetes,reconciler}.py`. These modules
          are the Celery entry points that mostly delegate into the ansible runner,
          the Redis task locks, a subprocess call, and the task-output stream. The
          suite exercises that glue with every external effect mocked, so the tests
          need neither a broker nor a reachable Redis.\n\n## Change set\n\nA single
          commit, `7d892fc Add unit tests for osism/tasks thin task wrappers`, adds
          one new file:\n\n- `tests/unit/tasks/test_task_wrappers.py` (535 lines)\n\nThe
          tests are grouped by concern:\n\n- **App config / queue routing** \u2014
          parametrized across the five modules: the default queue, module-pattern
          \u2192 queue routing, and that the tasks register under their explicit names.\n-
          **`setup_periodic_tasks` receivers** \u2014 schedules when the Redis lock
          is acquired, skips when scheduling is disabled, skips when the lock is not
          acquired, and the no-op receiver.\n- **`ansible` task bodies** \u2014 `gather_facts`
          delegates with defaults and forwards `publish=False`; `run` delegates with
          defaults, forwards its arguments, and aborts when the task lock is active;
          `noop` returns `True`.\n- **Worker `run` bodies** \u2014 parametrized across
          `kolla`/`kubernetes`/`ceph`: delegates with defaults, forwards overrides,
          and aborts when the task lock is active.\n- **`reconciler.run`** \u2014
          aborts when the task lock is active, returns `None` when the lock is not
          acquired, publishes output, skips output when publishing is off, and warns
          when the lock was already released.\n- **`run_on_change`** \u2014 returns
          `None` when the lock is not acquired, runs the script without publishing,
          and warns when the lock was already released.\n\n## Notes for the reviewer\n\n-
          No production code is touched \u2014 this is a test-only change.\n- Scope
          matches issue #2354 exactly: the five named `osism/tasks/*` modules and
          their `run`/`gather_facts`/`noop`/`run_on_change` bodies plus the app config
          and periodic-task wiring. No divergence from the issue.\n\n---\n\n_Implemented
          by [planwerk-agent](https://github.com/planwerk/planwerk-agent) 4c14036
          with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/python-osism/pull/2438
        commit_id: 7d892fc0cee80735601368b58fd54dac6eecc629
        patchset: 7d892fc0cee80735601368b58fd54dac6eecc629
        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: '2438'
      change_message: "Add unit tests for osism/tasks thin task wrappers\n\nCloses
        #2354\n\n## Summary\n\nAdds a unit-test suite for the thin task wrappers in
        `osism/tasks/{ansible,ceph,kolla,kubernetes,reconciler}.py`. These modules
        are the Celery entry points that mostly delegate into the ansible runner,
        the Redis task locks, a subprocess call, and the task-output stream. The suite
        exercises that glue with every external effect mocked, so the tests need neither
        a broker nor a reachable Redis.\n\n## Change set\n\nA single commit, `7d892fc
        Add unit tests for osism/tasks thin task wrappers`, adds one new file:\n\n-
        `tests/unit/tasks/test_task_wrappers.py` (535 lines)\n\nThe tests are grouped
        by concern:\n\n- **App config / queue routing** \u2014 parametrized across
        the five modules: the default queue, module-pattern \u2192 queue routing,
        and that the tasks register under their explicit names.\n- **`setup_periodic_tasks`
        receivers** \u2014 schedules when the Redis lock is acquired, skips when scheduling
        is disabled, skips when the lock is not acquired, and the no-op receiver.\n-
        **`ansible` task bodies** \u2014 `gather_facts` delegates with defaults and
        forwards `publish=False`; `run` delegates with defaults, forwards its arguments,
        and aborts when the task lock is active; `noop` returns `True`.\n- **Worker
        `run` bodies** \u2014 parametrized across `kolla`/`kubernetes`/`ceph`: delegates
        with defaults, forwards overrides, and aborts when the task lock is active.\n-
        **`reconciler.run`** \u2014 aborts when the task lock is active, returns `None`
        when the lock is not acquired, publishes output, skips output when publishing
        is off, and warns when the lock was already released.\n- **`run_on_change`**
        \u2014 returns `None` when the lock is not acquired, runs the script without
        publishing, and warns when the lock was already released.\n\n## Notes for
        the reviewer\n\n- No production code is touched \u2014 this is a test-only
        change.\n- Scope matches issue #2354 exactly: the five named `osism/tasks/*`
        modules and their `run`/`gather_facts`/`noop`/`run_on_change` bodies plus
        the app config and periodic-task wiring. No divergence from the issue.\n\n---\n\n_Implemented
        by [planwerk-agent](https://github.com/planwerk/planwerk-agent) 4c14036 with
        Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/python-osism/pull/2438
      child_jobs: []
      commit_id: 7d892fc0cee80735601368b58fd54dac6eecc629
      event_id: 522287d0-7908-11f1-9a4d-0925546d439a
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/ede7ff42565443fb8f3c165bb9590d44/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/ede7ff42565443fb8f3c165bb9590d44/work/logs
        result_data_file: /var/lib/zuul/builds/ede7ff42565443fb8f3c165bb9590d44/work/results.json
        src_root: /var/lib/zuul/builds/ede7ff42565443fb8f3c165bb9590d44/work/src
        work_root: /var/lib/zuul/builds/ede7ff42565443fb8f3c165bb9590d44/work
      include_vars: []
      items:
      - branch: main
        change: '2438'
        change_message: "Add unit tests for osism/tasks thin task wrappers\n\nCloses
          #2354\n\n## Summary\n\nAdds a unit-test suite for the thin task wrappers
          in `osism/tasks/{ansible,ceph,kolla,kubernetes,reconciler}.py`. These modules
          are the Celery entry points that mostly delegate into the ansible runner,
          the Redis task locks, a subprocess call, and the task-output stream. The
          suite exercises that glue with every external effect mocked, so the tests
          need neither a broker nor a reachable Redis.\n\n## Change set\n\nA single
          commit, `7d892fc Add unit tests for osism/tasks thin task wrappers`, adds
          one new file:\n\n- `tests/unit/tasks/test_task_wrappers.py` (535 lines)\n\nThe
          tests are grouped by concern:\n\n- **App config / queue routing** \u2014
          parametrized across the five modules: the default queue, module-pattern
          \u2192 queue routing, and that the tasks register under their explicit names.\n-
          **`setup_periodic_tasks` receivers** \u2014 schedules when the Redis lock
          is acquired, skips when scheduling is disabled, skips when the lock is not
          acquired, and the no-op receiver.\n- **`ansible` task bodies** \u2014 `gather_facts`
          delegates with defaults and forwards `publish=False`; `run` delegates with
          defaults, forwards its arguments, and aborts when the task lock is active;
          `noop` returns `True`.\n- **Worker `run` bodies** \u2014 parametrized across
          `kolla`/`kubernetes`/`ceph`: delegates with defaults, forwards overrides,
          and aborts when the task lock is active.\n- **`reconciler.run`** \u2014
          aborts when the task lock is active, returns `None` when the lock is not
          acquired, publishes output, skips output when publishing is off, and warns
          when the lock was already released.\n- **`run_on_change`** \u2014 returns
          `None` when the lock is not acquired, runs the script without publishing,
          and warns when the lock was already released.\n\n## Notes for the reviewer\n\n-
          No production code is touched \u2014 this is a test-only change.\n- Scope
          matches issue #2354 exactly: the five named `osism/tasks/*` modules and
          their `run`/`gather_facts`/`noop`/`run_on_change` bodies plus the app config
          and periodic-task wiring. No divergence from the issue.\n\n---\n\n_Implemented
          by [planwerk-agent](https://github.com/planwerk/planwerk-agent) 4c14036
          with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/python-osism/pull/2438
        commit_id: 7d892fc0cee80735601368b58fd54dac6eecc629
        patchset: 7d892fc0cee80735601368b58fd54dac6eecc629
        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: QWRkIHVuaXQgdGVzdHMgZm9yIG9zaXNtL3Rhc2tzIHRoaW4gdGFzayB3cmFwcGVycwoKQ2xvc2VzICMyMzU0CgojIyBTdW1tYXJ5CgpBZGRzIGEgdW5pdC10ZXN0IHN1aXRlIGZvciB0aGUgdGhpbiB0YXNrIHdyYXBwZXJzIGluIGBvc2lzbS90YXNrcy97YW5zaWJsZSxjZXBoLGtvbGxhLGt1YmVybmV0ZXMscmVjb25jaWxlcn0ucHlgLiBUaGVzZSBtb2R1bGVzIGFyZSB0aGUgQ2VsZXJ5IGVudHJ5IHBvaW50cyB0aGF0IG1vc3RseSBkZWxlZ2F0ZSBpbnRvIHRoZSBhbnNpYmxlIHJ1bm5lciwgdGhlIFJlZGlzIHRhc2sgbG9ja3MsIGEgc3VicHJvY2VzcyBjYWxsLCBhbmQgdGhlIHRhc2stb3V0cHV0IHN0cmVhbS4gVGhlIHN1aXRlIGV4ZXJjaXNlcyB0aGF0IGdsdWUgd2l0aCBldmVyeSBleHRlcm5hbCBlZmZlY3QgbW9ja2VkLCBzbyB0aGUgdGVzdHMgbmVlZCBuZWl0aGVyIGEgYnJva2VyIG5vciBhIHJlYWNoYWJsZSBSZWRpcy4KCiMjIENoYW5nZSBzZXQKCkEgc2luZ2xlIGNvbW1pdCwgYDdkODkyZmMgQWRkIHVuaXQgdGVzdHMgZm9yIG9zaXNtL3Rhc2tzIHRoaW4gdGFzayB3cmFwcGVyc2AsIGFkZHMgb25lIG5ldyBmaWxlOgoKLSBgdGVzdHMvdW5pdC90YXNrcy90ZXN0X3Rhc2tfd3JhcHBlcnMucHlgICg1MzUgbGluZXMpCgpUaGUgdGVzdHMgYXJlIGdyb3VwZWQgYnkgY29uY2VybjoKCi0gKipBcHAgY29uZmlnIC8gcXVldWUgcm91dGluZyoqIOKAlCBwYXJhbWV0cml6ZWQgYWNyb3NzIHRoZSBmaXZlIG1vZHVsZXM6IHRoZSBkZWZhdWx0IHF1ZXVlLCBtb2R1bGUtcGF0dGVybiDihpIgcXVldWUgcm91dGluZywgYW5kIHRoYXQgdGhlIHRhc2tzIHJlZ2lzdGVyIHVuZGVyIHRoZWlyIGV4cGxpY2l0IG5hbWVzLgotICoqYHNldHVwX3BlcmlvZGljX3Rhc2tzYCByZWNlaXZlcnMqKiDigJQgc2NoZWR1bGVzIHdoZW4gdGhlIFJlZGlzIGxvY2sgaXMgYWNxdWlyZWQsIHNraXBzIHdoZW4gc2NoZWR1bGluZyBpcyBkaXNhYmxlZCwgc2tpcHMgd2hlbiB0aGUgbG9jayBpcyBub3QgYWNxdWlyZWQsIGFuZCB0aGUgbm8tb3AgcmVjZWl2ZXIuCi0gKipgYW5zaWJsZWAgdGFzayBib2RpZXMqKiDigJQgYGdhdGhlcl9mYWN0c2AgZGVsZWdhdGVzIHdpdGggZGVmYXVsdHMgYW5kIGZvcndhcmRzIGBwdWJsaXNoPUZhbHNlYDsgYHJ1bmAgZGVsZWdhdGVzIHdpdGggZGVmYXVsdHMsIGZvcndhcmRzIGl0cyBhcmd1bWVudHMsIGFuZCBhYm9ydHMgd2hlbiB0aGUgdGFzayBsb2NrIGlzIGFjdGl2ZTsgYG5vb3BgIHJldHVybnMgYFRydWVgLgotICoqV29ya2VyIGBydW5gIGJvZGllcyoqIOKAlCBwYXJhbWV0cml6ZWQgYWNyb3NzIGBrb2xsYWAvYGt1YmVybmV0ZXNgL2BjZXBoYDogZGVsZWdhdGVzIHdpdGggZGVmYXVsdHMsIGZvcndhcmRzIG92ZXJyaWRlcywgYW5kIGFib3J0cyB3aGVuIHRoZSB0YXNrIGxvY2sgaXMgYWN0aXZlLgotICoqYHJlY29uY2lsZXIucnVuYCoqIOKAlCBhYm9ydHMgd2hlbiB0aGUgdGFzayBsb2NrIGlzIGFjdGl2ZSwgcmV0dXJucyBgTm9uZWAgd2hlbiB0aGUgbG9jayBpcyBub3QgYWNxdWlyZWQsIHB1Ymxpc2hlcyBvdXRwdXQsIHNraXBzIG91dHB1dCB3aGVuIHB1Ymxpc2hpbmcgaXMgb2ZmLCBhbmQgd2FybnMgd2hlbiB0aGUgbG9jayB3YXMgYWxyZWFkeSByZWxlYXNlZC4KLSAqKmBydW5fb25fY2hhbmdlYCoqIOKAlCByZXR1cm5zIGBOb25lYCB3aGVuIHRoZSBsb2NrIGlzIG5vdCBhY3F1aXJlZCwgcnVucyB0aGUgc2NyaXB0IHdpdGhvdXQgcHVibGlzaGluZywgYW5kIHdhcm5zIHdoZW4gdGhlIGxvY2sgd2FzIGFscmVhZHkgcmVsZWFzZWQuCgojIyBOb3RlcyBmb3IgdGhlIHJldmlld2VyCgotIE5vIHByb2R1Y3Rpb24gY29kZSBpcyB0b3VjaGVkIOKAlCB0aGlzIGlzIGEgdGVzdC1vbmx5IGNoYW5nZS4KLSBTY29wZSBtYXRjaGVzIGlzc3VlICMyMzU0IGV4YWN0bHk6IHRoZSBmaXZlIG5hbWVkIGBvc2lzbS90YXNrcy8qYCBtb2R1bGVzIGFuZCB0aGVpciBgcnVuYC9gZ2F0aGVyX2ZhY3RzYC9gbm9vcGAvYHJ1bl9vbl9jaGFuZ2VgIGJvZGllcyBwbHVzIHRoZSBhcHAgY29uZmlnIGFuZCBwZXJpb2RpYy10YXNrIHdpcmluZy4gTm8gZGl2ZXJnZW5jZSBmcm9tIHRoZSBpc3N1ZS4KCi0tLQoKX0ltcGxlbWVudGVkIGJ5IFtwbGFud2Vyay1hZ2VudF0oaHR0cHM6Ly9naXRodWIuY29tL3BsYW53ZXJrL3BsYW53ZXJrLWFnZW50KSA0YzE0MDM2IHdpdGggQ2xhdWRlOmNsYXVkZS1vcHVzLTQtOF8K
      patchset: 7d892fc0cee80735601368b58fd54dac6eecc629
      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: c138deb827f24d64eb70e53c5f72ac823f1ee255
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2438/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
