all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe16:541e
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 87c091be-acfe-4767-ba4f-8c2a3d53356e
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe16:541e
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.90
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.224
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe16:541e
        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 flake8 explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#32>'
      - '<Job flake8 explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#32>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 8cf01677fb524a9d9c79c5312e817795
      build_refs:
      - branch: main
        change: '246'
        change_message: "Make segment interface label configurable\n\n## Summary\n\nCloses
          #220.\n\nMake the device interface label configurable on the **segment level**
          via the\nnew segment config context key `_segment_device_interface_label`,
          in addition to\nthe existing per-device `device_interface_label` custom
          field. The label no\nlonger has to be set on every source device individually
          when a whole segment\nshould share one label.\n\nThe per-device custom field
          keeps **precedence**: the segment-level value is used\nonly as a fallback
          when `device_interface_label` is not set on the device. The\nchange is purely
          additive \u2014 setups that do not define the new key keep their\ncurrent
          behavior.\n\n## Change set (in commit order)\n\n1. **Add segment-level device
          interface label fallback**\n   - New helper `_resolve_device_interface_label(netbox_api,
          device, segment_label_cache)`\n     in `netbox_manager/main.py`. It returns
          the device's `device_interface_label`\n     custom field when set, otherwise
          falls back to the\n     `_segment_device_interface_label` key of the device's
          segment (cluster)\n     config context, read via the existing `_get_cluster_segment_config_context()`\n
          \    \u2014 the same mechanism already used for the `_segment_loopback_*`
          parameters\n     (#166). Config contexts are fetched at most once per cluster
          via a small\n     per-run cache.\n   - `_generate_device_interface_labels()`
          now resolves the label through this\n     helper for every participating
          source device (switch/router/firewall),\n     independent of which of those
          roles it has.\n   - Updated the `autoconf` command docstring to mention
          the new source.\n   - Unit tests in `tests/unit/netbox_manager/test_segment_interface_label.py`\n
          \    cover precedence, empty-custom-field fallback, the no-label and no-cluster\n
          \    paths, and per-cluster caching (including caching of an absent key).\n\n2.
          **Document `_segment_device_interface_label` in changelog**\n   - New `Unreleased`
          \u2192 `Added` entry in `CHANGELOG.md`.\n\n## How precedence is resolved\n\n|
          Device `device_interface_label` | Segment `_segment_device_interface_label`
          | Result |\n|---|---|---|\n| set | (any) | device value |\n| unset | set
          | segment value |\n| unset | unset / no cluster | no label (unchanged behavior)
          |\n\n## Verification\n\n- `pytest tests/unit` \u2014 11 passed\n- `flake8
          netbox_manager/ tests/` \u2014 clean\n- `black --check netbox_manager/ tests/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 no new errors (only the pre-existing
          third-party\n  `import-untyped` warnings present on `main`)\n\n## Notes
          for reviewers\n\n- Tests mock only `_get_cluster_segment_config_context`
          (the NetBox I/O\n  boundary) and exercise the pure resolution logic, consistent
          with the\n  deferral of full pynetbox fixtures to #232.\n- `example/` is
          gilt-overlaid from `osism/testbed` and was intentionally left\n  untouched;
          config contexts are not represented in those resource files.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/netbox-manager/pull/246
        commit_id: 254d602fe839c54bafd699c28d3efce8d36ec259
        patchset: 254d602fe839c54bafd699c28d3efce8d36ec259
        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: 5d88cbfe5d1d443d94d3b20d1c100236
      buildset_refs:
      - branch: main
        change: '246'
        change_message: "Make segment interface label configurable\n\n## Summary\n\nCloses
          #220.\n\nMake the device interface label configurable on the **segment level**
          via the\nnew segment config context key `_segment_device_interface_label`,
          in addition to\nthe existing per-device `device_interface_label` custom
          field. The label no\nlonger has to be set on every source device individually
          when a whole segment\nshould share one label.\n\nThe per-device custom field
          keeps **precedence**: the segment-level value is used\nonly as a fallback
          when `device_interface_label` is not set on the device. The\nchange is purely
          additive \u2014 setups that do not define the new key keep their\ncurrent
          behavior.\n\n## Change set (in commit order)\n\n1. **Add segment-level device
          interface label fallback**\n   - New helper `_resolve_device_interface_label(netbox_api,
          device, segment_label_cache)`\n     in `netbox_manager/main.py`. It returns
          the device's `device_interface_label`\n     custom field when set, otherwise
          falls back to the\n     `_segment_device_interface_label` key of the device's
          segment (cluster)\n     config context, read via the existing `_get_cluster_segment_config_context()`\n
          \    \u2014 the same mechanism already used for the `_segment_loopback_*`
          parameters\n     (#166). Config contexts are fetched at most once per cluster
          via a small\n     per-run cache.\n   - `_generate_device_interface_labels()`
          now resolves the label through this\n     helper for every participating
          source device (switch/router/firewall),\n     independent of which of those
          roles it has.\n   - Updated the `autoconf` command docstring to mention
          the new source.\n   - Unit tests in `tests/unit/netbox_manager/test_segment_interface_label.py`\n
          \    cover precedence, empty-custom-field fallback, the no-label and no-cluster\n
          \    paths, and per-cluster caching (including caching of an absent key).\n\n2.
          **Document `_segment_device_interface_label` in changelog**\n   - New `Unreleased`
          \u2192 `Added` entry in `CHANGELOG.md`.\n\n## How precedence is resolved\n\n|
          Device `device_interface_label` | Segment `_segment_device_interface_label`
          | Result |\n|---|---|---|\n| set | (any) | device value |\n| unset | set
          | segment value |\n| unset | unset / no cluster | no label (unchanged behavior)
          |\n\n## Verification\n\n- `pytest tests/unit` \u2014 11 passed\n- `flake8
          netbox_manager/ tests/` \u2014 clean\n- `black --check netbox_manager/ tests/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 no new errors (only the pre-existing
          third-party\n  `import-untyped` warnings present on `main`)\n\n## Notes
          for reviewers\n\n- Tests mock only `_get_cluster_segment_config_context`
          (the NetBox I/O\n  boundary) and exercise the pure resolution logic, consistent
          with the\n  deferral of full pynetbox fixtures to #232.\n- `example/` is
          gilt-overlaid from `osism/testbed` and was intentionally left\n  untouched;
          config contexts are not represented in those resource files.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/netbox-manager/pull/246
        commit_id: 254d602fe839c54bafd699c28d3efce8d36ec259
        patchset: 254d602fe839c54bafd699c28d3efce8d36ec259
        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: '246'
      change_message: "Make segment interface label configurable\n\n## Summary\n\nCloses
        #220.\n\nMake the device interface label configurable on the **segment level**
        via the\nnew segment config context key `_segment_device_interface_label`,
        in addition to\nthe existing per-device `device_interface_label` custom field.
        The label no\nlonger has to be set on every source device individually when
        a whole segment\nshould share one label.\n\nThe per-device custom field keeps
        **precedence**: the segment-level value is used\nonly as a fallback when `device_interface_label`
        is not set on the device. The\nchange is purely additive \u2014 setups that
        do not define the new key keep their\ncurrent behavior.\n\n## Change set (in
        commit order)\n\n1. **Add segment-level device interface label fallback**\n
        \  - New helper `_resolve_device_interface_label(netbox_api, device, segment_label_cache)`\n
        \    in `netbox_manager/main.py`. It returns the device's `device_interface_label`\n
        \    custom field when set, otherwise falls back to the\n     `_segment_device_interface_label`
        key of the device's segment (cluster)\n     config context, read via the existing
        `_get_cluster_segment_config_context()`\n     \u2014 the same mechanism already
        used for the `_segment_loopback_*` parameters\n     (#166). Config contexts
        are fetched at most once per cluster via a small\n     per-run cache.\n   -
        `_generate_device_interface_labels()` now resolves the label through this\n
        \    helper for every participating source device (switch/router/firewall),\n
        \    independent of which of those roles it has.\n   - Updated the `autoconf`
        command docstring to mention the new source.\n   - Unit tests in `tests/unit/netbox_manager/test_segment_interface_label.py`\n
        \    cover precedence, empty-custom-field fallback, the no-label and no-cluster\n
        \    paths, and per-cluster caching (including caching of an absent key).\n\n2.
        **Document `_segment_device_interface_label` in changelog**\n   - New `Unreleased`
        \u2192 `Added` entry in `CHANGELOG.md`.\n\n## How precedence is resolved\n\n|
        Device `device_interface_label` | Segment `_segment_device_interface_label`
        | Result |\n|---|---|---|\n| set | (any) | device value |\n| unset | set |
        segment value |\n| unset | unset / no cluster | no label (unchanged behavior)
        |\n\n## Verification\n\n- `pytest tests/unit` \u2014 11 passed\n- `flake8
        netbox_manager/ tests/` \u2014 clean\n- `black --check netbox_manager/ tests/`
        \u2014 clean\n- `mypy netbox_manager/` \u2014 no new errors (only the pre-existing
        third-party\n  `import-untyped` warnings present on `main`)\n\n## Notes for
        reviewers\n\n- Tests mock only `_get_cluster_segment_config_context` (the
        NetBox I/O\n  boundary) and exercise the pure resolution logic, consistent
        with the\n  deferral of full pynetbox fixtures to #232.\n- `example/` is gilt-overlaid
        from `osism/testbed` and was intentionally left\n  untouched; config contexts
        are not represented in those resource files.\n\n\U0001F916 Generated with
        [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/netbox-manager/pull/246
      child_jobs: []
      commit_id: 254d602fe839c54bafd699c28d3efce8d36ec259
      event_id: ebc830da-63f3-11f1-8561-7b208bc21e24
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/8cf01677fb524a9d9c79c5312e817795/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/8cf01677fb524a9d9c79c5312e817795/work/logs
        result_data_file: /var/lib/zuul/builds/8cf01677fb524a9d9c79c5312e817795/work/results.json
        src_root: /var/lib/zuul/builds/8cf01677fb524a9d9c79c5312e817795/work/src
        work_root: /var/lib/zuul/builds/8cf01677fb524a9d9c79c5312e817795/work
      include_vars: []
      items:
      - branch: main
        change: '246'
        change_message: "Make segment interface label configurable\n\n## Summary\n\nCloses
          #220.\n\nMake the device interface label configurable on the **segment level**
          via the\nnew segment config context key `_segment_device_interface_label`,
          in addition to\nthe existing per-device `device_interface_label` custom
          field. The label no\nlonger has to be set on every source device individually
          when a whole segment\nshould share one label.\n\nThe per-device custom field
          keeps **precedence**: the segment-level value is used\nonly as a fallback
          when `device_interface_label` is not set on the device. The\nchange is purely
          additive \u2014 setups that do not define the new key keep their\ncurrent
          behavior.\n\n## Change set (in commit order)\n\n1. **Add segment-level device
          interface label fallback**\n   - New helper `_resolve_device_interface_label(netbox_api,
          device, segment_label_cache)`\n     in `netbox_manager/main.py`. It returns
          the device's `device_interface_label`\n     custom field when set, otherwise
          falls back to the\n     `_segment_device_interface_label` key of the device's
          segment (cluster)\n     config context, read via the existing `_get_cluster_segment_config_context()`\n
          \    \u2014 the same mechanism already used for the `_segment_loopback_*`
          parameters\n     (#166). Config contexts are fetched at most once per cluster
          via a small\n     per-run cache.\n   - `_generate_device_interface_labels()`
          now resolves the label through this\n     helper for every participating
          source device (switch/router/firewall),\n     independent of which of those
          roles it has.\n   - Updated the `autoconf` command docstring to mention
          the new source.\n   - Unit tests in `tests/unit/netbox_manager/test_segment_interface_label.py`\n
          \    cover precedence, empty-custom-field fallback, the no-label and no-cluster\n
          \    paths, and per-cluster caching (including caching of an absent key).\n\n2.
          **Document `_segment_device_interface_label` in changelog**\n   - New `Unreleased`
          \u2192 `Added` entry in `CHANGELOG.md`.\n\n## How precedence is resolved\n\n|
          Device `device_interface_label` | Segment `_segment_device_interface_label`
          | Result |\n|---|---|---|\n| set | (any) | device value |\n| unset | set
          | segment value |\n| unset | unset / no cluster | no label (unchanged behavior)
          |\n\n## Verification\n\n- `pytest tests/unit` \u2014 11 passed\n- `flake8
          netbox_manager/ tests/` \u2014 clean\n- `black --check netbox_manager/ tests/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 no new errors (only the pre-existing
          third-party\n  `import-untyped` warnings present on `main`)\n\n## Notes
          for reviewers\n\n- Tests mock only `_get_cluster_segment_config_context`
          (the NetBox I/O\n  boundary) and exercise the pure resolution logic, consistent
          with the\n  deferral of full pynetbox fixtures to #232.\n- `example/` is
          gilt-overlaid from `osism/testbed` and was intentionally left\n  untouched;
          config contexts are not represented in those resource files.\n\n\U0001F916
          Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/netbox-manager/pull/246
        commit_id: 254d602fe839c54bafd699c28d3efce8d36ec259
        patchset: 254d602fe839c54bafd699c28d3efce8d36ec259
        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: flake8
      jobtags: []
      max_attempts: 3
      message: TWFrZSBzZWdtZW50IGludGVyZmFjZSBsYWJlbCBjb25maWd1cmFibGUKCiMjIFN1bW1hcnkKCkNsb3NlcyAjMjIwLgoKTWFrZSB0aGUgZGV2aWNlIGludGVyZmFjZSBsYWJlbCBjb25maWd1cmFibGUgb24gdGhlICoqc2VnbWVudCBsZXZlbCoqIHZpYSB0aGUKbmV3IHNlZ21lbnQgY29uZmlnIGNvbnRleHQga2V5IGBfc2VnbWVudF9kZXZpY2VfaW50ZXJmYWNlX2xhYmVsYCwgaW4gYWRkaXRpb24gdG8KdGhlIGV4aXN0aW5nIHBlci1kZXZpY2UgYGRldmljZV9pbnRlcmZhY2VfbGFiZWxgIGN1c3RvbSBmaWVsZC4gVGhlIGxhYmVsIG5vCmxvbmdlciBoYXMgdG8gYmUgc2V0IG9uIGV2ZXJ5IHNvdXJjZSBkZXZpY2UgaW5kaXZpZHVhbGx5IHdoZW4gYSB3aG9sZSBzZWdtZW50CnNob3VsZCBzaGFyZSBvbmUgbGFiZWwuCgpUaGUgcGVyLWRldmljZSBjdXN0b20gZmllbGQga2VlcHMgKipwcmVjZWRlbmNlKio6IHRoZSBzZWdtZW50LWxldmVsIHZhbHVlIGlzIHVzZWQKb25seSBhcyBhIGZhbGxiYWNrIHdoZW4gYGRldmljZV9pbnRlcmZhY2VfbGFiZWxgIGlzIG5vdCBzZXQgb24gdGhlIGRldmljZS4gVGhlCmNoYW5nZSBpcyBwdXJlbHkgYWRkaXRpdmUg4oCUIHNldHVwcyB0aGF0IGRvIG5vdCBkZWZpbmUgdGhlIG5ldyBrZXkga2VlcCB0aGVpcgpjdXJyZW50IGJlaGF2aW9yLgoKIyMgQ2hhbmdlIHNldCAoaW4gY29tbWl0IG9yZGVyKQoKMS4gKipBZGQgc2VnbWVudC1sZXZlbCBkZXZpY2UgaW50ZXJmYWNlIGxhYmVsIGZhbGxiYWNrKioKICAgLSBOZXcgaGVscGVyIGBfcmVzb2x2ZV9kZXZpY2VfaW50ZXJmYWNlX2xhYmVsKG5ldGJveF9hcGksIGRldmljZSwgc2VnbWVudF9sYWJlbF9jYWNoZSlgCiAgICAgaW4gYG5ldGJveF9tYW5hZ2VyL21haW4ucHlgLiBJdCByZXR1cm5zIHRoZSBkZXZpY2UncyBgZGV2aWNlX2ludGVyZmFjZV9sYWJlbGAKICAgICBjdXN0b20gZmllbGQgd2hlbiBzZXQsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHRoZQogICAgIGBfc2VnbWVudF9kZXZpY2VfaW50ZXJmYWNlX2xhYmVsYCBrZXkgb2YgdGhlIGRldmljZSdzIHNlZ21lbnQgKGNsdXN0ZXIpCiAgICAgY29uZmlnIGNvbnRleHQsIHJlYWQgdmlhIHRoZSBleGlzdGluZyBgX2dldF9jbHVzdGVyX3NlZ21lbnRfY29uZmlnX2NvbnRleHQoKWAKICAgICDigJQgdGhlIHNhbWUgbWVjaGFuaXNtIGFscmVhZHkgdXNlZCBmb3IgdGhlIGBfc2VnbWVudF9sb29wYmFja18qYCBwYXJhbWV0ZXJzCiAgICAgKCMxNjYpLiBDb25maWcgY29udGV4dHMgYXJlIGZldGNoZWQgYXQgbW9zdCBvbmNlIHBlciBjbHVzdGVyIHZpYSBhIHNtYWxsCiAgICAgcGVyLXJ1biBjYWNoZS4KICAgLSBgX2dlbmVyYXRlX2RldmljZV9pbnRlcmZhY2VfbGFiZWxzKClgIG5vdyByZXNvbHZlcyB0aGUgbGFiZWwgdGhyb3VnaCB0aGlzCiAgICAgaGVscGVyIGZvciBldmVyeSBwYXJ0aWNpcGF0aW5nIHNvdXJjZSBkZXZpY2UgKHN3aXRjaC9yb3V0ZXIvZmlyZXdhbGwpLAogICAgIGluZGVwZW5kZW50IG9mIHdoaWNoIG9mIHRob3NlIHJvbGVzIGl0IGhhcy4KICAgLSBVcGRhdGVkIHRoZSBgYXV0b2NvbmZgIGNvbW1hbmQgZG9jc3RyaW5nIHRvIG1lbnRpb24gdGhlIG5ldyBzb3VyY2UuCiAgIC0gVW5pdCB0ZXN0cyBpbiBgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X3NlZ21lbnRfaW50ZXJmYWNlX2xhYmVsLnB5YAogICAgIGNvdmVyIHByZWNlZGVuY2UsIGVtcHR5LWN1c3RvbS1maWVsZCBmYWxsYmFjaywgdGhlIG5vLWxhYmVsIGFuZCBuby1jbHVzdGVyCiAgICAgcGF0aHMsIGFuZCBwZXItY2x1c3RlciBjYWNoaW5nIChpbmNsdWRpbmcgY2FjaGluZyBvZiBhbiBhYnNlbnQga2V5KS4KCjIuICoqRG9jdW1lbnQgYF9zZWdtZW50X2RldmljZV9pbnRlcmZhY2VfbGFiZWxgIGluIGNoYW5nZWxvZyoqCiAgIC0gTmV3IGBVbnJlbGVhc2VkYCDihpIgYEFkZGVkYCBlbnRyeSBpbiBgQ0hBTkdFTE9HLm1kYC4KCiMjIEhvdyBwcmVjZWRlbmNlIGlzIHJlc29sdmVkCgp8IERldmljZSBgZGV2aWNlX2ludGVyZmFjZV9sYWJlbGAgfCBTZWdtZW50IGBfc2VnbWVudF9kZXZpY2VfaW50ZXJmYWNlX2xhYmVsYCB8IFJlc3VsdCB8CnwtLS18LS0tfC0tLXwKfCBzZXQgfCAoYW55KSB8IGRldmljZSB2YWx1ZSB8CnwgdW5zZXQgfCBzZXQgfCBzZWdtZW50IHZhbHVlIHwKfCB1bnNldCB8IHVuc2V0IC8gbm8gY2x1c3RlciB8IG5vIGxhYmVsICh1bmNoYW5nZWQgYmVoYXZpb3IpIHwKCiMjIFZlcmlmaWNhdGlvbgoKLSBgcHl0ZXN0IHRlc3RzL3VuaXRgIOKAlCAxMSBwYXNzZWQKLSBgZmxha2U4IG5ldGJveF9tYW5hZ2VyLyB0ZXN0cy9gIOKAlCBjbGVhbgotIGBibGFjayAtLWNoZWNrIG5ldGJveF9tYW5hZ2VyLyB0ZXN0cy9gIOKAlCBjbGVhbgotIGBteXB5IG5ldGJveF9tYW5hZ2VyL2Ag4oCUIG5vIG5ldyBlcnJvcnMgKG9ubHkgdGhlIHByZS1leGlzdGluZyB0aGlyZC1wYXJ0eQogIGBpbXBvcnQtdW50eXBlZGAgd2FybmluZ3MgcHJlc2VudCBvbiBgbWFpbmApCgojIyBOb3RlcyBmb3IgcmV2aWV3ZXJzCgotIFRlc3RzIG1vY2sgb25seSBgX2dldF9jbHVzdGVyX3NlZ21lbnRfY29uZmlnX2NvbnRleHRgICh0aGUgTmV0Qm94IEkvTwogIGJvdW5kYXJ5KSBhbmQgZXhlcmNpc2UgdGhlIHB1cmUgcmVzb2x1dGlvbiBsb2dpYywgY29uc2lzdGVudCB3aXRoIHRoZQogIGRlZmVycmFsIG9mIGZ1bGwgcHluZXRib3ggZml4dHVyZXMgdG8gIzIzMi4KLSBgZXhhbXBsZS9gIGlzIGdpbHQtb3ZlcmxhaWQgZnJvbSBgb3Npc20vdGVzdGJlZGAgYW5kIHdhcyBpbnRlbnRpb25hbGx5IGxlZnQKICB1bnRvdWNoZWQ7IGNvbmZpZyBjb250ZXh0cyBhcmUgbm90IHJlcHJlc2VudGVkIGluIHRob3NlIHJlc291cmNlIGZpbGVzLgoK8J+kliBHZW5lcmF0ZWQgd2l0aCBbQ2xhdWRlIENvZGVdKGh0dHBzOi8vY2xhdWRlLmNvbS9jbGF1ZGUtY29kZSkK
      patchset: 254d602fe839c54bafd699c28d3efce8d36ec259
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/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: 019f0261a526db7d8989ff1abefc2299a8c0ffbc
          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/flake8/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: null
      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: 52f11dd946f0c231a42735eb2eca86e864b73e07
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/246/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
