all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe84:ab75
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: f59ae12e-3674-4294-bc78-c11f8a1f6ec2
        host_id: 5afd8fc909abddfe2ce3a956a91bbe56629648b7209fd0acfa541862
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe84:ab75
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.100
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.137
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe84:ab75
        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 yamllint explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#59>'
      - '<Job yamllint explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 93ed56841a1047d187657b5d16cb149b
      build_refs:
      - branch: main
        change: '270'
        change_message: "Unit tests: Tier 9 \u2014 Device Type Library importer (dtl.py)\n\n##
          Summary\n\nAdds the Tier 9 unit-test suite for the Device Type Library importer
          (`netbox_manager/dtl.py`), closing out issue #257 within the broader #232
          unit-test rollout. This is a **test-only** change: no production code is
          touched. The suite is built bottom-up over four commits \u2014 shared fixtures
          first, then one test file per functional group of `dtl.py`.\n\nCloses #257\n\n##
          Change set (in commit order)\n\n**`64208db` \u2014 Add shared DTL test fixtures
          to conftest**\nExtends `tests/conftest.py` with the seams the importer talks
          to NetBox through, so the later test files stay declarative:\n- `make_dtl_api`
          \u2014 a fake `pynetbox.api` client injected via monkeypatch.\n- `make_request_error`
          \u2014 a raisable stand-in for `pynetbox.RequestError`.\n- `make_dtl_tree`
          \u2014 a `tmp_path` library-tree builder (vendor dirs, YAML files, loose
          files).\n- `make_dtl_record` \u2014 a device-type record factory.\n- `dtl_log_handler`
          \u2014 a call-through `LogHandler` spy.\nThese are documented for reuse
          by later #232 tiers.\n\n**`11d5a23` \u2014 Add unit tests for dtl Repo file
          walking** (`test_dtl_repo.py`, group 1)\nCovers the pure-filesystem half
          of the importer against `make_dtl_tree` \u2014 no NetBox mock involved:\n-
          `slug_format` non-word-run collapsing / lowercasing.\n- `get_devices` vendor
          discovery: plain files ignored, both `*.yaml` and `*.yml` globbed, the one-sided
          casefold vendor filter, and `None`/empty filter returning all vendors.\n-
          `parse_files`: manufacturer rewrite (`{name, slug}`), `src` injection, substring+case-insensitive
          slug filter, and skipping unparseable YAML via `continue`.\n\n**`3f5e69e`
          \u2014 Add unit tests for dtl NetBox wrapper** (`test_dtl_netbox.py`, group
          2)\nCovers the NetBox-facing wrapper with the fake `pynetbox.api` injected
          by monkeypatch:\n- `connect_api` (verify untouched vs. disabled + verbose
          log).\n- `verify_compatibility` module-flag thresholds.\n- `get_manufacturers`
          str keying; idempotent `create_manufacturers` including the `RequestError`
          branch.\n- `create_device_types` / `create_module_types` \u2014 `src`/`image`
          stripping, reuse, per-key dispatch, `RequestError`, and the module-bays
          gate on `self.modules` (routing tests mock `nb.device_types`).\n\n**`9e1781d`
          \u2014 Add unit tests for dtl DeviceTypes creators** (`test_dtl_devicetypes.py`,
          groups 3-5)\nCovers the lookup helpers and the ~16 component creators:\n-
          Lookup helpers: str keying, the `device_type_id` vs. `module_type_id` filter
          kwargs, dedup + stamp.\n- The device/module creator families exercised via
          parametrized tables (`DEVICE_CREATORS` / `MODULE_CREATORS`) over their shared
          contract \u2014 skip existing, batch-create the new ports, log with the
          matching `port_type` label, bump `counter[\"updated\"]` \u2014 plus the
          empty/all-existing guard, the `RequestError` branch, the `power_port` /
          `rear_port` id-resolution divergences, and `upload_images` (headers, per-file
          mapping, verify polarity, images counter) with `requests.patch` patched.\n\n##
          Divergence from the issue\n\nNone observed in the diff. The work stays within
          the issue's scope \u2014 unit tests plus their supporting fixtures \u2014
          and adds no production-code changes. The suite mirrors `dtl.py`'s existing
          structure (`Repo` \u2192 `NetBox` \u2192 `DeviceTypes`) rather than introducing
          new abstractions.\n\n## Verification\n\n`pytest tests/unit` \u2014 the new
          files live under `tests/unit/netbox_manager/` per the project's test layout.\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/270
        commit_id: 425a525cdb7579b63b673b065c751dcf3c074e87
        patchset: 425a525cdb7579b63b673b065c751dcf3c074e87
        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: 014df5112bdb48fa9bbc5e83ceefb976
      buildset_refs:
      - branch: main
        change: '270'
        change_message: "Unit tests: Tier 9 \u2014 Device Type Library importer (dtl.py)\n\n##
          Summary\n\nAdds the Tier 9 unit-test suite for the Device Type Library importer
          (`netbox_manager/dtl.py`), closing out issue #257 within the broader #232
          unit-test rollout. This is a **test-only** change: no production code is
          touched. The suite is built bottom-up over four commits \u2014 shared fixtures
          first, then one test file per functional group of `dtl.py`.\n\nCloses #257\n\n##
          Change set (in commit order)\n\n**`64208db` \u2014 Add shared DTL test fixtures
          to conftest**\nExtends `tests/conftest.py` with the seams the importer talks
          to NetBox through, so the later test files stay declarative:\n- `make_dtl_api`
          \u2014 a fake `pynetbox.api` client injected via monkeypatch.\n- `make_request_error`
          \u2014 a raisable stand-in for `pynetbox.RequestError`.\n- `make_dtl_tree`
          \u2014 a `tmp_path` library-tree builder (vendor dirs, YAML files, loose
          files).\n- `make_dtl_record` \u2014 a device-type record factory.\n- `dtl_log_handler`
          \u2014 a call-through `LogHandler` spy.\nThese are documented for reuse
          by later #232 tiers.\n\n**`11d5a23` \u2014 Add unit tests for dtl Repo file
          walking** (`test_dtl_repo.py`, group 1)\nCovers the pure-filesystem half
          of the importer against `make_dtl_tree` \u2014 no NetBox mock involved:\n-
          `slug_format` non-word-run collapsing / lowercasing.\n- `get_devices` vendor
          discovery: plain files ignored, both `*.yaml` and `*.yml` globbed, the one-sided
          casefold vendor filter, and `None`/empty filter returning all vendors.\n-
          `parse_files`: manufacturer rewrite (`{name, slug}`), `src` injection, substring+case-insensitive
          slug filter, and skipping unparseable YAML via `continue`.\n\n**`3f5e69e`
          \u2014 Add unit tests for dtl NetBox wrapper** (`test_dtl_netbox.py`, group
          2)\nCovers the NetBox-facing wrapper with the fake `pynetbox.api` injected
          by monkeypatch:\n- `connect_api` (verify untouched vs. disabled + verbose
          log).\n- `verify_compatibility` module-flag thresholds.\n- `get_manufacturers`
          str keying; idempotent `create_manufacturers` including the `RequestError`
          branch.\n- `create_device_types` / `create_module_types` \u2014 `src`/`image`
          stripping, reuse, per-key dispatch, `RequestError`, and the module-bays
          gate on `self.modules` (routing tests mock `nb.device_types`).\n\n**`9e1781d`
          \u2014 Add unit tests for dtl DeviceTypes creators** (`test_dtl_devicetypes.py`,
          groups 3-5)\nCovers the lookup helpers and the ~16 component creators:\n-
          Lookup helpers: str keying, the `device_type_id` vs. `module_type_id` filter
          kwargs, dedup + stamp.\n- The device/module creator families exercised via
          parametrized tables (`DEVICE_CREATORS` / `MODULE_CREATORS`) over their shared
          contract \u2014 skip existing, batch-create the new ports, log with the
          matching `port_type` label, bump `counter[\"updated\"]` \u2014 plus the
          empty/all-existing guard, the `RequestError` branch, the `power_port` /
          `rear_port` id-resolution divergences, and `upload_images` (headers, per-file
          mapping, verify polarity, images counter) with `requests.patch` patched.\n\n##
          Divergence from the issue\n\nNone observed in the diff. The work stays within
          the issue's scope \u2014 unit tests plus their supporting fixtures \u2014
          and adds no production-code changes. The suite mirrors `dtl.py`'s existing
          structure (`Repo` \u2192 `NetBox` \u2192 `DeviceTypes`) rather than introducing
          new abstractions.\n\n## Verification\n\n`pytest tests/unit` \u2014 the new
          files live under `tests/unit/netbox_manager/` per the project's test layout.\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/270
        commit_id: 425a525cdb7579b63b673b065c751dcf3c074e87
        patchset: 425a525cdb7579b63b673b065c751dcf3c074e87
        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: '270'
      change_message: "Unit tests: Tier 9 \u2014 Device Type Library importer (dtl.py)\n\n##
        Summary\n\nAdds the Tier 9 unit-test suite for the Device Type Library importer
        (`netbox_manager/dtl.py`), closing out issue #257 within the broader #232
        unit-test rollout. This is a **test-only** change: no production code is touched.
        The suite is built bottom-up over four commits \u2014 shared fixtures first,
        then one test file per functional group of `dtl.py`.\n\nCloses #257\n\n##
        Change set (in commit order)\n\n**`64208db` \u2014 Add shared DTL test fixtures
        to conftest**\nExtends `tests/conftest.py` with the seams the importer talks
        to NetBox through, so the later test files stay declarative:\n- `make_dtl_api`
        \u2014 a fake `pynetbox.api` client injected via monkeypatch.\n- `make_request_error`
        \u2014 a raisable stand-in for `pynetbox.RequestError`.\n- `make_dtl_tree`
        \u2014 a `tmp_path` library-tree builder (vendor dirs, YAML files, loose files).\n-
        `make_dtl_record` \u2014 a device-type record factory.\n- `dtl_log_handler`
        \u2014 a call-through `LogHandler` spy.\nThese are documented for reuse by
        later #232 tiers.\n\n**`11d5a23` \u2014 Add unit tests for dtl Repo file walking**
        (`test_dtl_repo.py`, group 1)\nCovers the pure-filesystem half of the importer
        against `make_dtl_tree` \u2014 no NetBox mock involved:\n- `slug_format` non-word-run
        collapsing / lowercasing.\n- `get_devices` vendor discovery: plain files ignored,
        both `*.yaml` and `*.yml` globbed, the one-sided casefold vendor filter, and
        `None`/empty filter returning all vendors.\n- `parse_files`: manufacturer
        rewrite (`{name, slug}`), `src` injection, substring+case-insensitive slug
        filter, and skipping unparseable YAML via `continue`.\n\n**`3f5e69e` \u2014
        Add unit tests for dtl NetBox wrapper** (`test_dtl_netbox.py`, group 2)\nCovers
        the NetBox-facing wrapper with the fake `pynetbox.api` injected by monkeypatch:\n-
        `connect_api` (verify untouched vs. disabled + verbose log).\n- `verify_compatibility`
        module-flag thresholds.\n- `get_manufacturers` str keying; idempotent `create_manufacturers`
        including the `RequestError` branch.\n- `create_device_types` / `create_module_types`
        \u2014 `src`/`image` stripping, reuse, per-key dispatch, `RequestError`, and
        the module-bays gate on `self.modules` (routing tests mock `nb.device_types`).\n\n**`9e1781d`
        \u2014 Add unit tests for dtl DeviceTypes creators** (`test_dtl_devicetypes.py`,
        groups 3-5)\nCovers the lookup helpers and the ~16 component creators:\n-
        Lookup helpers: str keying, the `device_type_id` vs. `module_type_id` filter
        kwargs, dedup + stamp.\n- The device/module creator families exercised via
        parametrized tables (`DEVICE_CREATORS` / `MODULE_CREATORS`) over their shared
        contract \u2014 skip existing, batch-create the new ports, log with the matching
        `port_type` label, bump `counter[\"updated\"]` \u2014 plus the empty/all-existing
        guard, the `RequestError` branch, the `power_port` / `rear_port` id-resolution
        divergences, and `upload_images` (headers, per-file mapping, verify polarity,
        images counter) with `requests.patch` patched.\n\n## Divergence from the issue\n\nNone
        observed in the diff. The work stays within the issue's scope \u2014 unit
        tests plus their supporting fixtures \u2014 and adds no production-code changes.
        The suite mirrors `dtl.py`'s existing structure (`Repo` \u2192 `NetBox` \u2192
        `DeviceTypes`) rather than introducing new abstractions.\n\n## Verification\n\n`pytest
        tests/unit` \u2014 the new files live under `tests/unit/netbox_manager/` per
        the project's test layout.\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/270
      child_jobs: []
      commit_id: 425a525cdb7579b63b673b065c751dcf3c074e87
      event_id: 95357720-76c5-11f1-9afd-b9479620727a
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/93ed56841a1047d187657b5d16cb149b/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/93ed56841a1047d187657b5d16cb149b/work/logs
        result_data_file: /var/lib/zuul/builds/93ed56841a1047d187657b5d16cb149b/work/results.json
        src_root: /var/lib/zuul/builds/93ed56841a1047d187657b5d16cb149b/work/src
        work_root: /var/lib/zuul/builds/93ed56841a1047d187657b5d16cb149b/work
      include_vars: []
      items:
      - branch: main
        change: '270'
        change_message: "Unit tests: Tier 9 \u2014 Device Type Library importer (dtl.py)\n\n##
          Summary\n\nAdds the Tier 9 unit-test suite for the Device Type Library importer
          (`netbox_manager/dtl.py`), closing out issue #257 within the broader #232
          unit-test rollout. This is a **test-only** change: no production code is
          touched. The suite is built bottom-up over four commits \u2014 shared fixtures
          first, then one test file per functional group of `dtl.py`.\n\nCloses #257\n\n##
          Change set (in commit order)\n\n**`64208db` \u2014 Add shared DTL test fixtures
          to conftest**\nExtends `tests/conftest.py` with the seams the importer talks
          to NetBox through, so the later test files stay declarative:\n- `make_dtl_api`
          \u2014 a fake `pynetbox.api` client injected via monkeypatch.\n- `make_request_error`
          \u2014 a raisable stand-in for `pynetbox.RequestError`.\n- `make_dtl_tree`
          \u2014 a `tmp_path` library-tree builder (vendor dirs, YAML files, loose
          files).\n- `make_dtl_record` \u2014 a device-type record factory.\n- `dtl_log_handler`
          \u2014 a call-through `LogHandler` spy.\nThese are documented for reuse
          by later #232 tiers.\n\n**`11d5a23` \u2014 Add unit tests for dtl Repo file
          walking** (`test_dtl_repo.py`, group 1)\nCovers the pure-filesystem half
          of the importer against `make_dtl_tree` \u2014 no NetBox mock involved:\n-
          `slug_format` non-word-run collapsing / lowercasing.\n- `get_devices` vendor
          discovery: plain files ignored, both `*.yaml` and `*.yml` globbed, the one-sided
          casefold vendor filter, and `None`/empty filter returning all vendors.\n-
          `parse_files`: manufacturer rewrite (`{name, slug}`), `src` injection, substring+case-insensitive
          slug filter, and skipping unparseable YAML via `continue`.\n\n**`3f5e69e`
          \u2014 Add unit tests for dtl NetBox wrapper** (`test_dtl_netbox.py`, group
          2)\nCovers the NetBox-facing wrapper with the fake `pynetbox.api` injected
          by monkeypatch:\n- `connect_api` (verify untouched vs. disabled + verbose
          log).\n- `verify_compatibility` module-flag thresholds.\n- `get_manufacturers`
          str keying; idempotent `create_manufacturers` including the `RequestError`
          branch.\n- `create_device_types` / `create_module_types` \u2014 `src`/`image`
          stripping, reuse, per-key dispatch, `RequestError`, and the module-bays
          gate on `self.modules` (routing tests mock `nb.device_types`).\n\n**`9e1781d`
          \u2014 Add unit tests for dtl DeviceTypes creators** (`test_dtl_devicetypes.py`,
          groups 3-5)\nCovers the lookup helpers and the ~16 component creators:\n-
          Lookup helpers: str keying, the `device_type_id` vs. `module_type_id` filter
          kwargs, dedup + stamp.\n- The device/module creator families exercised via
          parametrized tables (`DEVICE_CREATORS` / `MODULE_CREATORS`) over their shared
          contract \u2014 skip existing, batch-create the new ports, log with the
          matching `port_type` label, bump `counter[\"updated\"]` \u2014 plus the
          empty/all-existing guard, the `RequestError` branch, the `power_port` /
          `rear_port` id-resolution divergences, and `upload_images` (headers, per-file
          mapping, verify polarity, images counter) with `requests.patch` patched.\n\n##
          Divergence from the issue\n\nNone observed in the diff. The work stays within
          the issue's scope \u2014 unit tests plus their supporting fixtures \u2014
          and adds no production-code changes. The suite mirrors `dtl.py`'s existing
          structure (`Repo` \u2192 `NetBox` \u2192 `DeviceTypes`) rather than introducing
          new abstractions.\n\n## Verification\n\n`pytest tests/unit` \u2014 the new
          files live under `tests/unit/netbox_manager/` per the project's test layout.\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/270
        commit_id: 425a525cdb7579b63b673b065c751dcf3c074e87
        patchset: 425a525cdb7579b63b673b065c751dcf3c074e87
        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: yamllint
      jobtags: []
      max_attempts: 3
      message: VW5pdCB0ZXN0czogVGllciA5IOKAlCBEZXZpY2UgVHlwZSBMaWJyYXJ5IGltcG9ydGVyIChkdGwucHkpCgojIyBTdW1tYXJ5CgpBZGRzIHRoZSBUaWVyIDkgdW5pdC10ZXN0IHN1aXRlIGZvciB0aGUgRGV2aWNlIFR5cGUgTGlicmFyeSBpbXBvcnRlciAoYG5ldGJveF9tYW5hZ2VyL2R0bC5weWApLCBjbG9zaW5nIG91dCBpc3N1ZSAjMjU3IHdpdGhpbiB0aGUgYnJvYWRlciAjMjMyIHVuaXQtdGVzdCByb2xsb3V0LiBUaGlzIGlzIGEgKip0ZXN0LW9ubHkqKiBjaGFuZ2U6IG5vIHByb2R1Y3Rpb24gY29kZSBpcyB0b3VjaGVkLiBUaGUgc3VpdGUgaXMgYnVpbHQgYm90dG9tLXVwIG92ZXIgZm91ciBjb21taXRzIOKAlCBzaGFyZWQgZml4dHVyZXMgZmlyc3QsIHRoZW4gb25lIHRlc3QgZmlsZSBwZXIgZnVuY3Rpb25hbCBncm91cCBvZiBgZHRsLnB5YC4KCkNsb3NlcyAjMjU3CgojIyBDaGFuZ2Ugc2V0IChpbiBjb21taXQgb3JkZXIpCgoqKmA2NDIwOGRiYCDigJQgQWRkIHNoYXJlZCBEVEwgdGVzdCBmaXh0dXJlcyB0byBjb25mdGVzdCoqCkV4dGVuZHMgYHRlc3RzL2NvbmZ0ZXN0LnB5YCB3aXRoIHRoZSBzZWFtcyB0aGUgaW1wb3J0ZXIgdGFsa3MgdG8gTmV0Qm94IHRocm91Z2gsIHNvIHRoZSBsYXRlciB0ZXN0IGZpbGVzIHN0YXkgZGVjbGFyYXRpdmU6Ci0gYG1ha2VfZHRsX2FwaWAg4oCUIGEgZmFrZSBgcHluZXRib3guYXBpYCBjbGllbnQgaW5qZWN0ZWQgdmlhIG1vbmtleXBhdGNoLgotIGBtYWtlX3JlcXVlc3RfZXJyb3JgIOKAlCBhIHJhaXNhYmxlIHN0YW5kLWluIGZvciBgcHluZXRib3guUmVxdWVzdEVycm9yYC4KLSBgbWFrZV9kdGxfdHJlZWAg4oCUIGEgYHRtcF9wYXRoYCBsaWJyYXJ5LXRyZWUgYnVpbGRlciAodmVuZG9yIGRpcnMsIFlBTUwgZmlsZXMsIGxvb3NlIGZpbGVzKS4KLSBgbWFrZV9kdGxfcmVjb3JkYCDigJQgYSBkZXZpY2UtdHlwZSByZWNvcmQgZmFjdG9yeS4KLSBgZHRsX2xvZ19oYW5kbGVyYCDigJQgYSBjYWxsLXRocm91Z2ggYExvZ0hhbmRsZXJgIHNweS4KVGhlc2UgYXJlIGRvY3VtZW50ZWQgZm9yIHJldXNlIGJ5IGxhdGVyICMyMzIgdGllcnMuCgoqKmAxMWQ1YTIzYCDigJQgQWRkIHVuaXQgdGVzdHMgZm9yIGR0bCBSZXBvIGZpbGUgd2Fsa2luZyoqIChgdGVzdF9kdGxfcmVwby5weWAsIGdyb3VwIDEpCkNvdmVycyB0aGUgcHVyZS1maWxlc3lzdGVtIGhhbGYgb2YgdGhlIGltcG9ydGVyIGFnYWluc3QgYG1ha2VfZHRsX3RyZWVgIOKAlCBubyBOZXRCb3ggbW9jayBpbnZvbHZlZDoKLSBgc2x1Z19mb3JtYXRgIG5vbi13b3JkLXJ1biBjb2xsYXBzaW5nIC8gbG93ZXJjYXNpbmcuCi0gYGdldF9kZXZpY2VzYCB2ZW5kb3IgZGlzY292ZXJ5OiBwbGFpbiBmaWxlcyBpZ25vcmVkLCBib3RoIGAqLnlhbWxgIGFuZCBgKi55bWxgIGdsb2JiZWQsIHRoZSBvbmUtc2lkZWQgY2FzZWZvbGQgdmVuZG9yIGZpbHRlciwgYW5kIGBOb25lYC9lbXB0eSBmaWx0ZXIgcmV0dXJuaW5nIGFsbCB2ZW5kb3JzLgotIGBwYXJzZV9maWxlc2A6IG1hbnVmYWN0dXJlciByZXdyaXRlIChge25hbWUsIHNsdWd9YCksIGBzcmNgIGluamVjdGlvbiwgc3Vic3RyaW5nK2Nhc2UtaW5zZW5zaXRpdmUgc2x1ZyBmaWx0ZXIsIGFuZCBza2lwcGluZyB1bnBhcnNlYWJsZSBZQU1MIHZpYSBgY29udGludWVgLgoKKipgM2Y1ZTY5ZWAg4oCUIEFkZCB1bml0IHRlc3RzIGZvciBkdGwgTmV0Qm94IHdyYXBwZXIqKiAoYHRlc3RfZHRsX25ldGJveC5weWAsIGdyb3VwIDIpCkNvdmVycyB0aGUgTmV0Qm94LWZhY2luZyB3cmFwcGVyIHdpdGggdGhlIGZha2UgYHB5bmV0Ym94LmFwaWAgaW5qZWN0ZWQgYnkgbW9ua2V5cGF0Y2g6Ci0gYGNvbm5lY3RfYXBpYCAodmVyaWZ5IHVudG91Y2hlZCB2cy4gZGlzYWJsZWQgKyB2ZXJib3NlIGxvZykuCi0gYHZlcmlmeV9jb21wYXRpYmlsaXR5YCBtb2R1bGUtZmxhZyB0aHJlc2hvbGRzLgotIGBnZXRfbWFudWZhY3R1cmVyc2Agc3RyIGtleWluZzsgaWRlbXBvdGVudCBgY3JlYXRlX21hbnVmYWN0dXJlcnNgIGluY2x1ZGluZyB0aGUgYFJlcXVlc3RFcnJvcmAgYnJhbmNoLgotIGBjcmVhdGVfZGV2aWNlX3R5cGVzYCAvIGBjcmVhdGVfbW9kdWxlX3R5cGVzYCDigJQgYHNyY2AvYGltYWdlYCBzdHJpcHBpbmcsIHJldXNlLCBwZXIta2V5IGRpc3BhdGNoLCBgUmVxdWVzdEVycm9yYCwgYW5kIHRoZSBtb2R1bGUtYmF5cyBnYXRlIG9uIGBzZWxmLm1vZHVsZXNgIChyb3V0aW5nIHRlc3RzIG1vY2sgYG5iLmRldmljZV90eXBlc2ApLgoKKipgOWUxNzgxZGAg4oCUIEFkZCB1bml0IHRlc3RzIGZvciBkdGwgRGV2aWNlVHlwZXMgY3JlYXRvcnMqKiAoYHRlc3RfZHRsX2RldmljZXR5cGVzLnB5YCwgZ3JvdXBzIDMtNSkKQ292ZXJzIHRoZSBsb29rdXAgaGVscGVycyBhbmQgdGhlIH4xNiBjb21wb25lbnQgY3JlYXRvcnM6Ci0gTG9va3VwIGhlbHBlcnM6IHN0ciBrZXlpbmcsIHRoZSBgZGV2aWNlX3R5cGVfaWRgIHZzLiBgbW9kdWxlX3R5cGVfaWRgIGZpbHRlciBrd2FyZ3MsIGRlZHVwICsgc3RhbXAuCi0gVGhlIGRldmljZS9tb2R1bGUgY3JlYXRvciBmYW1pbGllcyBleGVyY2lzZWQgdmlhIHBhcmFtZXRyaXplZCB0YWJsZXMgKGBERVZJQ0VfQ1JFQVRPUlNgIC8gYE1PRFVMRV9DUkVBVE9SU2ApIG92ZXIgdGhlaXIgc2hhcmVkIGNvbnRyYWN0IOKAlCBza2lwIGV4aXN0aW5nLCBiYXRjaC1jcmVhdGUgdGhlIG5ldyBwb3J0cywgbG9nIHdpdGggdGhlIG1hdGNoaW5nIGBwb3J0X3R5cGVgIGxhYmVsLCBidW1wIGBjb3VudGVyWyJ1cGRhdGVkIl1gIOKAlCBwbHVzIHRoZSBlbXB0eS9hbGwtZXhpc3RpbmcgZ3VhcmQsIHRoZSBgUmVxdWVzdEVycm9yYCBicmFuY2gsIHRoZSBgcG93ZXJfcG9ydGAgLyBgcmVhcl9wb3J0YCBpZC1yZXNvbHV0aW9uIGRpdmVyZ2VuY2VzLCBhbmQgYHVwbG9hZF9pbWFnZXNgIChoZWFkZXJzLCBwZXItZmlsZSBtYXBwaW5nLCB2ZXJpZnkgcG9sYXJpdHksIGltYWdlcyBjb3VudGVyKSB3aXRoIGByZXF1ZXN0cy5wYXRjaGAgcGF0Y2hlZC4KCiMjIERpdmVyZ2VuY2UgZnJvbSB0aGUgaXNzdWUKCk5vbmUgb2JzZXJ2ZWQgaW4gdGhlIGRpZmYuIFRoZSB3b3JrIHN0YXlzIHdpdGhpbiB0aGUgaXNzdWUncyBzY29wZSDigJQgdW5pdCB0ZXN0cyBwbHVzIHRoZWlyIHN1cHBvcnRpbmcgZml4dHVyZXMg4oCUIGFuZCBhZGRzIG5vIHByb2R1Y3Rpb24tY29kZSBjaGFuZ2VzLiBUaGUgc3VpdGUgbWlycm9ycyBgZHRsLnB5YCdzIGV4aXN0aW5nIHN0cnVjdHVyZSAoYFJlcG9gIOKGkiBgTmV0Qm94YCDihpIgYERldmljZVR5cGVzYCkgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGFic3RyYWN0aW9ucy4KCiMjIFZlcmlmaWNhdGlvbgoKYHB5dGVzdCB0ZXN0cy91bml0YCDigJQgdGhlIG5ldyBmaWxlcyBsaXZlIHVuZGVyIGB0ZXN0cy91bml0L25ldGJveF9tYW5hZ2VyL2AgcGVyIHRoZSBwcm9qZWN0J3MgdGVzdCBsYXlvdXQuCgotLS0KCl9JbXBsZW1lbnRlZCBieSBbcGxhbndlcmstYWdlbnRdKGh0dHBzOi8vZ2l0aHViLmNvbS9wbGFud2Vyay9wbGFud2Vyay1hZ2VudCkgNmIzZjNlYSB3aXRoIENsYXVkZTpjbGF1ZGUtb3B1cy00LThfCg==
      patchset: 425a525cdb7579b63b673b065c751dcf3c074e87
      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/yamllint/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: 97c141bdbdf32087e55810290587798c6d66131a
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/270/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
