all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feb6:120
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: a13f8ca2-3802-4ab2-bbff-9e157c9710d5
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feb6:120
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.125
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.116
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feb6:120
        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-black explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#54>'
      - '<Job python-black explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#32>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: e5fefd9ff9db45f3bb0255258b22eb20
      build_refs:
      - branch: main
        change: '251'
        change_message: "Unit tests: Tier 2 \u2014 task / playbook builders in main.py\n\n##
          Summary\n\nTier 2 of the #232 unit-test rollout: lock down the four **settings-aware\ntask
          / playbook builders** in `netbox_manager/main.py` that turn YAML\nresource
          definitions into Ansible task dicts and rendered playbook strings.\nThe
          tests are pure data-in/data-out \u2014 no live NetBox, no `ansible_runner`,\nno
          filesystem, no `pynetbox` mocks. They use the existing conftest dynaconf\nenv
          stub for the baseline and per-test `monkeypatch.setattr(main.settings,\n...,
          raising=False)` for the two branch-specific settings (trailing-slash\n`URL`,
          `IGNORE_SSL_ERRORS=True`).\n\nTest-only change: **no production code is
          touched**, no new package, and no\nnew `conftest.py` fixtures.\n\nCloses
          #249\n\n## Change set (in commit order)\n\n1. **Add unit tests for NetBox
          and URI task builders**\n   \u2014 `tests/unit/netbox_manager/test_task_builders.py`
          (groups 1 & 2)\n   - `TestCreateNetboxTask` \u2014 `state` default + caller-dict
          mutation, the\n     `netbox.netbox.netbox_<key>` module envelope, `validate_certs`
          in both\n     polarities, settings read at call time, token stringification,
          the\n     task-name double-space collapse, `update_vc_child` placement for\n
          \    `device_interface` vs. other keys, conditional `register` /\n     `ignore_errors`.\n
          \  - `TestCreateUriTask` \u2014 `/api/` & `api/` prefix stripping, remaining\n
          \    leading-slash removal, the trailing-slash URL guard, empty-path root,\n
          \    method default/passthrough, JSON headers, `validate_certs` polarities,\n
          \    empty vs. non-empty body handling, the fixed `status_code`, conditional\n
          \    `register` / `ignore_errors`.\n\n2. **Add unit tests for playbook rendering
          and YAML dumper**\n   \u2014 `tests/unit/netbox_manager/test_playbook_rendering.py`
          (groups 3 & 4)\n   - `TestCreateAnsiblePlaybook` \u2014 single-play envelope
          with `basename` and\n     `connection: local` / `hosts: localhost` / `gather_facts:
          false`, a\n     vars/tasks round-trip through `yaml.safe_load` (verifying
          the Jinja\n     `indent(4)` filter does not corrupt nesting), and the empty-vars
          /\n     empty-tasks / both-empty edge shapes.\n   - `TestProperIndentDumper`
          \u2014 nested sequences indented under their key\n     (asserted on the
          dumped string, contrasted with the indentless stock\n     dumper) and a
          round-trip with the exact `_write_autoconf_files` dump\n     signature (`Dumper=ProperIndentDumper,
          default_flow_style=False,\n     sort_keys=False, explicit_start=True`).\n\nEvery
          builder that mutates its `value` argument (`create_netbox_task` pops\n`state`
          / `update_vc_child`; the round-trip test reuses `create_netbox_task`)\nis
          fed a fresh dict literal per call.\n\n## Acceptance Criteria coverage\n\nAll
          four function groups (1\u20134) and their listed branches are covered. The\ntwo
          settings-branch criteria (trailing-slash URL, `IGNORE_SSL_ERRORS=True`)\nuse
          `monkeypatch.setattr(main.settings, ..., raising=False)` as required.\n\n##
          Definition of Done notes\n\n- `pytest tests/unit` is green locally (152
          passed, +36 new).\n- `flake8` and `black --check` are green for the new
          files.\n- The DoD item *\"document new shared fixtures\"* is satisfied vacuously:
          this\n  tier needs **no** new `conftest.py` fixtures \u2014 the existing
          env stub plus\n  per-test `monkeypatch` overrides suffice \u2014 so there
          is nothing new to\n  document for later tiers.\n\n## Local verification\n\n|
          Command | Result |\n| --- | --- |\n| `.venv/bin/python -m pytest tests/unit`
          | 152 passed |\n| `.venv/bin/python -m flake8 <new files>` | clean |\n|
          `.venv/bin/python -m black --check <new files>` | clean |\n| `.venv/bin/python
          -m mypy netbox_manager/` | unchanged (7 pre-existing `import-untyped` errors
          from missing local stubs; resolved in CI) |\n| `yamllint` | unaffected \u2014
          this change adds no YAML files |\n\n## Out of scope (per the issue)\n\n`handle_file`
          orchestration, the file-writing part of `_write_autoconf_files`\n(`tmp_path`),
          and anything requiring a `pynetbox.api` client,\n`ansible_runner.run`, real
          filesystem I/O, or `git.Repo` \u2014 all later tiers.\n\n---\n\n_Drafted
          by [planwerk-review](https://github.com/planwerk/planwerk-review) with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/251
        commit_id: fbc7c3e97b6f8778e16f11183de318e99493113b
        patchset: fbc7c3e97b6f8778e16f11183de318e99493113b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
        topic: null
      buildset: b0e5ae8c25ab4028b6d1225d6da1aef7
      buildset_refs:
      - branch: main
        change: '251'
        change_message: "Unit tests: Tier 2 \u2014 task / playbook builders in main.py\n\n##
          Summary\n\nTier 2 of the #232 unit-test rollout: lock down the four **settings-aware\ntask
          / playbook builders** in `netbox_manager/main.py` that turn YAML\nresource
          definitions into Ansible task dicts and rendered playbook strings.\nThe
          tests are pure data-in/data-out \u2014 no live NetBox, no `ansible_runner`,\nno
          filesystem, no `pynetbox` mocks. They use the existing conftest dynaconf\nenv
          stub for the baseline and per-test `monkeypatch.setattr(main.settings,\n...,
          raising=False)` for the two branch-specific settings (trailing-slash\n`URL`,
          `IGNORE_SSL_ERRORS=True`).\n\nTest-only change: **no production code is
          touched**, no new package, and no\nnew `conftest.py` fixtures.\n\nCloses
          #249\n\n## Change set (in commit order)\n\n1. **Add unit tests for NetBox
          and URI task builders**\n   \u2014 `tests/unit/netbox_manager/test_task_builders.py`
          (groups 1 & 2)\n   - `TestCreateNetboxTask` \u2014 `state` default + caller-dict
          mutation, the\n     `netbox.netbox.netbox_<key>` module envelope, `validate_certs`
          in both\n     polarities, settings read at call time, token stringification,
          the\n     task-name double-space collapse, `update_vc_child` placement for\n
          \    `device_interface` vs. other keys, conditional `register` /\n     `ignore_errors`.\n
          \  - `TestCreateUriTask` \u2014 `/api/` & `api/` prefix stripping, remaining\n
          \    leading-slash removal, the trailing-slash URL guard, empty-path root,\n
          \    method default/passthrough, JSON headers, `validate_certs` polarities,\n
          \    empty vs. non-empty body handling, the fixed `status_code`, conditional\n
          \    `register` / `ignore_errors`.\n\n2. **Add unit tests for playbook rendering
          and YAML dumper**\n   \u2014 `tests/unit/netbox_manager/test_playbook_rendering.py`
          (groups 3 & 4)\n   - `TestCreateAnsiblePlaybook` \u2014 single-play envelope
          with `basename` and\n     `connection: local` / `hosts: localhost` / `gather_facts:
          false`, a\n     vars/tasks round-trip through `yaml.safe_load` (verifying
          the Jinja\n     `indent(4)` filter does not corrupt nesting), and the empty-vars
          /\n     empty-tasks / both-empty edge shapes.\n   - `TestProperIndentDumper`
          \u2014 nested sequences indented under their key\n     (asserted on the
          dumped string, contrasted with the indentless stock\n     dumper) and a
          round-trip with the exact `_write_autoconf_files` dump\n     signature (`Dumper=ProperIndentDumper,
          default_flow_style=False,\n     sort_keys=False, explicit_start=True`).\n\nEvery
          builder that mutates its `value` argument (`create_netbox_task` pops\n`state`
          / `update_vc_child`; the round-trip test reuses `create_netbox_task`)\nis
          fed a fresh dict literal per call.\n\n## Acceptance Criteria coverage\n\nAll
          four function groups (1\u20134) and their listed branches are covered. The\ntwo
          settings-branch criteria (trailing-slash URL, `IGNORE_SSL_ERRORS=True`)\nuse
          `monkeypatch.setattr(main.settings, ..., raising=False)` as required.\n\n##
          Definition of Done notes\n\n- `pytest tests/unit` is green locally (152
          passed, +36 new).\n- `flake8` and `black --check` are green for the new
          files.\n- The DoD item *\"document new shared fixtures\"* is satisfied vacuously:
          this\n  tier needs **no** new `conftest.py` fixtures \u2014 the existing
          env stub plus\n  per-test `monkeypatch` overrides suffice \u2014 so there
          is nothing new to\n  document for later tiers.\n\n## Local verification\n\n|
          Command | Result |\n| --- | --- |\n| `.venv/bin/python -m pytest tests/unit`
          | 152 passed |\n| `.venv/bin/python -m flake8 <new files>` | clean |\n|
          `.venv/bin/python -m black --check <new files>` | clean |\n| `.venv/bin/python
          -m mypy netbox_manager/` | unchanged (7 pre-existing `import-untyped` errors
          from missing local stubs; resolved in CI) |\n| `yamllint` | unaffected \u2014
          this change adds no YAML files |\n\n## Out of scope (per the issue)\n\n`handle_file`
          orchestration, the file-writing part of `_write_autoconf_files`\n(`tmp_path`),
          and anything requiring a `pynetbox.api` client,\n`ansible_runner.run`, real
          filesystem I/O, or `git.Repo` \u2014 all later tiers.\n\n---\n\n_Drafted
          by [planwerk-review](https://github.com/planwerk/planwerk-review) with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/251
        commit_id: fbc7c3e97b6f8778e16f11183de318e99493113b
        patchset: fbc7c3e97b6f8778e16f11183de318e99493113b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
        topic: null
      change: '251'
      change_message: "Unit tests: Tier 2 \u2014 task / playbook builders in main.py\n\n##
        Summary\n\nTier 2 of the #232 unit-test rollout: lock down the four **settings-aware\ntask
        / playbook builders** in `netbox_manager/main.py` that turn YAML\nresource
        definitions into Ansible task dicts and rendered playbook strings.\nThe tests
        are pure data-in/data-out \u2014 no live NetBox, no `ansible_runner`,\nno
        filesystem, no `pynetbox` mocks. They use the existing conftest dynaconf\nenv
        stub for the baseline and per-test `monkeypatch.setattr(main.settings,\n...,
        raising=False)` for the two branch-specific settings (trailing-slash\n`URL`,
        `IGNORE_SSL_ERRORS=True`).\n\nTest-only change: **no production code is touched**,
        no new package, and no\nnew `conftest.py` fixtures.\n\nCloses #249\n\n## Change
        set (in commit order)\n\n1. **Add unit tests for NetBox and URI task builders**\n
        \  \u2014 `tests/unit/netbox_manager/test_task_builders.py` (groups 1 & 2)\n
        \  - `TestCreateNetboxTask` \u2014 `state` default + caller-dict mutation,
        the\n     `netbox.netbox.netbox_<key>` module envelope, `validate_certs` in
        both\n     polarities, settings read at call time, token stringification,
        the\n     task-name double-space collapse, `update_vc_child` placement for\n
        \    `device_interface` vs. other keys, conditional `register` /\n     `ignore_errors`.\n
        \  - `TestCreateUriTask` \u2014 `/api/` & `api/` prefix stripping, remaining\n
        \    leading-slash removal, the trailing-slash URL guard, empty-path root,\n
        \    method default/passthrough, JSON headers, `validate_certs` polarities,\n
        \    empty vs. non-empty body handling, the fixed `status_code`, conditional\n
        \    `register` / `ignore_errors`.\n\n2. **Add unit tests for playbook rendering
        and YAML dumper**\n   \u2014 `tests/unit/netbox_manager/test_playbook_rendering.py`
        (groups 3 & 4)\n   - `TestCreateAnsiblePlaybook` \u2014 single-play envelope
        with `basename` and\n     `connection: local` / `hosts: localhost` / `gather_facts:
        false`, a\n     vars/tasks round-trip through `yaml.safe_load` (verifying
        the Jinja\n     `indent(4)` filter does not corrupt nesting), and the empty-vars
        /\n     empty-tasks / both-empty edge shapes.\n   - `TestProperIndentDumper`
        \u2014 nested sequences indented under their key\n     (asserted on the dumped
        string, contrasted with the indentless stock\n     dumper) and a round-trip
        with the exact `_write_autoconf_files` dump\n     signature (`Dumper=ProperIndentDumper,
        default_flow_style=False,\n     sort_keys=False, explicit_start=True`).\n\nEvery
        builder that mutates its `value` argument (`create_netbox_task` pops\n`state`
        / `update_vc_child`; the round-trip test reuses `create_netbox_task`)\nis
        fed a fresh dict literal per call.\n\n## Acceptance Criteria coverage\n\nAll
        four function groups (1\u20134) and their listed branches are covered. The\ntwo
        settings-branch criteria (trailing-slash URL, `IGNORE_SSL_ERRORS=True`)\nuse
        `monkeypatch.setattr(main.settings, ..., raising=False)` as required.\n\n##
        Definition of Done notes\n\n- `pytest tests/unit` is green locally (152 passed,
        +36 new).\n- `flake8` and `black --check` are green for the new files.\n-
        The DoD item *\"document new shared fixtures\"* is satisfied vacuously: this\n
        \ tier needs **no** new `conftest.py` fixtures \u2014 the existing env stub
        plus\n  per-test `monkeypatch` overrides suffice \u2014 so there is nothing
        new to\n  document for later tiers.\n\n## Local verification\n\n| Command
        | Result |\n| --- | --- |\n| `.venv/bin/python -m pytest tests/unit` | 152
        passed |\n| `.venv/bin/python -m flake8 <new files>` | clean |\n| `.venv/bin/python
        -m black --check <new files>` | clean |\n| `.venv/bin/python -m mypy netbox_manager/`
        | unchanged (7 pre-existing `import-untyped` errors from missing local stubs;
        resolved in CI) |\n| `yamllint` | unaffected \u2014 this change adds no YAML
        files |\n\n## Out of scope (per the issue)\n\n`handle_file` orchestration,
        the file-writing part of `_write_autoconf_files`\n(`tmp_path`), and anything
        requiring a `pynetbox.api` client,\n`ansible_runner.run`, real filesystem
        I/O, or `git.Repo` \u2014 all later tiers.\n\n---\n\n_Drafted by [planwerk-review](https://github.com/planwerk/planwerk-review)
        with Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/netbox-manager/pull/251
      child_jobs: []
      commit_id: fbc7c3e97b6f8778e16f11183de318e99493113b
      event_id: b50eeff0-69b8-11f1-968f-28098eca537b
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e5fefd9ff9db45f3bb0255258b22eb20/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e5fefd9ff9db45f3bb0255258b22eb20/work/logs
        result_data_file: /var/lib/zuul/builds/e5fefd9ff9db45f3bb0255258b22eb20/work/results.json
        src_root: /var/lib/zuul/builds/e5fefd9ff9db45f3bb0255258b22eb20/work/src
        work_root: /var/lib/zuul/builds/e5fefd9ff9db45f3bb0255258b22eb20/work
      include_vars: []
      items:
      - branch: main
        change: '251'
        change_message: "Unit tests: Tier 2 \u2014 task / playbook builders in main.py\n\n##
          Summary\n\nTier 2 of the #232 unit-test rollout: lock down the four **settings-aware\ntask
          / playbook builders** in `netbox_manager/main.py` that turn YAML\nresource
          definitions into Ansible task dicts and rendered playbook strings.\nThe
          tests are pure data-in/data-out \u2014 no live NetBox, no `ansible_runner`,\nno
          filesystem, no `pynetbox` mocks. They use the existing conftest dynaconf\nenv
          stub for the baseline and per-test `monkeypatch.setattr(main.settings,\n...,
          raising=False)` for the two branch-specific settings (trailing-slash\n`URL`,
          `IGNORE_SSL_ERRORS=True`).\n\nTest-only change: **no production code is
          touched**, no new package, and no\nnew `conftest.py` fixtures.\n\nCloses
          #249\n\n## Change set (in commit order)\n\n1. **Add unit tests for NetBox
          and URI task builders**\n   \u2014 `tests/unit/netbox_manager/test_task_builders.py`
          (groups 1 & 2)\n   - `TestCreateNetboxTask` \u2014 `state` default + caller-dict
          mutation, the\n     `netbox.netbox.netbox_<key>` module envelope, `validate_certs`
          in both\n     polarities, settings read at call time, token stringification,
          the\n     task-name double-space collapse, `update_vc_child` placement for\n
          \    `device_interface` vs. other keys, conditional `register` /\n     `ignore_errors`.\n
          \  - `TestCreateUriTask` \u2014 `/api/` & `api/` prefix stripping, remaining\n
          \    leading-slash removal, the trailing-slash URL guard, empty-path root,\n
          \    method default/passthrough, JSON headers, `validate_certs` polarities,\n
          \    empty vs. non-empty body handling, the fixed `status_code`, conditional\n
          \    `register` / `ignore_errors`.\n\n2. **Add unit tests for playbook rendering
          and YAML dumper**\n   \u2014 `tests/unit/netbox_manager/test_playbook_rendering.py`
          (groups 3 & 4)\n   - `TestCreateAnsiblePlaybook` \u2014 single-play envelope
          with `basename` and\n     `connection: local` / `hosts: localhost` / `gather_facts:
          false`, a\n     vars/tasks round-trip through `yaml.safe_load` (verifying
          the Jinja\n     `indent(4)` filter does not corrupt nesting), and the empty-vars
          /\n     empty-tasks / both-empty edge shapes.\n   - `TestProperIndentDumper`
          \u2014 nested sequences indented under their key\n     (asserted on the
          dumped string, contrasted with the indentless stock\n     dumper) and a
          round-trip with the exact `_write_autoconf_files` dump\n     signature (`Dumper=ProperIndentDumper,
          default_flow_style=False,\n     sort_keys=False, explicit_start=True`).\n\nEvery
          builder that mutates its `value` argument (`create_netbox_task` pops\n`state`
          / `update_vc_child`; the round-trip test reuses `create_netbox_task`)\nis
          fed a fresh dict literal per call.\n\n## Acceptance Criteria coverage\n\nAll
          four function groups (1\u20134) and their listed branches are covered. The\ntwo
          settings-branch criteria (trailing-slash URL, `IGNORE_SSL_ERRORS=True`)\nuse
          `monkeypatch.setattr(main.settings, ..., raising=False)` as required.\n\n##
          Definition of Done notes\n\n- `pytest tests/unit` is green locally (152
          passed, +36 new).\n- `flake8` and `black --check` are green for the new
          files.\n- The DoD item *\"document new shared fixtures\"* is satisfied vacuously:
          this\n  tier needs **no** new `conftest.py` fixtures \u2014 the existing
          env stub plus\n  per-test `monkeypatch` overrides suffice \u2014 so there
          is nothing new to\n  document for later tiers.\n\n## Local verification\n\n|
          Command | Result |\n| --- | --- |\n| `.venv/bin/python -m pytest tests/unit`
          | 152 passed |\n| `.venv/bin/python -m flake8 <new files>` | clean |\n|
          `.venv/bin/python -m black --check <new files>` | clean |\n| `.venv/bin/python
          -m mypy netbox_manager/` | unchanged (7 pre-existing `import-untyped` errors
          from missing local stubs; resolved in CI) |\n| `yamllint` | unaffected \u2014
          this change adds no YAML files |\n\n## Out of scope (per the issue)\n\n`handle_file`
          orchestration, the file-writing part of `_write_autoconf_files`\n(`tmp_path`),
          and anything requiring a `pynetbox.api` client,\n`ansible_runner.run`, real
          filesystem I/O, or `git.Repo` \u2014 all later tiers.\n\n---\n\n_Drafted
          by [planwerk-review](https://github.com/planwerk/planwerk-review) with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/251
        commit_id: fbc7c3e97b6f8778e16f11183de318e99493113b
        patchset: fbc7c3e97b6f8778e16f11183de318e99493113b
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          name: osism/netbox-manager
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
        topic: null
      job: python-black
      jobtags: []
      max_attempts: 3
      message: VW5pdCB0ZXN0czogVGllciAyIOKAlCB0YXNrIC8gcGxheWJvb2sgYnVpbGRlcnMgaW4gbWFpbi5weQoKIyMgU3VtbWFyeQoKVGllciAyIG9mIHRoZSAjMjMyIHVuaXQtdGVzdCByb2xsb3V0OiBsb2NrIGRvd24gdGhlIGZvdXIgKipzZXR0aW5ncy1hd2FyZQp0YXNrIC8gcGxheWJvb2sgYnVpbGRlcnMqKiBpbiBgbmV0Ym94X21hbmFnZXIvbWFpbi5weWAgdGhhdCB0dXJuIFlBTUwKcmVzb3VyY2UgZGVmaW5pdGlvbnMgaW50byBBbnNpYmxlIHRhc2sgZGljdHMgYW5kIHJlbmRlcmVkIHBsYXlib29rIHN0cmluZ3MuClRoZSB0ZXN0cyBhcmUgcHVyZSBkYXRhLWluL2RhdGEtb3V0IOKAlCBubyBsaXZlIE5ldEJveCwgbm8gYGFuc2libGVfcnVubmVyYCwKbm8gZmlsZXN5c3RlbSwgbm8gYHB5bmV0Ym94YCBtb2Nrcy4gVGhleSB1c2UgdGhlIGV4aXN0aW5nIGNvbmZ0ZXN0IGR5bmFjb25mCmVudiBzdHViIGZvciB0aGUgYmFzZWxpbmUgYW5kIHBlci10ZXN0IGBtb25rZXlwYXRjaC5zZXRhdHRyKG1haW4uc2V0dGluZ3MsCi4uLiwgcmFpc2luZz1GYWxzZSlgIGZvciB0aGUgdHdvIGJyYW5jaC1zcGVjaWZpYyBzZXR0aW5ncyAodHJhaWxpbmctc2xhc2gKYFVSTGAsIGBJR05PUkVfU1NMX0VSUk9SUz1UcnVlYCkuCgpUZXN0LW9ubHkgY2hhbmdlOiAqKm5vIHByb2R1Y3Rpb24gY29kZSBpcyB0b3VjaGVkKiosIG5vIG5ldyBwYWNrYWdlLCBhbmQgbm8KbmV3IGBjb25mdGVzdC5weWAgZml4dHVyZXMuCgpDbG9zZXMgIzI0OQoKIyMgQ2hhbmdlIHNldCAoaW4gY29tbWl0IG9yZGVyKQoKMS4gKipBZGQgdW5pdCB0ZXN0cyBmb3IgTmV0Qm94IGFuZCBVUkkgdGFzayBidWlsZGVycyoqCiAgIOKAlCBgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X3Rhc2tfYnVpbGRlcnMucHlgIChncm91cHMgMSAmIDIpCiAgIC0gYFRlc3RDcmVhdGVOZXRib3hUYXNrYCDigJQgYHN0YXRlYCBkZWZhdWx0ICsgY2FsbGVyLWRpY3QgbXV0YXRpb24sIHRoZQogICAgIGBuZXRib3gubmV0Ym94Lm5ldGJveF88a2V5PmAgbW9kdWxlIGVudmVsb3BlLCBgdmFsaWRhdGVfY2VydHNgIGluIGJvdGgKICAgICBwb2xhcml0aWVzLCBzZXR0aW5ncyByZWFkIGF0IGNhbGwgdGltZSwgdG9rZW4gc3RyaW5naWZpY2F0aW9uLCB0aGUKICAgICB0YXNrLW5hbWUgZG91YmxlLXNwYWNlIGNvbGxhcHNlLCBgdXBkYXRlX3ZjX2NoaWxkYCBwbGFjZW1lbnQgZm9yCiAgICAgYGRldmljZV9pbnRlcmZhY2VgIHZzLiBvdGhlciBrZXlzLCBjb25kaXRpb25hbCBgcmVnaXN0ZXJgIC8KICAgICBgaWdub3JlX2Vycm9yc2AuCiAgIC0gYFRlc3RDcmVhdGVVcmlUYXNrYCDigJQgYC9hcGkvYCAmIGBhcGkvYCBwcmVmaXggc3RyaXBwaW5nLCByZW1haW5pbmcKICAgICBsZWFkaW5nLXNsYXNoIHJlbW92YWwsIHRoZSB0cmFpbGluZy1zbGFzaCBVUkwgZ3VhcmQsIGVtcHR5LXBhdGggcm9vdCwKICAgICBtZXRob2QgZGVmYXVsdC9wYXNzdGhyb3VnaCwgSlNPTiBoZWFkZXJzLCBgdmFsaWRhdGVfY2VydHNgIHBvbGFyaXRpZXMsCiAgICAgZW1wdHkgdnMuIG5vbi1lbXB0eSBib2R5IGhhbmRsaW5nLCB0aGUgZml4ZWQgYHN0YXR1c19jb2RlYCwgY29uZGl0aW9uYWwKICAgICBgcmVnaXN0ZXJgIC8gYGlnbm9yZV9lcnJvcnNgLgoKMi4gKipBZGQgdW5pdCB0ZXN0cyBmb3IgcGxheWJvb2sgcmVuZGVyaW5nIGFuZCBZQU1MIGR1bXBlcioqCiAgIOKAlCBgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X3BsYXlib29rX3JlbmRlcmluZy5weWAgKGdyb3VwcyAzICYgNCkKICAgLSBgVGVzdENyZWF0ZUFuc2libGVQbGF5Ym9va2Ag4oCUIHNpbmdsZS1wbGF5IGVudmVsb3BlIHdpdGggYGJhc2VuYW1lYCBhbmQKICAgICBgY29ubmVjdGlvbjogbG9jYWxgIC8gYGhvc3RzOiBsb2NhbGhvc3RgIC8gYGdhdGhlcl9mYWN0czogZmFsc2VgLCBhCiAgICAgdmFycy90YXNrcyByb3VuZC10cmlwIHRocm91Z2ggYHlhbWwuc2FmZV9sb2FkYCAodmVyaWZ5aW5nIHRoZSBKaW5qYQogICAgIGBpbmRlbnQoNClgIGZpbHRlciBkb2VzIG5vdCBjb3JydXB0IG5lc3RpbmcpLCBhbmQgdGhlIGVtcHR5LXZhcnMgLwogICAgIGVtcHR5LXRhc2tzIC8gYm90aC1lbXB0eSBlZGdlIHNoYXBlcy4KICAgLSBgVGVzdFByb3BlckluZGVudER1bXBlcmAg4oCUIG5lc3RlZCBzZXF1ZW5jZXMgaW5kZW50ZWQgdW5kZXIgdGhlaXIga2V5CiAgICAgKGFzc2VydGVkIG9uIHRoZSBkdW1wZWQgc3RyaW5nLCBjb250cmFzdGVkIHdpdGggdGhlIGluZGVudGxlc3Mgc3RvY2sKICAgICBkdW1wZXIpIGFuZCBhIHJvdW5kLXRyaXAgd2l0aCB0aGUgZXhhY3QgYF93cml0ZV9hdXRvY29uZl9maWxlc2AgZHVtcAogICAgIHNpZ25hdHVyZSAoYER1bXBlcj1Qcm9wZXJJbmRlbnREdW1wZXIsIGRlZmF1bHRfZmxvd19zdHlsZT1GYWxzZSwKICAgICBzb3J0X2tleXM9RmFsc2UsIGV4cGxpY2l0X3N0YXJ0PVRydWVgKS4KCkV2ZXJ5IGJ1aWxkZXIgdGhhdCBtdXRhdGVzIGl0cyBgdmFsdWVgIGFyZ3VtZW50IChgY3JlYXRlX25ldGJveF90YXNrYCBwb3BzCmBzdGF0ZWAgLyBgdXBkYXRlX3ZjX2NoaWxkYDsgdGhlIHJvdW5kLXRyaXAgdGVzdCByZXVzZXMgYGNyZWF0ZV9uZXRib3hfdGFza2ApCmlzIGZlZCBhIGZyZXNoIGRpY3QgbGl0ZXJhbCBwZXIgY2FsbC4KCiMjIEFjY2VwdGFuY2UgQ3JpdGVyaWEgY292ZXJhZ2UKCkFsbCBmb3VyIGZ1bmN0aW9uIGdyb3VwcyAoMeKAkzQpIGFuZCB0aGVpciBsaXN0ZWQgYnJhbmNoZXMgYXJlIGNvdmVyZWQuIFRoZQp0d28gc2V0dGluZ3MtYnJhbmNoIGNyaXRlcmlhICh0cmFpbGluZy1zbGFzaCBVUkwsIGBJR05PUkVfU1NMX0VSUk9SUz1UcnVlYCkKdXNlIGBtb25rZXlwYXRjaC5zZXRhdHRyKG1haW4uc2V0dGluZ3MsIC4uLiwgcmFpc2luZz1GYWxzZSlgIGFzIHJlcXVpcmVkLgoKIyMgRGVmaW5pdGlvbiBvZiBEb25lIG5vdGVzCgotIGBweXRlc3QgdGVzdHMvdW5pdGAgaXMgZ3JlZW4gbG9jYWxseSAoMTUyIHBhc3NlZCwgKzM2IG5ldykuCi0gYGZsYWtlOGAgYW5kIGBibGFjayAtLWNoZWNrYCBhcmUgZ3JlZW4gZm9yIHRoZSBuZXcgZmlsZXMuCi0gVGhlIERvRCBpdGVtICoiZG9jdW1lbnQgbmV3IHNoYXJlZCBmaXh0dXJlcyIqIGlzIHNhdGlzZmllZCB2YWN1b3VzbHk6IHRoaXMKICB0aWVyIG5lZWRzICoqbm8qKiBuZXcgYGNvbmZ0ZXN0LnB5YCBmaXh0dXJlcyDigJQgdGhlIGV4aXN0aW5nIGVudiBzdHViIHBsdXMKICBwZXItdGVzdCBgbW9ua2V5cGF0Y2hgIG92ZXJyaWRlcyBzdWZmaWNlIOKAlCBzbyB0aGVyZSBpcyBub3RoaW5nIG5ldyB0bwogIGRvY3VtZW50IGZvciBsYXRlciB0aWVycy4KCiMjIExvY2FsIHZlcmlmaWNhdGlvbgoKfCBDb21tYW5kIHwgUmVzdWx0IHwKfCAtLS0gfCAtLS0gfAp8IGAudmVudi9iaW4vcHl0aG9uIC1tIHB5dGVzdCB0ZXN0cy91bml0YCB8IDE1MiBwYXNzZWQgfAp8IGAudmVudi9iaW4vcHl0aG9uIC1tIGZsYWtlOCA8bmV3IGZpbGVzPmAgfCBjbGVhbiB8CnwgYC52ZW52L2Jpbi9weXRob24gLW0gYmxhY2sgLS1jaGVjayA8bmV3IGZpbGVzPmAgfCBjbGVhbiB8CnwgYC52ZW52L2Jpbi9weXRob24gLW0gbXlweSBuZXRib3hfbWFuYWdlci9gIHwgdW5jaGFuZ2VkICg3IHByZS1leGlzdGluZyBgaW1wb3J0LXVudHlwZWRgIGVycm9ycyBmcm9tIG1pc3NpbmcgbG9jYWwgc3R1YnM7IHJlc29sdmVkIGluIENJKSB8CnwgYHlhbWxsaW50YCB8IHVuYWZmZWN0ZWQg4oCUIHRoaXMgY2hhbmdlIGFkZHMgbm8gWUFNTCBmaWxlcyB8CgojIyBPdXQgb2Ygc2NvcGUgKHBlciB0aGUgaXNzdWUpCgpgaGFuZGxlX2ZpbGVgIG9yY2hlc3RyYXRpb24sIHRoZSBmaWxlLXdyaXRpbmcgcGFydCBvZiBgX3dyaXRlX2F1dG9jb25mX2ZpbGVzYAooYHRtcF9wYXRoYCksIGFuZCBhbnl0aGluZyByZXF1aXJpbmcgYSBgcHluZXRib3guYXBpYCBjbGllbnQsCmBhbnNpYmxlX3J1bm5lci5ydW5gLCByZWFsIGZpbGVzeXN0ZW0gSS9PLCBvciBgZ2l0LlJlcG9gIOKAlCBhbGwgbGF0ZXIgdGllcnMuCgotLS0KCl9EcmFmdGVkIGJ5IFtwbGFud2Vyay1yZXZpZXddKGh0dHBzOi8vZ2l0aHViLmNvbS9wbGFud2Vyay9wbGFud2Vyay1yZXZpZXcpIHdpdGggQ2xhdWRlOmNsYXVkZS1vcHVzLTQtOF8K
      patchset: fbc7c3e97b6f8778e16f11183de318e99493113b
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          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/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 3d5c7b5973754999f7005857a00ce9168944f0f1
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/python-black/run.yml
          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/netbox-manager
        name: osism/netbox-manager
        short_name: netbox-manager
        src_dir: src/github.com/osism/netbox-manager
      projects:
        github.com/osism/netbox-manager:
          canonical_hostname: github.com
          canonical_name: github.com/osism/netbox-manager
          checkout: main
          checkout_description: zuul branch
          commit: 40f7c3ebe8f6712c46091691971504f583adfeae
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/251/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
