all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe87:8c
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: f0b66797-7d15-4d9c-8f61-76a90e46001c
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe87:8c
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.0.110
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.107
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe87:8c
        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#39>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 86980a910021407dbd046225691d7881
      build_refs:
      - branch: main
        change: '272'
        change_message: "Unit tests: Tier 6 \u2014 autoconf generation + dispatcher\n\n##
          Summary\n\nTier 6 of the #232 unit-test rollout: branch-level tests for
          the **autoconf data-collection helpers and the dispatcher** in `netbox_manager/main.py`.
          These functions walk a mocked `pynetbox.api` client to collect interface
          MAC and device IP assignments, assemble them into per-device autoconf tasks,
          and route the assembled `tasks_by_type` payload either to disk or to a dry-run
          preview.\n\nTest-only change \u2014 no production code is touched. `1018`
          insertions across `tests/conftest.py` and two new test modules.\n\nCloses
          #254\n\n## Change set (in commit order)\n\n### 1. `3b5db9c` Extend shared
          test factories with autoconf pynetbox shapes\nAdditive extensions to `tests/conftest.py`:\n-
          `make_device` gains a `device_id` keyword (defaults to `None`, so Tier 1
          callers are unaffected) \u2014 the `device.id` key `_generate_autoconf_tasks`
          builds its device dicts from.\n- `make_interface` gains `name` / `interface_id`
          / `mac_address` / `mac_addresses` keywords \u2014 the attributes the autoconf
          collectors read (`mac_addresses` defaults to `[]` so the collector's falsy
          check works without a guard).\n- New `make_autoconf_api` factory: a fake
          `pynetbox.api` client exposing exactly the three read-only endpoints the
          collectors touch \u2014 `dcim.devices.all()`, `dcim.interfaces.filter(device_id,
          name=...)`, and `ipam.ip_addresses.filter(assigned_object_id)`.\n\n### 2.
          `98e98cb` Add unit tests for the autoconf collectors\n`tests/unit/netbox_manager/test_autoconf_collect.py`
          \u2014 covers issue groups 1\u20133:\n- `collect_interface_assignments`:
          virtual-interface skip, direct vs. fallback MAC resolution, no-MAC skip,
          emitted task shape, name-sorted ordering.\n- `collect_ip_assignments_by_interface`:
          OOB vs. primary IPv4/IPv6 routing, per-device grouping and multi-IP merge,
          no-match / empty input, ordering.\n- `_generate_autoconf_tasks`: switch/non-switch
          split, interface bucket over all devices, OOB+primary per-device merge,
          sorted device bucket, returned bucket keys.\n\n### 3. `6c37692` Add unit
          tests for the autoconf dispatcher\n`tests/unit/netbox_manager/test_autoconf_dispatch.py`
          \u2014 covers issue group 4 (`_run_autoconf_for_devices`) with the five
          generators patched to fixed task lists/dicts:\n- interface-label merge (label
          side wins on overlap, autoconf-only passthrough, label-only leftovers appended
          last);\n- `device`/`ip_address` bucket passthrough;\n- device filter applied
          across every task source (plus the `None` case that keeps everything);\n-
          dry-run preview returning `0` without writing;\n- file-write path routing
          the assembled payload into `_write_autoconf_files` (spied, and once run
          for real over `tmp_path`);\n- the two empty-after-filter / empty-generator
          short-circuits.\n\n## Notes for the reviewer\n\n- No divergence from the
          issue scope: the generators, `_write_autoconf_files` internals, and the
          pure Tier 1 helpers are out of scope and are patched/stubbed rather than
          exercised, as the issue directs.\n- New shared fixtures are documented inline
          in `conftest.py` for reuse by later tiers (the docstring flags that #255
          validation will add `ipam.prefixes` / `dcim.interfaces.get` on top of `make_autoconf_api`).\n"
        change_url: https://github.com/osism/netbox-manager/pull/272
        commit_id: 6c37692c92bd52c03124c333a587cf4317940b98
        patchset: 6c37692c92bd52c03124c333a587cf4317940b98
        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: 67ec99bbdcb24206ae2e8926aaab82a6
      buildset_refs:
      - branch: main
        change: '272'
        change_message: "Unit tests: Tier 6 \u2014 autoconf generation + dispatcher\n\n##
          Summary\n\nTier 6 of the #232 unit-test rollout: branch-level tests for
          the **autoconf data-collection helpers and the dispatcher** in `netbox_manager/main.py`.
          These functions walk a mocked `pynetbox.api` client to collect interface
          MAC and device IP assignments, assemble them into per-device autoconf tasks,
          and route the assembled `tasks_by_type` payload either to disk or to a dry-run
          preview.\n\nTest-only change \u2014 no production code is touched. `1018`
          insertions across `tests/conftest.py` and two new test modules.\n\nCloses
          #254\n\n## Change set (in commit order)\n\n### 1. `3b5db9c` Extend shared
          test factories with autoconf pynetbox shapes\nAdditive extensions to `tests/conftest.py`:\n-
          `make_device` gains a `device_id` keyword (defaults to `None`, so Tier 1
          callers are unaffected) \u2014 the `device.id` key `_generate_autoconf_tasks`
          builds its device dicts from.\n- `make_interface` gains `name` / `interface_id`
          / `mac_address` / `mac_addresses` keywords \u2014 the attributes the autoconf
          collectors read (`mac_addresses` defaults to `[]` so the collector's falsy
          check works without a guard).\n- New `make_autoconf_api` factory: a fake
          `pynetbox.api` client exposing exactly the three read-only endpoints the
          collectors touch \u2014 `dcim.devices.all()`, `dcim.interfaces.filter(device_id,
          name=...)`, and `ipam.ip_addresses.filter(assigned_object_id)`.\n\n### 2.
          `98e98cb` Add unit tests for the autoconf collectors\n`tests/unit/netbox_manager/test_autoconf_collect.py`
          \u2014 covers issue groups 1\u20133:\n- `collect_interface_assignments`:
          virtual-interface skip, direct vs. fallback MAC resolution, no-MAC skip,
          emitted task shape, name-sorted ordering.\n- `collect_ip_assignments_by_interface`:
          OOB vs. primary IPv4/IPv6 routing, per-device grouping and multi-IP merge,
          no-match / empty input, ordering.\n- `_generate_autoconf_tasks`: switch/non-switch
          split, interface bucket over all devices, OOB+primary per-device merge,
          sorted device bucket, returned bucket keys.\n\n### 3. `6c37692` Add unit
          tests for the autoconf dispatcher\n`tests/unit/netbox_manager/test_autoconf_dispatch.py`
          \u2014 covers issue group 4 (`_run_autoconf_for_devices`) with the five
          generators patched to fixed task lists/dicts:\n- interface-label merge (label
          side wins on overlap, autoconf-only passthrough, label-only leftovers appended
          last);\n- `device`/`ip_address` bucket passthrough;\n- device filter applied
          across every task source (plus the `None` case that keeps everything);\n-
          dry-run preview returning `0` without writing;\n- file-write path routing
          the assembled payload into `_write_autoconf_files` (spied, and once run
          for real over `tmp_path`);\n- the two empty-after-filter / empty-generator
          short-circuits.\n\n## Notes for the reviewer\n\n- No divergence from the
          issue scope: the generators, `_write_autoconf_files` internals, and the
          pure Tier 1 helpers are out of scope and are patched/stubbed rather than
          exercised, as the issue directs.\n- New shared fixtures are documented inline
          in `conftest.py` for reuse by later tiers (the docstring flags that #255
          validation will add `ipam.prefixes` / `dcim.interfaces.get` on top of `make_autoconf_api`).\n"
        change_url: https://github.com/osism/netbox-manager/pull/272
        commit_id: 6c37692c92bd52c03124c333a587cf4317940b98
        patchset: 6c37692c92bd52c03124c333a587cf4317940b98
        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: '272'
      change_message: "Unit tests: Tier 6 \u2014 autoconf generation + dispatcher\n\n##
        Summary\n\nTier 6 of the #232 unit-test rollout: branch-level tests for the
        **autoconf data-collection helpers and the dispatcher** in `netbox_manager/main.py`.
        These functions walk a mocked `pynetbox.api` client to collect interface MAC
        and device IP assignments, assemble them into per-device autoconf tasks, and
        route the assembled `tasks_by_type` payload either to disk or to a dry-run
        preview.\n\nTest-only change \u2014 no production code is touched. `1018`
        insertions across `tests/conftest.py` and two new test modules.\n\nCloses
        #254\n\n## Change set (in commit order)\n\n### 1. `3b5db9c` Extend shared
        test factories with autoconf pynetbox shapes\nAdditive extensions to `tests/conftest.py`:\n-
        `make_device` gains a `device_id` keyword (defaults to `None`, so Tier 1 callers
        are unaffected) \u2014 the `device.id` key `_generate_autoconf_tasks` builds
        its device dicts from.\n- `make_interface` gains `name` / `interface_id` /
        `mac_address` / `mac_addresses` keywords \u2014 the attributes the autoconf
        collectors read (`mac_addresses` defaults to `[]` so the collector's falsy
        check works without a guard).\n- New `make_autoconf_api` factory: a fake `pynetbox.api`
        client exposing exactly the three read-only endpoints the collectors touch
        \u2014 `dcim.devices.all()`, `dcim.interfaces.filter(device_id, name=...)`,
        and `ipam.ip_addresses.filter(assigned_object_id)`.\n\n### 2. `98e98cb` Add
        unit tests for the autoconf collectors\n`tests/unit/netbox_manager/test_autoconf_collect.py`
        \u2014 covers issue groups 1\u20133:\n- `collect_interface_assignments`: virtual-interface
        skip, direct vs. fallback MAC resolution, no-MAC skip, emitted task shape,
        name-sorted ordering.\n- `collect_ip_assignments_by_interface`: OOB vs. primary
        IPv4/IPv6 routing, per-device grouping and multi-IP merge, no-match / empty
        input, ordering.\n- `_generate_autoconf_tasks`: switch/non-switch split, interface
        bucket over all devices, OOB+primary per-device merge, sorted device bucket,
        returned bucket keys.\n\n### 3. `6c37692` Add unit tests for the autoconf
        dispatcher\n`tests/unit/netbox_manager/test_autoconf_dispatch.py` \u2014 covers
        issue group 4 (`_run_autoconf_for_devices`) with the five generators patched
        to fixed task lists/dicts:\n- interface-label merge (label side wins on overlap,
        autoconf-only passthrough, label-only leftovers appended last);\n- `device`/`ip_address`
        bucket passthrough;\n- device filter applied across every task source (plus
        the `None` case that keeps everything);\n- dry-run preview returning `0` without
        writing;\n- file-write path routing the assembled payload into `_write_autoconf_files`
        (spied, and once run for real over `tmp_path`);\n- the two empty-after-filter
        / empty-generator short-circuits.\n\n## Notes for the reviewer\n\n- No divergence
        from the issue scope: the generators, `_write_autoconf_files` internals, and
        the pure Tier 1 helpers are out of scope and are patched/stubbed rather than
        exercised, as the issue directs.\n- New shared fixtures are documented inline
        in `conftest.py` for reuse by later tiers (the docstring flags that #255 validation
        will add `ipam.prefixes` / `dcim.interfaces.get` on top of `make_autoconf_api`).\n"
      change_url: https://github.com/osism/netbox-manager/pull/272
      child_jobs: []
      commit_id: 6c37692c92bd52c03124c333a587cf4317940b98
      event_id: ecca2e90-76d9-11f1-9a67-b39a466360a3
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/86980a910021407dbd046225691d7881/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/86980a910021407dbd046225691d7881/work/logs
        result_data_file: /var/lib/zuul/builds/86980a910021407dbd046225691d7881/work/results.json
        src_root: /var/lib/zuul/builds/86980a910021407dbd046225691d7881/work/src
        work_root: /var/lib/zuul/builds/86980a910021407dbd046225691d7881/work
      include_vars: []
      items:
      - branch: main
        change: '272'
        change_message: "Unit tests: Tier 6 \u2014 autoconf generation + dispatcher\n\n##
          Summary\n\nTier 6 of the #232 unit-test rollout: branch-level tests for
          the **autoconf data-collection helpers and the dispatcher** in `netbox_manager/main.py`.
          These functions walk a mocked `pynetbox.api` client to collect interface
          MAC and device IP assignments, assemble them into per-device autoconf tasks,
          and route the assembled `tasks_by_type` payload either to disk or to a dry-run
          preview.\n\nTest-only change \u2014 no production code is touched. `1018`
          insertions across `tests/conftest.py` and two new test modules.\n\nCloses
          #254\n\n## Change set (in commit order)\n\n### 1. `3b5db9c` Extend shared
          test factories with autoconf pynetbox shapes\nAdditive extensions to `tests/conftest.py`:\n-
          `make_device` gains a `device_id` keyword (defaults to `None`, so Tier 1
          callers are unaffected) \u2014 the `device.id` key `_generate_autoconf_tasks`
          builds its device dicts from.\n- `make_interface` gains `name` / `interface_id`
          / `mac_address` / `mac_addresses` keywords \u2014 the attributes the autoconf
          collectors read (`mac_addresses` defaults to `[]` so the collector's falsy
          check works without a guard).\n- New `make_autoconf_api` factory: a fake
          `pynetbox.api` client exposing exactly the three read-only endpoints the
          collectors touch \u2014 `dcim.devices.all()`, `dcim.interfaces.filter(device_id,
          name=...)`, and `ipam.ip_addresses.filter(assigned_object_id)`.\n\n### 2.
          `98e98cb` Add unit tests for the autoconf collectors\n`tests/unit/netbox_manager/test_autoconf_collect.py`
          \u2014 covers issue groups 1\u20133:\n- `collect_interface_assignments`:
          virtual-interface skip, direct vs. fallback MAC resolution, no-MAC skip,
          emitted task shape, name-sorted ordering.\n- `collect_ip_assignments_by_interface`:
          OOB vs. primary IPv4/IPv6 routing, per-device grouping and multi-IP merge,
          no-match / empty input, ordering.\n- `_generate_autoconf_tasks`: switch/non-switch
          split, interface bucket over all devices, OOB+primary per-device merge,
          sorted device bucket, returned bucket keys.\n\n### 3. `6c37692` Add unit
          tests for the autoconf dispatcher\n`tests/unit/netbox_manager/test_autoconf_dispatch.py`
          \u2014 covers issue group 4 (`_run_autoconf_for_devices`) with the five
          generators patched to fixed task lists/dicts:\n- interface-label merge (label
          side wins on overlap, autoconf-only passthrough, label-only leftovers appended
          last);\n- `device`/`ip_address` bucket passthrough;\n- device filter applied
          across every task source (plus the `None` case that keeps everything);\n-
          dry-run preview returning `0` without writing;\n- file-write path routing
          the assembled payload into `_write_autoconf_files` (spied, and once run
          for real over `tmp_path`);\n- the two empty-after-filter / empty-generator
          short-circuits.\n\n## Notes for the reviewer\n\n- No divergence from the
          issue scope: the generators, `_write_autoconf_files` internals, and the
          pure Tier 1 helpers are out of scope and are patched/stubbed rather than
          exercised, as the issue directs.\n- New shared fixtures are documented inline
          in `conftest.py` for reuse by later tiers (the docstring flags that #255
          validation will add `ipam.prefixes` / `dcim.interfaces.get` on top of `make_autoconf_api`).\n"
        change_url: https://github.com/osism/netbox-manager/pull/272
        commit_id: 6c37692c92bd52c03124c333a587cf4317940b98
        patchset: 6c37692c92bd52c03124c333a587cf4317940b98
        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: VW5pdCB0ZXN0czogVGllciA2IOKAlCBhdXRvY29uZiBnZW5lcmF0aW9uICsgZGlzcGF0Y2hlcgoKIyMgU3VtbWFyeQoKVGllciA2IG9mIHRoZSAjMjMyIHVuaXQtdGVzdCByb2xsb3V0OiBicmFuY2gtbGV2ZWwgdGVzdHMgZm9yIHRoZSAqKmF1dG9jb25mIGRhdGEtY29sbGVjdGlvbiBoZWxwZXJzIGFuZCB0aGUgZGlzcGF0Y2hlcioqIGluIGBuZXRib3hfbWFuYWdlci9tYWluLnB5YC4gVGhlc2UgZnVuY3Rpb25zIHdhbGsgYSBtb2NrZWQgYHB5bmV0Ym94LmFwaWAgY2xpZW50IHRvIGNvbGxlY3QgaW50ZXJmYWNlIE1BQyBhbmQgZGV2aWNlIElQIGFzc2lnbm1lbnRzLCBhc3NlbWJsZSB0aGVtIGludG8gcGVyLWRldmljZSBhdXRvY29uZiB0YXNrcywgYW5kIHJvdXRlIHRoZSBhc3NlbWJsZWQgYHRhc2tzX2J5X3R5cGVgIHBheWxvYWQgZWl0aGVyIHRvIGRpc2sgb3IgdG8gYSBkcnktcnVuIHByZXZpZXcuCgpUZXN0LW9ubHkgY2hhbmdlIOKAlCBubyBwcm9kdWN0aW9uIGNvZGUgaXMgdG91Y2hlZC4gYDEwMThgIGluc2VydGlvbnMgYWNyb3NzIGB0ZXN0cy9jb25mdGVzdC5weWAgYW5kIHR3byBuZXcgdGVzdCBtb2R1bGVzLgoKQ2xvc2VzICMyNTQKCiMjIENoYW5nZSBzZXQgKGluIGNvbW1pdCBvcmRlcikKCiMjIyAxLiBgM2I1ZGI5Y2AgRXh0ZW5kIHNoYXJlZCB0ZXN0IGZhY3RvcmllcyB3aXRoIGF1dG9jb25mIHB5bmV0Ym94IHNoYXBlcwpBZGRpdGl2ZSBleHRlbnNpb25zIHRvIGB0ZXN0cy9jb25mdGVzdC5weWA6Ci0gYG1ha2VfZGV2aWNlYCBnYWlucyBhIGBkZXZpY2VfaWRgIGtleXdvcmQgKGRlZmF1bHRzIHRvIGBOb25lYCwgc28gVGllciAxIGNhbGxlcnMgYXJlIHVuYWZmZWN0ZWQpIOKAlCB0aGUgYGRldmljZS5pZGAga2V5IGBfZ2VuZXJhdGVfYXV0b2NvbmZfdGFza3NgIGJ1aWxkcyBpdHMgZGV2aWNlIGRpY3RzIGZyb20uCi0gYG1ha2VfaW50ZXJmYWNlYCBnYWlucyBgbmFtZWAgLyBgaW50ZXJmYWNlX2lkYCAvIGBtYWNfYWRkcmVzc2AgLyBgbWFjX2FkZHJlc3Nlc2Aga2V5d29yZHMg4oCUIHRoZSBhdHRyaWJ1dGVzIHRoZSBhdXRvY29uZiBjb2xsZWN0b3JzIHJlYWQgKGBtYWNfYWRkcmVzc2VzYCBkZWZhdWx0cyB0byBgW11gIHNvIHRoZSBjb2xsZWN0b3IncyBmYWxzeSBjaGVjayB3b3JrcyB3aXRob3V0IGEgZ3VhcmQpLgotIE5ldyBgbWFrZV9hdXRvY29uZl9hcGlgIGZhY3Rvcnk6IGEgZmFrZSBgcHluZXRib3guYXBpYCBjbGllbnQgZXhwb3NpbmcgZXhhY3RseSB0aGUgdGhyZWUgcmVhZC1vbmx5IGVuZHBvaW50cyB0aGUgY29sbGVjdG9ycyB0b3VjaCDigJQgYGRjaW0uZGV2aWNlcy5hbGwoKWAsIGBkY2ltLmludGVyZmFjZXMuZmlsdGVyKGRldmljZV9pZCwgbmFtZT0uLi4pYCwgYW5kIGBpcGFtLmlwX2FkZHJlc3Nlcy5maWx0ZXIoYXNzaWduZWRfb2JqZWN0X2lkKWAuCgojIyMgMi4gYDk4ZTk4Y2JgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUgYXV0b2NvbmYgY29sbGVjdG9ycwpgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X2F1dG9jb25mX2NvbGxlY3QucHlgIOKAlCBjb3ZlcnMgaXNzdWUgZ3JvdXBzIDHigJMzOgotIGBjb2xsZWN0X2ludGVyZmFjZV9hc3NpZ25tZW50c2A6IHZpcnR1YWwtaW50ZXJmYWNlIHNraXAsIGRpcmVjdCB2cy4gZmFsbGJhY2sgTUFDIHJlc29sdXRpb24sIG5vLU1BQyBza2lwLCBlbWl0dGVkIHRhc2sgc2hhcGUsIG5hbWUtc29ydGVkIG9yZGVyaW5nLgotIGBjb2xsZWN0X2lwX2Fzc2lnbm1lbnRzX2J5X2ludGVyZmFjZWA6IE9PQiB2cy4gcHJpbWFyeSBJUHY0L0lQdjYgcm91dGluZywgcGVyLWRldmljZSBncm91cGluZyBhbmQgbXVsdGktSVAgbWVyZ2UsIG5vLW1hdGNoIC8gZW1wdHkgaW5wdXQsIG9yZGVyaW5nLgotIGBfZ2VuZXJhdGVfYXV0b2NvbmZfdGFza3NgOiBzd2l0Y2gvbm9uLXN3aXRjaCBzcGxpdCwgaW50ZXJmYWNlIGJ1Y2tldCBvdmVyIGFsbCBkZXZpY2VzLCBPT0IrcHJpbWFyeSBwZXItZGV2aWNlIG1lcmdlLCBzb3J0ZWQgZGV2aWNlIGJ1Y2tldCwgcmV0dXJuZWQgYnVja2V0IGtleXMuCgojIyMgMy4gYDZjMzc2OTJgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUgYXV0b2NvbmYgZGlzcGF0Y2hlcgpgdGVzdHMvdW5pdC9uZXRib3hfbWFuYWdlci90ZXN0X2F1dG9jb25mX2Rpc3BhdGNoLnB5YCDigJQgY292ZXJzIGlzc3VlIGdyb3VwIDQgKGBfcnVuX2F1dG9jb25mX2Zvcl9kZXZpY2VzYCkgd2l0aCB0aGUgZml2ZSBnZW5lcmF0b3JzIHBhdGNoZWQgdG8gZml4ZWQgdGFzayBsaXN0cy9kaWN0czoKLSBpbnRlcmZhY2UtbGFiZWwgbWVyZ2UgKGxhYmVsIHNpZGUgd2lucyBvbiBvdmVybGFwLCBhdXRvY29uZi1vbmx5IHBhc3N0aHJvdWdoLCBsYWJlbC1vbmx5IGxlZnRvdmVycyBhcHBlbmRlZCBsYXN0KTsKLSBgZGV2aWNlYC9gaXBfYWRkcmVzc2AgYnVja2V0IHBhc3N0aHJvdWdoOwotIGRldmljZSBmaWx0ZXIgYXBwbGllZCBhY3Jvc3MgZXZlcnkgdGFzayBzb3VyY2UgKHBsdXMgdGhlIGBOb25lYCBjYXNlIHRoYXQga2VlcHMgZXZlcnl0aGluZyk7Ci0gZHJ5LXJ1biBwcmV2aWV3IHJldHVybmluZyBgMGAgd2l0aG91dCB3cml0aW5nOwotIGZpbGUtd3JpdGUgcGF0aCByb3V0aW5nIHRoZSBhc3NlbWJsZWQgcGF5bG9hZCBpbnRvIGBfd3JpdGVfYXV0b2NvbmZfZmlsZXNgIChzcGllZCwgYW5kIG9uY2UgcnVuIGZvciByZWFsIG92ZXIgYHRtcF9wYXRoYCk7Ci0gdGhlIHR3byBlbXB0eS1hZnRlci1maWx0ZXIgLyBlbXB0eS1nZW5lcmF0b3Igc2hvcnQtY2lyY3VpdHMuCgojIyBOb3RlcyBmb3IgdGhlIHJldmlld2VyCgotIE5vIGRpdmVyZ2VuY2UgZnJvbSB0aGUgaXNzdWUgc2NvcGU6IHRoZSBnZW5lcmF0b3JzLCBgX3dyaXRlX2F1dG9jb25mX2ZpbGVzYCBpbnRlcm5hbHMsIGFuZCB0aGUgcHVyZSBUaWVyIDEgaGVscGVycyBhcmUgb3V0IG9mIHNjb3BlIGFuZCBhcmUgcGF0Y2hlZC9zdHViYmVkIHJhdGhlciB0aGFuIGV4ZXJjaXNlZCwgYXMgdGhlIGlzc3VlIGRpcmVjdHMuCi0gTmV3IHNoYXJlZCBmaXh0dXJlcyBhcmUgZG9jdW1lbnRlZCBpbmxpbmUgaW4gYGNvbmZ0ZXN0LnB5YCBmb3IgcmV1c2UgYnkgbGF0ZXIgdGllcnMgKHRoZSBkb2NzdHJpbmcgZmxhZ3MgdGhhdCAjMjU1IHZhbGlkYXRpb24gd2lsbCBhZGQgYGlwYW0ucHJlZml4ZXNgIC8gYGRjaW0uaW50ZXJmYWNlcy5nZXRgIG9uIHRvcCBvZiBgbWFrZV9hdXRvY29uZl9hcGlgKS4K
      patchset: 6c37692c92bd52c03124c333a587cf4317940b98
      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/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: 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: ef03b61289b19631824a7986d89b8c70a0dd8562
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/272/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
