all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fef4:cb9c
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: bea41dba-b3e8-4d30-8de1-a5b95b04a5c6
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fef4:cb9c
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.135
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.2
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fef4:cb9c
        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 mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#42>'
      - '<Job mypy explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 5bb23b6871944a80bee3d177d5c4432f
      build_refs:
      - branch: main
        change: '273'
        change_message: "Unit tests: Tier 7 \u2014 validation helpers in netbox_manager/main.py\n\nCloses
          #255\n\n## Tier 7 \u2014 validation helpers in `netbox_manager/main.py`\n\nSeventh
          test-coverage tier for #232. Adds branch-level unit tests for the two **read-only
          NetBox validation helpers** in `netbox_manager/main.py` \u2014 `validate_ip_addresses_have_prefixes`
          and `validate_vrf_consistency`. Both take a `pynetbox.api` client, query
          the `ipam` / `dcim` endpoints, and return `(validation_passed, findings)`;
          neither writes back to NetBox. The tests drive them with flat `SimpleNamespace`
          fakes and assert on the returned `(bool, list)` tuples and finding-dict
          shapes \u2014 never on log output. **No production code changes.**\n\n##
          Change set (commit order)\n\n### `b6b04c2` \u2014 Add shared fixtures for
          the validation-helper tests\nAdds two attribute-bag factories to `tests/conftest.py`:\n-
          `make_vrf` \u2014 a `SimpleNamespace` exposing only `id` / `name` (the fields
          the validators read off a VRF: `id` drives the `vrf_id` prefix filter and
          VRF-equality comparison, `name` fills the finding fields).\n- `make_ip_address`
          \u2014 a `SimpleNamespace` exposing `address` / `vrf` / `assigned_object`,
          the attributes read off a pynetbox IP record.\n\nAlso sets `.message` on
          the existing shared `make_request_error` factory. The `main.py` validators
          log `f\"... {e}\"` before re-raising, and `RequestError.__str__` returns
          `self.message`, which the fixture previously left unset (only `.error`,
          which `dtl.py` reads, was set). `dtl.py` is unaffected. Both new factories
          are documented for reuse by later #232 tiers.\n\n### `b5d454a` \u2014 Add
          unit tests for IP-prefix validation helper\n`tests/unit/netbox_manager/test_validate_prefixes.py`
          covers every branch of `validate_ip_addresses_have_prefixes` (Group 1 of
          #255): matching-prefix pass, invalid-IP-format orphan that skips the prefix
          query, no-matching-prefix orphan, the VRF-scoped vs global (`vrf_id=\"null\"`)
          query branches, device/interface extraction (assigned vs `\"Unassigned\"`),
          and `RequestError` propagation.\n\n### `3b92a28` \u2014 Add unit tests for
          VRF consistency validation helper\n`tests/unit/netbox_manager/test_validate_vrf.py`
          covers every branch of `validate_vrf_consistency` (Group 2 of #255): no-assigned-object
          skip, VM/other-object skip (both sides of the `device` guard), matching-VRF
          pass, recorded VRF mismatch (including the one-side-`None` case), the swallowed
          interface-lookup error and falsy interface, and `RequestError` propagation.\n\n##
          Notes on divergence from the issue\n\n- The issue cites source lines `main.py:2949`
          / `main.py:3060`; the test docstrings anchor to nearby lines (`main.py:2899`).
          This is line-number drift only \u2014 the helpers and branches covered match
          the issue's checklist exactly.\n- The `.message` addition to `make_request_error`
          is a test-fixture change (not called out in the issue's fixture list) needed
          so the validators' `logger.error(f\"... {e}\")` path stringifies the error
          cleanly during the propagation tests. It leaves `dtl.py` behaviour untouched.\n\n##
          Verification\n`pytest tests/unit`, `flake8`, and `mypy` are expected green
          per the tier's Definition of Done; CI (`netbox-manager-unit-tests`) runs
          on this PR.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/273
        commit_id: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        patchset: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        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: 087f706df8ce450d9a3fab5b19e750b7
      buildset_refs:
      - branch: main
        change: '273'
        change_message: "Unit tests: Tier 7 \u2014 validation helpers in netbox_manager/main.py\n\nCloses
          #255\n\n## Tier 7 \u2014 validation helpers in `netbox_manager/main.py`\n\nSeventh
          test-coverage tier for #232. Adds branch-level unit tests for the two **read-only
          NetBox validation helpers** in `netbox_manager/main.py` \u2014 `validate_ip_addresses_have_prefixes`
          and `validate_vrf_consistency`. Both take a `pynetbox.api` client, query
          the `ipam` / `dcim` endpoints, and return `(validation_passed, findings)`;
          neither writes back to NetBox. The tests drive them with flat `SimpleNamespace`
          fakes and assert on the returned `(bool, list)` tuples and finding-dict
          shapes \u2014 never on log output. **No production code changes.**\n\n##
          Change set (commit order)\n\n### `b6b04c2` \u2014 Add shared fixtures for
          the validation-helper tests\nAdds two attribute-bag factories to `tests/conftest.py`:\n-
          `make_vrf` \u2014 a `SimpleNamespace` exposing only `id` / `name` (the fields
          the validators read off a VRF: `id` drives the `vrf_id` prefix filter and
          VRF-equality comparison, `name` fills the finding fields).\n- `make_ip_address`
          \u2014 a `SimpleNamespace` exposing `address` / `vrf` / `assigned_object`,
          the attributes read off a pynetbox IP record.\n\nAlso sets `.message` on
          the existing shared `make_request_error` factory. The `main.py` validators
          log `f\"... {e}\"` before re-raising, and `RequestError.__str__` returns
          `self.message`, which the fixture previously left unset (only `.error`,
          which `dtl.py` reads, was set). `dtl.py` is unaffected. Both new factories
          are documented for reuse by later #232 tiers.\n\n### `b5d454a` \u2014 Add
          unit tests for IP-prefix validation helper\n`tests/unit/netbox_manager/test_validate_prefixes.py`
          covers every branch of `validate_ip_addresses_have_prefixes` (Group 1 of
          #255): matching-prefix pass, invalid-IP-format orphan that skips the prefix
          query, no-matching-prefix orphan, the VRF-scoped vs global (`vrf_id=\"null\"`)
          query branches, device/interface extraction (assigned vs `\"Unassigned\"`),
          and `RequestError` propagation.\n\n### `3b92a28` \u2014 Add unit tests for
          VRF consistency validation helper\n`tests/unit/netbox_manager/test_validate_vrf.py`
          covers every branch of `validate_vrf_consistency` (Group 2 of #255): no-assigned-object
          skip, VM/other-object skip (both sides of the `device` guard), matching-VRF
          pass, recorded VRF mismatch (including the one-side-`None` case), the swallowed
          interface-lookup error and falsy interface, and `RequestError` propagation.\n\n##
          Notes on divergence from the issue\n\n- The issue cites source lines `main.py:2949`
          / `main.py:3060`; the test docstrings anchor to nearby lines (`main.py:2899`).
          This is line-number drift only \u2014 the helpers and branches covered match
          the issue's checklist exactly.\n- The `.message` addition to `make_request_error`
          is a test-fixture change (not called out in the issue's fixture list) needed
          so the validators' `logger.error(f\"... {e}\")` path stringifies the error
          cleanly during the propagation tests. It leaves `dtl.py` behaviour untouched.\n\n##
          Verification\n`pytest tests/unit`, `flake8`, and `mypy` are expected green
          per the tier's Definition of Done; CI (`netbox-manager-unit-tests`) runs
          on this PR.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/273
        commit_id: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        patchset: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        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: '273'
      change_message: "Unit tests: Tier 7 \u2014 validation helpers in netbox_manager/main.py\n\nCloses
        #255\n\n## Tier 7 \u2014 validation helpers in `netbox_manager/main.py`\n\nSeventh
        test-coverage tier for #232. Adds branch-level unit tests for the two **read-only
        NetBox validation helpers** in `netbox_manager/main.py` \u2014 `validate_ip_addresses_have_prefixes`
        and `validate_vrf_consistency`. Both take a `pynetbox.api` client, query the
        `ipam` / `dcim` endpoints, and return `(validation_passed, findings)`; neither
        writes back to NetBox. The tests drive them with flat `SimpleNamespace` fakes
        and assert on the returned `(bool, list)` tuples and finding-dict shapes \u2014
        never on log output. **No production code changes.**\n\n## Change set (commit
        order)\n\n### `b6b04c2` \u2014 Add shared fixtures for the validation-helper
        tests\nAdds two attribute-bag factories to `tests/conftest.py`:\n- `make_vrf`
        \u2014 a `SimpleNamespace` exposing only `id` / `name` (the fields the validators
        read off a VRF: `id` drives the `vrf_id` prefix filter and VRF-equality comparison,
        `name` fills the finding fields).\n- `make_ip_address` \u2014 a `SimpleNamespace`
        exposing `address` / `vrf` / `assigned_object`, the attributes read off a
        pynetbox IP record.\n\nAlso sets `.message` on the existing shared `make_request_error`
        factory. The `main.py` validators log `f\"... {e}\"` before re-raising, and
        `RequestError.__str__` returns `self.message`, which the fixture previously
        left unset (only `.error`, which `dtl.py` reads, was set). `dtl.py` is unaffected.
        Both new factories are documented for reuse by later #232 tiers.\n\n### `b5d454a`
        \u2014 Add unit tests for IP-prefix validation helper\n`tests/unit/netbox_manager/test_validate_prefixes.py`
        covers every branch of `validate_ip_addresses_have_prefixes` (Group 1 of #255):
        matching-prefix pass, invalid-IP-format orphan that skips the prefix query,
        no-matching-prefix orphan, the VRF-scoped vs global (`vrf_id=\"null\"`) query
        branches, device/interface extraction (assigned vs `\"Unassigned\"`), and
        `RequestError` propagation.\n\n### `3b92a28` \u2014 Add unit tests for VRF
        consistency validation helper\n`tests/unit/netbox_manager/test_validate_vrf.py`
        covers every branch of `validate_vrf_consistency` (Group 2 of #255): no-assigned-object
        skip, VM/other-object skip (both sides of the `device` guard), matching-VRF
        pass, recorded VRF mismatch (including the one-side-`None` case), the swallowed
        interface-lookup error and falsy interface, and `RequestError` propagation.\n\n##
        Notes on divergence from the issue\n\n- The issue cites source lines `main.py:2949`
        / `main.py:3060`; the test docstrings anchor to nearby lines (`main.py:2899`).
        This is line-number drift only \u2014 the helpers and branches covered match
        the issue's checklist exactly.\n- The `.message` addition to `make_request_error`
        is a test-fixture change (not called out in the issue's fixture list) needed
        so the validators' `logger.error(f\"... {e}\")` path stringifies the error
        cleanly during the propagation tests. It leaves `dtl.py` behaviour untouched.\n\n##
        Verification\n`pytest tests/unit`, `flake8`, and `mypy` are expected green
        per the tier's Definition of Done; CI (`netbox-manager-unit-tests`) runs on
        this PR.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
        6b3f3ea with Claude:claude-opus-4-8_\n"
      change_url: https://github.com/osism/netbox-manager/pull/273
      child_jobs: []
      commit_id: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
      event_id: dafbb2b0-770b-11f1-9e13-35a4dfcfe4b3
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/5bb23b6871944a80bee3d177d5c4432f/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/5bb23b6871944a80bee3d177d5c4432f/work/logs
        result_data_file: /var/lib/zuul/builds/5bb23b6871944a80bee3d177d5c4432f/work/results.json
        src_root: /var/lib/zuul/builds/5bb23b6871944a80bee3d177d5c4432f/work/src
        work_root: /var/lib/zuul/builds/5bb23b6871944a80bee3d177d5c4432f/work
      include_vars: []
      items:
      - branch: main
        change: '273'
        change_message: "Unit tests: Tier 7 \u2014 validation helpers in netbox_manager/main.py\n\nCloses
          #255\n\n## Tier 7 \u2014 validation helpers in `netbox_manager/main.py`\n\nSeventh
          test-coverage tier for #232. Adds branch-level unit tests for the two **read-only
          NetBox validation helpers** in `netbox_manager/main.py` \u2014 `validate_ip_addresses_have_prefixes`
          and `validate_vrf_consistency`. Both take a `pynetbox.api` client, query
          the `ipam` / `dcim` endpoints, and return `(validation_passed, findings)`;
          neither writes back to NetBox. The tests drive them with flat `SimpleNamespace`
          fakes and assert on the returned `(bool, list)` tuples and finding-dict
          shapes \u2014 never on log output. **No production code changes.**\n\n##
          Change set (commit order)\n\n### `b6b04c2` \u2014 Add shared fixtures for
          the validation-helper tests\nAdds two attribute-bag factories to `tests/conftest.py`:\n-
          `make_vrf` \u2014 a `SimpleNamespace` exposing only `id` / `name` (the fields
          the validators read off a VRF: `id` drives the `vrf_id` prefix filter and
          VRF-equality comparison, `name` fills the finding fields).\n- `make_ip_address`
          \u2014 a `SimpleNamespace` exposing `address` / `vrf` / `assigned_object`,
          the attributes read off a pynetbox IP record.\n\nAlso sets `.message` on
          the existing shared `make_request_error` factory. The `main.py` validators
          log `f\"... {e}\"` before re-raising, and `RequestError.__str__` returns
          `self.message`, which the fixture previously left unset (only `.error`,
          which `dtl.py` reads, was set). `dtl.py` is unaffected. Both new factories
          are documented for reuse by later #232 tiers.\n\n### `b5d454a` \u2014 Add
          unit tests for IP-prefix validation helper\n`tests/unit/netbox_manager/test_validate_prefixes.py`
          covers every branch of `validate_ip_addresses_have_prefixes` (Group 1 of
          #255): matching-prefix pass, invalid-IP-format orphan that skips the prefix
          query, no-matching-prefix orphan, the VRF-scoped vs global (`vrf_id=\"null\"`)
          query branches, device/interface extraction (assigned vs `\"Unassigned\"`),
          and `RequestError` propagation.\n\n### `3b92a28` \u2014 Add unit tests for
          VRF consistency validation helper\n`tests/unit/netbox_manager/test_validate_vrf.py`
          covers every branch of `validate_vrf_consistency` (Group 2 of #255): no-assigned-object
          skip, VM/other-object skip (both sides of the `device` guard), matching-VRF
          pass, recorded VRF mismatch (including the one-side-`None` case), the swallowed
          interface-lookup error and falsy interface, and `RequestError` propagation.\n\n##
          Notes on divergence from the issue\n\n- The issue cites source lines `main.py:2949`
          / `main.py:3060`; the test docstrings anchor to nearby lines (`main.py:2899`).
          This is line-number drift only \u2014 the helpers and branches covered match
          the issue's checklist exactly.\n- The `.message` addition to `make_request_error`
          is a test-fixture change (not called out in the issue's fixture list) needed
          so the validators' `logger.error(f\"... {e}\")` path stringifies the error
          cleanly during the propagation tests. It leaves `dtl.py` behaviour untouched.\n\n##
          Verification\n`pytest tests/unit`, `flake8`, and `mypy` are expected green
          per the tier's Definition of Done; CI (`netbox-manager-unit-tests`) runs
          on this PR.\n\n---\n\n_Implemented by [planwerk-agent](https://github.com/planwerk/planwerk-agent)
          6b3f3ea with Claude:claude-opus-4-8_\n"
        change_url: https://github.com/osism/netbox-manager/pull/273
        commit_id: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        patchset: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
        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: mypy
      jobtags: []
      max_attempts: 3
      message: VW5pdCB0ZXN0czogVGllciA3IOKAlCB2YWxpZGF0aW9uIGhlbHBlcnMgaW4gbmV0Ym94X21hbmFnZXIvbWFpbi5weQoKQ2xvc2VzICMyNTUKCiMjIFRpZXIgNyDigJQgdmFsaWRhdGlvbiBoZWxwZXJzIGluIGBuZXRib3hfbWFuYWdlci9tYWluLnB5YAoKU2V2ZW50aCB0ZXN0LWNvdmVyYWdlIHRpZXIgZm9yICMyMzIuIEFkZHMgYnJhbmNoLWxldmVsIHVuaXQgdGVzdHMgZm9yIHRoZSB0d28gKipyZWFkLW9ubHkgTmV0Qm94IHZhbGlkYXRpb24gaGVscGVycyoqIGluIGBuZXRib3hfbWFuYWdlci9tYWluLnB5YCDigJQgYHZhbGlkYXRlX2lwX2FkZHJlc3Nlc19oYXZlX3ByZWZpeGVzYCBhbmQgYHZhbGlkYXRlX3ZyZl9jb25zaXN0ZW5jeWAuIEJvdGggdGFrZSBhIGBweW5ldGJveC5hcGlgIGNsaWVudCwgcXVlcnkgdGhlIGBpcGFtYCAvIGBkY2ltYCBlbmRwb2ludHMsIGFuZCByZXR1cm4gYCh2YWxpZGF0aW9uX3Bhc3NlZCwgZmluZGluZ3MpYDsgbmVpdGhlciB3cml0ZXMgYmFjayB0byBOZXRCb3guIFRoZSB0ZXN0cyBkcml2ZSB0aGVtIHdpdGggZmxhdCBgU2ltcGxlTmFtZXNwYWNlYCBmYWtlcyBhbmQgYXNzZXJ0IG9uIHRoZSByZXR1cm5lZCBgKGJvb2wsIGxpc3QpYCB0dXBsZXMgYW5kIGZpbmRpbmctZGljdCBzaGFwZXMg4oCUIG5ldmVyIG9uIGxvZyBvdXRwdXQuICoqTm8gcHJvZHVjdGlvbiBjb2RlIGNoYW5nZXMuKioKCiMjIENoYW5nZSBzZXQgKGNvbW1pdCBvcmRlcikKCiMjIyBgYjZiMDRjMmAg4oCUIEFkZCBzaGFyZWQgZml4dHVyZXMgZm9yIHRoZSB2YWxpZGF0aW9uLWhlbHBlciB0ZXN0cwpBZGRzIHR3byBhdHRyaWJ1dGUtYmFnIGZhY3RvcmllcyB0byBgdGVzdHMvY29uZnRlc3QucHlgOgotIGBtYWtlX3ZyZmAg4oCUIGEgYFNpbXBsZU5hbWVzcGFjZWAgZXhwb3Npbmcgb25seSBgaWRgIC8gYG5hbWVgICh0aGUgZmllbGRzIHRoZSB2YWxpZGF0b3JzIHJlYWQgb2ZmIGEgVlJGOiBgaWRgIGRyaXZlcyB0aGUgYHZyZl9pZGAgcHJlZml4IGZpbHRlciBhbmQgVlJGLWVxdWFsaXR5IGNvbXBhcmlzb24sIGBuYW1lYCBmaWxscyB0aGUgZmluZGluZyBmaWVsZHMpLgotIGBtYWtlX2lwX2FkZHJlc3NgIOKAlCBhIGBTaW1wbGVOYW1lc3BhY2VgIGV4cG9zaW5nIGBhZGRyZXNzYCAvIGB2cmZgIC8gYGFzc2lnbmVkX29iamVjdGAsIHRoZSBhdHRyaWJ1dGVzIHJlYWQgb2ZmIGEgcHluZXRib3ggSVAgcmVjb3JkLgoKQWxzbyBzZXRzIGAubWVzc2FnZWAgb24gdGhlIGV4aXN0aW5nIHNoYXJlZCBgbWFrZV9yZXF1ZXN0X2Vycm9yYCBmYWN0b3J5LiBUaGUgYG1haW4ucHlgIHZhbGlkYXRvcnMgbG9nIGBmIi4uLiB7ZX0iYCBiZWZvcmUgcmUtcmFpc2luZywgYW5kIGBSZXF1ZXN0RXJyb3IuX19zdHJfX2AgcmV0dXJucyBgc2VsZi5tZXNzYWdlYCwgd2hpY2ggdGhlIGZpeHR1cmUgcHJldmlvdXNseSBsZWZ0IHVuc2V0IChvbmx5IGAuZXJyb3JgLCB3aGljaCBgZHRsLnB5YCByZWFkcywgd2FzIHNldCkuIGBkdGwucHlgIGlzIHVuYWZmZWN0ZWQuIEJvdGggbmV3IGZhY3RvcmllcyBhcmUgZG9jdW1lbnRlZCBmb3IgcmV1c2UgYnkgbGF0ZXIgIzIzMiB0aWVycy4KCiMjIyBgYjVkNDU0YWAg4oCUIEFkZCB1bml0IHRlc3RzIGZvciBJUC1wcmVmaXggdmFsaWRhdGlvbiBoZWxwZXIKYHRlc3RzL3VuaXQvbmV0Ym94X21hbmFnZXIvdGVzdF92YWxpZGF0ZV9wcmVmaXhlcy5weWAgY292ZXJzIGV2ZXJ5IGJyYW5jaCBvZiBgdmFsaWRhdGVfaXBfYWRkcmVzc2VzX2hhdmVfcHJlZml4ZXNgIChHcm91cCAxIG9mICMyNTUpOiBtYXRjaGluZy1wcmVmaXggcGFzcywgaW52YWxpZC1JUC1mb3JtYXQgb3JwaGFuIHRoYXQgc2tpcHMgdGhlIHByZWZpeCBxdWVyeSwgbm8tbWF0Y2hpbmctcHJlZml4IG9ycGhhbiwgdGhlIFZSRi1zY29wZWQgdnMgZ2xvYmFsIChgdnJmX2lkPSJudWxsImApIHF1ZXJ5IGJyYW5jaGVzLCBkZXZpY2UvaW50ZXJmYWNlIGV4dHJhY3Rpb24gKGFzc2lnbmVkIHZzIGAiVW5hc3NpZ25lZCJgKSwgYW5kIGBSZXF1ZXN0RXJyb3JgIHByb3BhZ2F0aW9uLgoKIyMjIGAzYjkyYTI4YCDigJQgQWRkIHVuaXQgdGVzdHMgZm9yIFZSRiBjb25zaXN0ZW5jeSB2YWxpZGF0aW9uIGhlbHBlcgpgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X3ZhbGlkYXRlX3ZyZi5weWAgY292ZXJzIGV2ZXJ5IGJyYW5jaCBvZiBgdmFsaWRhdGVfdnJmX2NvbnNpc3RlbmN5YCAoR3JvdXAgMiBvZiAjMjU1KTogbm8tYXNzaWduZWQtb2JqZWN0IHNraXAsIFZNL290aGVyLW9iamVjdCBza2lwIChib3RoIHNpZGVzIG9mIHRoZSBgZGV2aWNlYCBndWFyZCksIG1hdGNoaW5nLVZSRiBwYXNzLCByZWNvcmRlZCBWUkYgbWlzbWF0Y2ggKGluY2x1ZGluZyB0aGUgb25lLXNpZGUtYE5vbmVgIGNhc2UpLCB0aGUgc3dhbGxvd2VkIGludGVyZmFjZS1sb29rdXAgZXJyb3IgYW5kIGZhbHN5IGludGVyZmFjZSwgYW5kIGBSZXF1ZXN0RXJyb3JgIHByb3BhZ2F0aW9uLgoKIyMgTm90ZXMgb24gZGl2ZXJnZW5jZSBmcm9tIHRoZSBpc3N1ZQoKLSBUaGUgaXNzdWUgY2l0ZXMgc291cmNlIGxpbmVzIGBtYWluLnB5OjI5NDlgIC8gYG1haW4ucHk6MzA2MGA7IHRoZSB0ZXN0IGRvY3N0cmluZ3MgYW5jaG9yIHRvIG5lYXJieSBsaW5lcyAoYG1haW4ucHk6Mjg5OWApLiBUaGlzIGlzIGxpbmUtbnVtYmVyIGRyaWZ0IG9ubHkg4oCUIHRoZSBoZWxwZXJzIGFuZCBicmFuY2hlcyBjb3ZlcmVkIG1hdGNoIHRoZSBpc3N1ZSdzIGNoZWNrbGlzdCBleGFjdGx5LgotIFRoZSBgLm1lc3NhZ2VgIGFkZGl0aW9uIHRvIGBtYWtlX3JlcXVlc3RfZXJyb3JgIGlzIGEgdGVzdC1maXh0dXJlIGNoYW5nZSAobm90IGNhbGxlZCBvdXQgaW4gdGhlIGlzc3VlJ3MgZml4dHVyZSBsaXN0KSBuZWVkZWQgc28gdGhlIHZhbGlkYXRvcnMnIGBsb2dnZXIuZXJyb3IoZiIuLi4ge2V9IilgIHBhdGggc3RyaW5naWZpZXMgdGhlIGVycm9yIGNsZWFubHkgZHVyaW5nIHRoZSBwcm9wYWdhdGlvbiB0ZXN0cy4gSXQgbGVhdmVzIGBkdGwucHlgIGJlaGF2aW91ciB1bnRvdWNoZWQuCgojIyBWZXJpZmljYXRpb24KYHB5dGVzdCB0ZXN0cy91bml0YCwgYGZsYWtlOGAsIGFuZCBgbXlweWAgYXJlIGV4cGVjdGVkIGdyZWVuIHBlciB0aGUgdGllcidzIERlZmluaXRpb24gb2YgRG9uZTsgQ0kgKGBuZXRib3gtbWFuYWdlci11bml0LXRlc3RzYCkgcnVucyBvbiB0aGlzIFBSLgoKLS0tCgpfSW1wbGVtZW50ZWQgYnkgW3BsYW53ZXJrLWFnZW50XShodHRwczovL2dpdGh1Yi5jb20vcGxhbndlcmsvcGxhbndlcmstYWdlbnQpIDZiM2YzZWEgd2l0aCBDbGF1ZGU6Y2xhdWRlLW9wdXMtNC04Xwo=
      patchset: d84dad8e25e87cd6902287a53d12a0d7ba1cb9d1
      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/mypy/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/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: 38cd7f7078e3b2f59b37906dd02c268c12c69086
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/273/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
