all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe04:a7be
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 420b2efa-49c5-4556-9813-7e98bcff9a3c
        host_id: 4ba4344415ca7057d9956ea5de826bbc0b830981e82c0e0f191fa07b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe04:a7be
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.51
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.143
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe04:a7be
        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: 2575e8af972346fb80402b9b2056f127
      build_refs:
      - branch: main
        change: '271'
        change_message: "Add Tier 5 unit tests: loopback / cluster / interface-label
          / portchannel generators\n\nCloses #253\n\nTier 5 of the #232 unit-test
          rollout. This is a **test-only** change \u2014 no production code in `netbox_manager/main.py`
          is touched. It adds unit tests for the loopback / cluster / interface-label
          / portchannel task generators and the pynetbox fixtures they need.\n\nThe
          generators all read NetBox through `create_netbox_api()`, so the work starts
          by adding a fake read-only pynetbox client to the shared `conftest.py`,
          then covers each generator against it.\n\n### Change set (commit order)\n\n1.
          **`8416389` Add pynetbox generator mock fixtures to conftest** \u2014 Introduces
          the read seams the generators query: a recording `FakeNetBoxEndpoint` (records
          `all()` / `filter(**kwargs)` calls, supports a `filter_lookup` and a raisable
          `filter_error`) and the `make_netbox_api` factory that wires up `dcim.devices`,
          `dcim.interfaces`, and `extras.config_contexts`. Adds `make_cluster` and
          `make_config_context` attribute-bag factories, and extends the existing
          `make_device` / `make_interface` factories (from Tier 1, #247) with the
          keyword-only attributes the generators read (`device_id`, `cluster`, `position`;
          `name`, `interface_id`, `cable`, `connected_endpoints`, `device`) \u2014
          each defaulted so the pre-existing Tier 1 tests are unaffected. Fixture
          docstrings/header comment are updated to describe the Tier 5 seams.\n\n2.
          **`91717ab` Add unit tests for Loopback0 interface generation** \u2014 `test_loopback_generation.py`
          covers `_generate_loopback_interfaces`: one `device_interface` task per
          loopback-eligible device, exact task shape, device ordering, and the empty
          / all-ineligible cases. NODE_ROLES / SWITCH_ROLES are pinned via `main.settings`
          so eligibility is explicit; the gate helper itself remains covered by Tier
          1 (#247).\n\n3. **`e983c71` Add unit tests for cluster loopback IP generation**
          \u2014 `test_cluster_loopbacks.py` covers the cluster loopback pipeline
          end to end: `_get_cluster_segment_config_context` (name match, verbatim
          data, falsy data, no match, lookup exception), `group_devices_by_cluster`
          (bucketing by `cluster.id`), `calculate_loopback_ips` (position coercion,
          multiplicator/offset, IPv4/IPv6 mapping and their arithmetic-error branches),
          and `_generate_cluster_loopback_tasks` (happy path IPv4+IPv6, skip/drop
          branches, per-cluster exception swallowing).\n\n4. **`b11464a` Add unit
          tests for device interface label generation** \u2014 `test_interface_label_generation.py`
          covers `_generate_device_interface_labels`: router/firewall treated as sources
          while node-role devices never are, segment config-context-supplied labels,
          the FRR local-pref addition, skip branches, and disambiguation of duplicate
          labels on one node.\n\n5. **`3784aa7` Add unit tests for PortChannel task
          generation** \u2014 `test_portchannel_tasks.py` covers `_generate_portchannel_tasks`:
          LAG + member emission with connection dedup and numbering, single-connection
          / switch-to-node / uncabled / no-endpoint skip cases, PortChannel numbering
          fallback when the name has no digits, and LAG-before-member ordering sorted
          by device and name.\n\n### Notes for the reviewer\n\n- No divergence from
          the issue: all four generator groups named in #253 (plus the shared group-0
          fixtures) are covered.\n- The `make_device` / `make_interface` extensions
          are additive and keyword-only, so no existing test tier changes behavior.\n-
          Verified locally: all 50 tests in the four new files pass (`pytest`, 0.23s).\n"
        change_url: https://github.com/osism/netbox-manager/pull/271
        commit_id: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        patchset: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        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: 1ce92db1ab0945b2b8d037f95b03b00d
      buildset_refs:
      - branch: main
        change: '271'
        change_message: "Add Tier 5 unit tests: loopback / cluster / interface-label
          / portchannel generators\n\nCloses #253\n\nTier 5 of the #232 unit-test
          rollout. This is a **test-only** change \u2014 no production code in `netbox_manager/main.py`
          is touched. It adds unit tests for the loopback / cluster / interface-label
          / portchannel task generators and the pynetbox fixtures they need.\n\nThe
          generators all read NetBox through `create_netbox_api()`, so the work starts
          by adding a fake read-only pynetbox client to the shared `conftest.py`,
          then covers each generator against it.\n\n### Change set (commit order)\n\n1.
          **`8416389` Add pynetbox generator mock fixtures to conftest** \u2014 Introduces
          the read seams the generators query: a recording `FakeNetBoxEndpoint` (records
          `all()` / `filter(**kwargs)` calls, supports a `filter_lookup` and a raisable
          `filter_error`) and the `make_netbox_api` factory that wires up `dcim.devices`,
          `dcim.interfaces`, and `extras.config_contexts`. Adds `make_cluster` and
          `make_config_context` attribute-bag factories, and extends the existing
          `make_device` / `make_interface` factories (from Tier 1, #247) with the
          keyword-only attributes the generators read (`device_id`, `cluster`, `position`;
          `name`, `interface_id`, `cable`, `connected_endpoints`, `device`) \u2014
          each defaulted so the pre-existing Tier 1 tests are unaffected. Fixture
          docstrings/header comment are updated to describe the Tier 5 seams.\n\n2.
          **`91717ab` Add unit tests for Loopback0 interface generation** \u2014 `test_loopback_generation.py`
          covers `_generate_loopback_interfaces`: one `device_interface` task per
          loopback-eligible device, exact task shape, device ordering, and the empty
          / all-ineligible cases. NODE_ROLES / SWITCH_ROLES are pinned via `main.settings`
          so eligibility is explicit; the gate helper itself remains covered by Tier
          1 (#247).\n\n3. **`e983c71` Add unit tests for cluster loopback IP generation**
          \u2014 `test_cluster_loopbacks.py` covers the cluster loopback pipeline
          end to end: `_get_cluster_segment_config_context` (name match, verbatim
          data, falsy data, no match, lookup exception), `group_devices_by_cluster`
          (bucketing by `cluster.id`), `calculate_loopback_ips` (position coercion,
          multiplicator/offset, IPv4/IPv6 mapping and their arithmetic-error branches),
          and `_generate_cluster_loopback_tasks` (happy path IPv4+IPv6, skip/drop
          branches, per-cluster exception swallowing).\n\n4. **`b11464a` Add unit
          tests for device interface label generation** \u2014 `test_interface_label_generation.py`
          covers `_generate_device_interface_labels`: router/firewall treated as sources
          while node-role devices never are, segment config-context-supplied labels,
          the FRR local-pref addition, skip branches, and disambiguation of duplicate
          labels on one node.\n\n5. **`3784aa7` Add unit tests for PortChannel task
          generation** \u2014 `test_portchannel_tasks.py` covers `_generate_portchannel_tasks`:
          LAG + member emission with connection dedup and numbering, single-connection
          / switch-to-node / uncabled / no-endpoint skip cases, PortChannel numbering
          fallback when the name has no digits, and LAG-before-member ordering sorted
          by device and name.\n\n### Notes for the reviewer\n\n- No divergence from
          the issue: all four generator groups named in #253 (plus the shared group-0
          fixtures) are covered.\n- The `make_device` / `make_interface` extensions
          are additive and keyword-only, so no existing test tier changes behavior.\n-
          Verified locally: all 50 tests in the four new files pass (`pytest`, 0.23s).\n"
        change_url: https://github.com/osism/netbox-manager/pull/271
        commit_id: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        patchset: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        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: '271'
      change_message: "Add Tier 5 unit tests: loopback / cluster / interface-label
        / portchannel generators\n\nCloses #253\n\nTier 5 of the #232 unit-test rollout.
        This is a **test-only** change \u2014 no production code in `netbox_manager/main.py`
        is touched. It adds unit tests for the loopback / cluster / interface-label
        / portchannel task generators and the pynetbox fixtures they need.\n\nThe
        generators all read NetBox through `create_netbox_api()`, so the work starts
        by adding a fake read-only pynetbox client to the shared `conftest.py`, then
        covers each generator against it.\n\n### Change set (commit order)\n\n1. **`8416389`
        Add pynetbox generator mock fixtures to conftest** \u2014 Introduces the read
        seams the generators query: a recording `FakeNetBoxEndpoint` (records `all()`
        / `filter(**kwargs)` calls, supports a `filter_lookup` and a raisable `filter_error`)
        and the `make_netbox_api` factory that wires up `dcim.devices`, `dcim.interfaces`,
        and `extras.config_contexts`. Adds `make_cluster` and `make_config_context`
        attribute-bag factories, and extends the existing `make_device` / `make_interface`
        factories (from Tier 1, #247) with the keyword-only attributes the generators
        read (`device_id`, `cluster`, `position`; `name`, `interface_id`, `cable`,
        `connected_endpoints`, `device`) \u2014 each defaulted so the pre-existing
        Tier 1 tests are unaffected. Fixture docstrings/header comment are updated
        to describe the Tier 5 seams.\n\n2. **`91717ab` Add unit tests for Loopback0
        interface generation** \u2014 `test_loopback_generation.py` covers `_generate_loopback_interfaces`:
        one `device_interface` task per loopback-eligible device, exact task shape,
        device ordering, and the empty / all-ineligible cases. NODE_ROLES / SWITCH_ROLES
        are pinned via `main.settings` so eligibility is explicit; the gate helper
        itself remains covered by Tier 1 (#247).\n\n3. **`e983c71` Add unit tests
        for cluster loopback IP generation** \u2014 `test_cluster_loopbacks.py` covers
        the cluster loopback pipeline end to end: `_get_cluster_segment_config_context`
        (name match, verbatim data, falsy data, no match, lookup exception), `group_devices_by_cluster`
        (bucketing by `cluster.id`), `calculate_loopback_ips` (position coercion,
        multiplicator/offset, IPv4/IPv6 mapping and their arithmetic-error branches),
        and `_generate_cluster_loopback_tasks` (happy path IPv4+IPv6, skip/drop branches,
        per-cluster exception swallowing).\n\n4. **`b11464a` Add unit tests for device
        interface label generation** \u2014 `test_interface_label_generation.py` covers
        `_generate_device_interface_labels`: router/firewall treated as sources while
        node-role devices never are, segment config-context-supplied labels, the FRR
        local-pref addition, skip branches, and disambiguation of duplicate labels
        on one node.\n\n5. **`3784aa7` Add unit tests for PortChannel task generation**
        \u2014 `test_portchannel_tasks.py` covers `_generate_portchannel_tasks`: LAG
        + member emission with connection dedup and numbering, single-connection /
        switch-to-node / uncabled / no-endpoint skip cases, PortChannel numbering
        fallback when the name has no digits, and LAG-before-member ordering sorted
        by device and name.\n\n### Notes for the reviewer\n\n- No divergence from
        the issue: all four generator groups named in #253 (plus the shared group-0
        fixtures) are covered.\n- The `make_device` / `make_interface` extensions
        are additive and keyword-only, so no existing test tier changes behavior.\n-
        Verified locally: all 50 tests in the four new files pass (`pytest`, 0.23s).\n"
      change_url: https://github.com/osism/netbox-manager/pull/271
      child_jobs: []
      commit_id: 3784aa728a9a9396675b7b2813e7609bfd76ce71
      event_id: aad9a290-76d4-11f1-8bc0-00b6da293c78
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/2575e8af972346fb80402b9b2056f127/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/2575e8af972346fb80402b9b2056f127/work/logs
        result_data_file: /var/lib/zuul/builds/2575e8af972346fb80402b9b2056f127/work/results.json
        src_root: /var/lib/zuul/builds/2575e8af972346fb80402b9b2056f127/work/src
        work_root: /var/lib/zuul/builds/2575e8af972346fb80402b9b2056f127/work
      include_vars: []
      items:
      - branch: main
        change: '271'
        change_message: "Add Tier 5 unit tests: loopback / cluster / interface-label
          / portchannel generators\n\nCloses #253\n\nTier 5 of the #232 unit-test
          rollout. This is a **test-only** change \u2014 no production code in `netbox_manager/main.py`
          is touched. It adds unit tests for the loopback / cluster / interface-label
          / portchannel task generators and the pynetbox fixtures they need.\n\nThe
          generators all read NetBox through `create_netbox_api()`, so the work starts
          by adding a fake read-only pynetbox client to the shared `conftest.py`,
          then covers each generator against it.\n\n### Change set (commit order)\n\n1.
          **`8416389` Add pynetbox generator mock fixtures to conftest** \u2014 Introduces
          the read seams the generators query: a recording `FakeNetBoxEndpoint` (records
          `all()` / `filter(**kwargs)` calls, supports a `filter_lookup` and a raisable
          `filter_error`) and the `make_netbox_api` factory that wires up `dcim.devices`,
          `dcim.interfaces`, and `extras.config_contexts`. Adds `make_cluster` and
          `make_config_context` attribute-bag factories, and extends the existing
          `make_device` / `make_interface` factories (from Tier 1, #247) with the
          keyword-only attributes the generators read (`device_id`, `cluster`, `position`;
          `name`, `interface_id`, `cable`, `connected_endpoints`, `device`) \u2014
          each defaulted so the pre-existing Tier 1 tests are unaffected. Fixture
          docstrings/header comment are updated to describe the Tier 5 seams.\n\n2.
          **`91717ab` Add unit tests for Loopback0 interface generation** \u2014 `test_loopback_generation.py`
          covers `_generate_loopback_interfaces`: one `device_interface` task per
          loopback-eligible device, exact task shape, device ordering, and the empty
          / all-ineligible cases. NODE_ROLES / SWITCH_ROLES are pinned via `main.settings`
          so eligibility is explicit; the gate helper itself remains covered by Tier
          1 (#247).\n\n3. **`e983c71` Add unit tests for cluster loopback IP generation**
          \u2014 `test_cluster_loopbacks.py` covers the cluster loopback pipeline
          end to end: `_get_cluster_segment_config_context` (name match, verbatim
          data, falsy data, no match, lookup exception), `group_devices_by_cluster`
          (bucketing by `cluster.id`), `calculate_loopback_ips` (position coercion,
          multiplicator/offset, IPv4/IPv6 mapping and their arithmetic-error branches),
          and `_generate_cluster_loopback_tasks` (happy path IPv4+IPv6, skip/drop
          branches, per-cluster exception swallowing).\n\n4. **`b11464a` Add unit
          tests for device interface label generation** \u2014 `test_interface_label_generation.py`
          covers `_generate_device_interface_labels`: router/firewall treated as sources
          while node-role devices never are, segment config-context-supplied labels,
          the FRR local-pref addition, skip branches, and disambiguation of duplicate
          labels on one node.\n\n5. **`3784aa7` Add unit tests for PortChannel task
          generation** \u2014 `test_portchannel_tasks.py` covers `_generate_portchannel_tasks`:
          LAG + member emission with connection dedup and numbering, single-connection
          / switch-to-node / uncabled / no-endpoint skip cases, PortChannel numbering
          fallback when the name has no digits, and LAG-before-member ordering sorted
          by device and name.\n\n### Notes for the reviewer\n\n- No divergence from
          the issue: all four generator groups named in #253 (plus the shared group-0
          fixtures) are covered.\n- The `make_device` / `make_interface` extensions
          are additive and keyword-only, so no existing test tier changes behavior.\n-
          Verified locally: all 50 tests in the four new files pass (`pytest`, 0.23s).\n"
        change_url: https://github.com/osism/netbox-manager/pull/271
        commit_id: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        patchset: 3784aa728a9a9396675b7b2813e7609bfd76ce71
        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: QWRkIFRpZXIgNSB1bml0IHRlc3RzOiBsb29wYmFjayAvIGNsdXN0ZXIgLyBpbnRlcmZhY2UtbGFiZWwgLyBwb3J0Y2hhbm5lbCBnZW5lcmF0b3JzCgpDbG9zZXMgIzI1MwoKVGllciA1IG9mIHRoZSAjMjMyIHVuaXQtdGVzdCByb2xsb3V0LiBUaGlzIGlzIGEgKip0ZXN0LW9ubHkqKiBjaGFuZ2Ug4oCUIG5vIHByb2R1Y3Rpb24gY29kZSBpbiBgbmV0Ym94X21hbmFnZXIvbWFpbi5weWAgaXMgdG91Y2hlZC4gSXQgYWRkcyB1bml0IHRlc3RzIGZvciB0aGUgbG9vcGJhY2sgLyBjbHVzdGVyIC8gaW50ZXJmYWNlLWxhYmVsIC8gcG9ydGNoYW5uZWwgdGFzayBnZW5lcmF0b3JzIGFuZCB0aGUgcHluZXRib3ggZml4dHVyZXMgdGhleSBuZWVkLgoKVGhlIGdlbmVyYXRvcnMgYWxsIHJlYWQgTmV0Qm94IHRocm91Z2ggYGNyZWF0ZV9uZXRib3hfYXBpKClgLCBzbyB0aGUgd29yayBzdGFydHMgYnkgYWRkaW5nIGEgZmFrZSByZWFkLW9ubHkgcHluZXRib3ggY2xpZW50IHRvIHRoZSBzaGFyZWQgYGNvbmZ0ZXN0LnB5YCwgdGhlbiBjb3ZlcnMgZWFjaCBnZW5lcmF0b3IgYWdhaW5zdCBpdC4KCiMjIyBDaGFuZ2Ugc2V0IChjb21taXQgb3JkZXIpCgoxLiAqKmA4NDE2Mzg5YCBBZGQgcHluZXRib3ggZ2VuZXJhdG9yIG1vY2sgZml4dHVyZXMgdG8gY29uZnRlc3QqKiDigJQgSW50cm9kdWNlcyB0aGUgcmVhZCBzZWFtcyB0aGUgZ2VuZXJhdG9ycyBxdWVyeTogYSByZWNvcmRpbmcgYEZha2VOZXRCb3hFbmRwb2ludGAgKHJlY29yZHMgYGFsbCgpYCAvIGBmaWx0ZXIoKiprd2FyZ3MpYCBjYWxscywgc3VwcG9ydHMgYSBgZmlsdGVyX2xvb2t1cGAgYW5kIGEgcmFpc2FibGUgYGZpbHRlcl9lcnJvcmApIGFuZCB0aGUgYG1ha2VfbmV0Ym94X2FwaWAgZmFjdG9yeSB0aGF0IHdpcmVzIHVwIGBkY2ltLmRldmljZXNgLCBgZGNpbS5pbnRlcmZhY2VzYCwgYW5kIGBleHRyYXMuY29uZmlnX2NvbnRleHRzYC4gQWRkcyBgbWFrZV9jbHVzdGVyYCBhbmQgYG1ha2VfY29uZmlnX2NvbnRleHRgIGF0dHJpYnV0ZS1iYWcgZmFjdG9yaWVzLCBhbmQgZXh0ZW5kcyB0aGUgZXhpc3RpbmcgYG1ha2VfZGV2aWNlYCAvIGBtYWtlX2ludGVyZmFjZWAgZmFjdG9yaWVzIChmcm9tIFRpZXIgMSwgIzI0Nykgd2l0aCB0aGUga2V5d29yZC1vbmx5IGF0dHJpYnV0ZXMgdGhlIGdlbmVyYXRvcnMgcmVhZCAoYGRldmljZV9pZGAsIGBjbHVzdGVyYCwgYHBvc2l0aW9uYDsgYG5hbWVgLCBgaW50ZXJmYWNlX2lkYCwgYGNhYmxlYCwgYGNvbm5lY3RlZF9lbmRwb2ludHNgLCBgZGV2aWNlYCkg4oCUIGVhY2ggZGVmYXVsdGVkIHNvIHRoZSBwcmUtZXhpc3RpbmcgVGllciAxIHRlc3RzIGFyZSB1bmFmZmVjdGVkLiBGaXh0dXJlIGRvY3N0cmluZ3MvaGVhZGVyIGNvbW1lbnQgYXJlIHVwZGF0ZWQgdG8gZGVzY3JpYmUgdGhlIFRpZXIgNSBzZWFtcy4KCjIuICoqYDkxNzE3YWJgIEFkZCB1bml0IHRlc3RzIGZvciBMb29wYmFjazAgaW50ZXJmYWNlIGdlbmVyYXRpb24qKiDigJQgYHRlc3RfbG9vcGJhY2tfZ2VuZXJhdGlvbi5weWAgY292ZXJzIGBfZ2VuZXJhdGVfbG9vcGJhY2tfaW50ZXJmYWNlc2A6IG9uZSBgZGV2aWNlX2ludGVyZmFjZWAgdGFzayBwZXIgbG9vcGJhY2stZWxpZ2libGUgZGV2aWNlLCBleGFjdCB0YXNrIHNoYXBlLCBkZXZpY2Ugb3JkZXJpbmcsIGFuZCB0aGUgZW1wdHkgLyBhbGwtaW5lbGlnaWJsZSBjYXNlcy4gTk9ERV9ST0xFUyAvIFNXSVRDSF9ST0xFUyBhcmUgcGlubmVkIHZpYSBgbWFpbi5zZXR0aW5nc2Agc28gZWxpZ2liaWxpdHkgaXMgZXhwbGljaXQ7IHRoZSBnYXRlIGhlbHBlciBpdHNlbGYgcmVtYWlucyBjb3ZlcmVkIGJ5IFRpZXIgMSAoIzI0NykuCgozLiAqKmBlOTgzYzcxYCBBZGQgdW5pdCB0ZXN0cyBmb3IgY2x1c3RlciBsb29wYmFjayBJUCBnZW5lcmF0aW9uKiog4oCUIGB0ZXN0X2NsdXN0ZXJfbG9vcGJhY2tzLnB5YCBjb3ZlcnMgdGhlIGNsdXN0ZXIgbG9vcGJhY2sgcGlwZWxpbmUgZW5kIHRvIGVuZDogYF9nZXRfY2x1c3Rlcl9zZWdtZW50X2NvbmZpZ19jb250ZXh0YCAobmFtZSBtYXRjaCwgdmVyYmF0aW0gZGF0YSwgZmFsc3kgZGF0YSwgbm8gbWF0Y2gsIGxvb2t1cCBleGNlcHRpb24pLCBgZ3JvdXBfZGV2aWNlc19ieV9jbHVzdGVyYCAoYnVja2V0aW5nIGJ5IGBjbHVzdGVyLmlkYCksIGBjYWxjdWxhdGVfbG9vcGJhY2tfaXBzYCAocG9zaXRpb24gY29lcmNpb24sIG11bHRpcGxpY2F0b3Ivb2Zmc2V0LCBJUHY0L0lQdjYgbWFwcGluZyBhbmQgdGhlaXIgYXJpdGhtZXRpYy1lcnJvciBicmFuY2hlcyksIGFuZCBgX2dlbmVyYXRlX2NsdXN0ZXJfbG9vcGJhY2tfdGFza3NgIChoYXBweSBwYXRoIElQdjQrSVB2Niwgc2tpcC9kcm9wIGJyYW5jaGVzLCBwZXItY2x1c3RlciBleGNlcHRpb24gc3dhbGxvd2luZykuCgo0LiAqKmBiMTE0NjRhYCBBZGQgdW5pdCB0ZXN0cyBmb3IgZGV2aWNlIGludGVyZmFjZSBsYWJlbCBnZW5lcmF0aW9uKiog4oCUIGB0ZXN0X2ludGVyZmFjZV9sYWJlbF9nZW5lcmF0aW9uLnB5YCBjb3ZlcnMgYF9nZW5lcmF0ZV9kZXZpY2VfaW50ZXJmYWNlX2xhYmVsc2A6IHJvdXRlci9maXJld2FsbCB0cmVhdGVkIGFzIHNvdXJjZXMgd2hpbGUgbm9kZS1yb2xlIGRldmljZXMgbmV2ZXIgYXJlLCBzZWdtZW50IGNvbmZpZy1jb250ZXh0LXN1cHBsaWVkIGxhYmVscywgdGhlIEZSUiBsb2NhbC1wcmVmIGFkZGl0aW9uLCBza2lwIGJyYW5jaGVzLCBhbmQgZGlzYW1iaWd1YXRpb24gb2YgZHVwbGljYXRlIGxhYmVscyBvbiBvbmUgbm9kZS4KCjUuICoqYDM3ODRhYTdgIEFkZCB1bml0IHRlc3RzIGZvciBQb3J0Q2hhbm5lbCB0YXNrIGdlbmVyYXRpb24qKiDigJQgYHRlc3RfcG9ydGNoYW5uZWxfdGFza3MucHlgIGNvdmVycyBgX2dlbmVyYXRlX3BvcnRjaGFubmVsX3Rhc2tzYDogTEFHICsgbWVtYmVyIGVtaXNzaW9uIHdpdGggY29ubmVjdGlvbiBkZWR1cCBhbmQgbnVtYmVyaW5nLCBzaW5nbGUtY29ubmVjdGlvbiAvIHN3aXRjaC10by1ub2RlIC8gdW5jYWJsZWQgLyBuby1lbmRwb2ludCBza2lwIGNhc2VzLCBQb3J0Q2hhbm5lbCBudW1iZXJpbmcgZmFsbGJhY2sgd2hlbiB0aGUgbmFtZSBoYXMgbm8gZGlnaXRzLCBhbmQgTEFHLWJlZm9yZS1tZW1iZXIgb3JkZXJpbmcgc29ydGVkIGJ5IGRldmljZSBhbmQgbmFtZS4KCiMjIyBOb3RlcyBmb3IgdGhlIHJldmlld2VyCgotIE5vIGRpdmVyZ2VuY2UgZnJvbSB0aGUgaXNzdWU6IGFsbCBmb3VyIGdlbmVyYXRvciBncm91cHMgbmFtZWQgaW4gIzI1MyAocGx1cyB0aGUgc2hhcmVkIGdyb3VwLTAgZml4dHVyZXMpIGFyZSBjb3ZlcmVkLgotIFRoZSBgbWFrZV9kZXZpY2VgIC8gYG1ha2VfaW50ZXJmYWNlYCBleHRlbnNpb25zIGFyZSBhZGRpdGl2ZSBhbmQga2V5d29yZC1vbmx5LCBzbyBubyBleGlzdGluZyB0ZXN0IHRpZXIgY2hhbmdlcyBiZWhhdmlvci4KLSBWZXJpZmllZCBsb2NhbGx5OiBhbGwgNTAgdGVzdHMgaW4gdGhlIGZvdXIgbmV3IGZpbGVzIHBhc3MgKGBweXRlc3RgLCAwLjIzcykuCg==
      patchset: 3784aa728a9a9396675b7b2813e7609bfd76ce71
      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: 1c5e7369ce6963f06f59c02df95879f01813068a
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/271/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
