all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe03:7979
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: fdf53aee-b51b-45e3-a915-c91b50ea567e
        host_id: 0d3d02185f810c959252bd1d303ec55040bf5bb0b401cceef814c3a7
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe03:7979
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.139
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.201
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe03:7979
        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 python-black explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#54>'
      - '<Job python-black explicit: None implied: None source: osism/netbox-manager/.zuul.yaml@main#32>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: 73495e6abbad40d4a6b422d69df59c23
      build_refs:
      - branch: main
        change: '248'
        change_message: "Add Tier 1 unit tests for pure-logic helpers in main.py\n\n##
          Summary\n\nCloses #247 \u2014 Tier 1 of the #232 unit-test rollout: unit
          tests for the\npure-logic helpers in `netbox_manager/main.py`. These functions
          are\ndeterministic transformations of plain Python data or tiny attribute-bag\nobjects,
          so the tests need no live NetBox, `ansible_runner`, filesystem, or\nfull
          `pynetbox` mocks \u2014 at most a `types.SimpleNamespace`.\n\nBuilds on
          the #233/#234 foundation (pytest harness, `tests/` tree,\n`test-requirements.txt`,
          shared `conftest.py`, Zuul `netbox-manager-unit-tests`\njob).\n\n## Change
          set (commit order)\n\n1. **Add shared device/interface factories to test
          conftest** \u2014 `make_device`\n   and `make_interface` fixtures producing
          `SimpleNamespace` attribute bags,\n   documented for reuse by later tiers.\n2.
          **settings/role and generic helpers** (`test_helpers.py`, groups 1+2) \u2014\n
          \  `get_node_roles`, `get_switch_roles`, `deep_merge`, `get_leading_number`,\n
          \  `get_resource_name`, `get_device_role_slug`,\n   `find_device_names_in_structure`,
          `is_virtual_interface`,\n   `_split_tasks_by_type`.\n3. **task-filter helpers**
          (`test_task_filters.py`, group 3) \u2014\n   `should_skip_task_by_filter`,
          `extract_device_names_from_task`,\n   `should_skip_task_by_device_filter`.\n4.
          **autoconf helpers** (`test_autoconf_helpers.py`, group 4) \u2014\n   `get_autoconf_prefix`,
          `_extract_device_names_from_autoconf_task`,\n   `_filter_tasks_by_device`,
          `_filter_tasks_by_type_by_device`,\n   `_filter_portchannel_tasks_by_device`.\n5.
          **loopback-gate helpers** (`test_loopback_gate.py`, group 5) \u2014\n   `has_sonic_hwsku_parameter`,
          `should_have_loopback_interface` (including\n   settings-driven role-list
          overrides).\n\n92 new tests; `pytest tests/unit` now reports 117 passed.\n\n##
          Local verification\n\n- `pytest tests/unit` \u2014 117 passed\n- `flake8
          tests/ netbox_manager/` \u2014 clean\n- `black --check tests/ netbox_manager/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 unchanged from baseline (pre-existing\n
          \ `import-untyped` notes for untyped third-party libraries; the new test
          files\n  add no errors of their own)\n- `yamllint` \u2014 unchanged (no
          YAML touched)\n\n## Notes for reviewers\n\n- The settings-stub cases use\n
          \ `monkeypatch.setattr(main.settings, \"NODE_ROLES\", ..., raising=False)`:
          the\n  keys are not real attributes on the Dynaconf object, so `raising=False`
          is\n  required, and monkeypatch's teardown restores the absent \u2192 default-fallback\n
          \ state.\n- The `make_device` / `make_interface` factories are deliberately
          minimal \u2014\n  they expose only the attributes these helpers read. Later
          #232 tiers should\n  extend them in place rather than re-deriving device/interface
          shapes.\n\nPart of #232."
        change_url: https://github.com/osism/netbox-manager/pull/248
        commit_id: 162ea723c5ae251cf05709f0c10085211a460583
        patchset: 162ea723c5ae251cf05709f0c10085211a460583
        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: 0f6fa2022b7142d89859f3305ad5ec59
      buildset_refs:
      - branch: main
        change: '248'
        change_message: "Add Tier 1 unit tests for pure-logic helpers in main.py\n\n##
          Summary\n\nCloses #247 \u2014 Tier 1 of the #232 unit-test rollout: unit
          tests for the\npure-logic helpers in `netbox_manager/main.py`. These functions
          are\ndeterministic transformations of plain Python data or tiny attribute-bag\nobjects,
          so the tests need no live NetBox, `ansible_runner`, filesystem, or\nfull
          `pynetbox` mocks \u2014 at most a `types.SimpleNamespace`.\n\nBuilds on
          the #233/#234 foundation (pytest harness, `tests/` tree,\n`test-requirements.txt`,
          shared `conftest.py`, Zuul `netbox-manager-unit-tests`\njob).\n\n## Change
          set (commit order)\n\n1. **Add shared device/interface factories to test
          conftest** \u2014 `make_device`\n   and `make_interface` fixtures producing
          `SimpleNamespace` attribute bags,\n   documented for reuse by later tiers.\n2.
          **settings/role and generic helpers** (`test_helpers.py`, groups 1+2) \u2014\n
          \  `get_node_roles`, `get_switch_roles`, `deep_merge`, `get_leading_number`,\n
          \  `get_resource_name`, `get_device_role_slug`,\n   `find_device_names_in_structure`,
          `is_virtual_interface`,\n   `_split_tasks_by_type`.\n3. **task-filter helpers**
          (`test_task_filters.py`, group 3) \u2014\n   `should_skip_task_by_filter`,
          `extract_device_names_from_task`,\n   `should_skip_task_by_device_filter`.\n4.
          **autoconf helpers** (`test_autoconf_helpers.py`, group 4) \u2014\n   `get_autoconf_prefix`,
          `_extract_device_names_from_autoconf_task`,\n   `_filter_tasks_by_device`,
          `_filter_tasks_by_type_by_device`,\n   `_filter_portchannel_tasks_by_device`.\n5.
          **loopback-gate helpers** (`test_loopback_gate.py`, group 5) \u2014\n   `has_sonic_hwsku_parameter`,
          `should_have_loopback_interface` (including\n   settings-driven role-list
          overrides).\n\n92 new tests; `pytest tests/unit` now reports 117 passed.\n\n##
          Local verification\n\n- `pytest tests/unit` \u2014 117 passed\n- `flake8
          tests/ netbox_manager/` \u2014 clean\n- `black --check tests/ netbox_manager/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 unchanged from baseline (pre-existing\n
          \ `import-untyped` notes for untyped third-party libraries; the new test
          files\n  add no errors of their own)\n- `yamllint` \u2014 unchanged (no
          YAML touched)\n\n## Notes for reviewers\n\n- The settings-stub cases use\n
          \ `monkeypatch.setattr(main.settings, \"NODE_ROLES\", ..., raising=False)`:
          the\n  keys are not real attributes on the Dynaconf object, so `raising=False`
          is\n  required, and monkeypatch's teardown restores the absent \u2192 default-fallback\n
          \ state.\n- The `make_device` / `make_interface` factories are deliberately
          minimal \u2014\n  they expose only the attributes these helpers read. Later
          #232 tiers should\n  extend them in place rather than re-deriving device/interface
          shapes.\n\nPart of #232."
        change_url: https://github.com/osism/netbox-manager/pull/248
        commit_id: 162ea723c5ae251cf05709f0c10085211a460583
        patchset: 162ea723c5ae251cf05709f0c10085211a460583
        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: '248'
      change_message: "Add Tier 1 unit tests for pure-logic helpers in main.py\n\n##
        Summary\n\nCloses #247 \u2014 Tier 1 of the #232 unit-test rollout: unit tests
        for the\npure-logic helpers in `netbox_manager/main.py`. These functions are\ndeterministic
        transformations of plain Python data or tiny attribute-bag\nobjects, so the
        tests need no live NetBox, `ansible_runner`, filesystem, or\nfull `pynetbox`
        mocks \u2014 at most a `types.SimpleNamespace`.\n\nBuilds on the #233/#234
        foundation (pytest harness, `tests/` tree,\n`test-requirements.txt`, shared
        `conftest.py`, Zuul `netbox-manager-unit-tests`\njob).\n\n## Change set (commit
        order)\n\n1. **Add shared device/interface factories to test conftest** \u2014
        `make_device`\n   and `make_interface` fixtures producing `SimpleNamespace`
        attribute bags,\n   documented for reuse by later tiers.\n2. **settings/role
        and generic helpers** (`test_helpers.py`, groups 1+2) \u2014\n   `get_node_roles`,
        `get_switch_roles`, `deep_merge`, `get_leading_number`,\n   `get_resource_name`,
        `get_device_role_slug`,\n   `find_device_names_in_structure`, `is_virtual_interface`,\n
        \  `_split_tasks_by_type`.\n3. **task-filter helpers** (`test_task_filters.py`,
        group 3) \u2014\n   `should_skip_task_by_filter`, `extract_device_names_from_task`,\n
        \  `should_skip_task_by_device_filter`.\n4. **autoconf helpers** (`test_autoconf_helpers.py`,
        group 4) \u2014\n   `get_autoconf_prefix`, `_extract_device_names_from_autoconf_task`,\n
        \  `_filter_tasks_by_device`, `_filter_tasks_by_type_by_device`,\n   `_filter_portchannel_tasks_by_device`.\n5.
        **loopback-gate helpers** (`test_loopback_gate.py`, group 5) \u2014\n   `has_sonic_hwsku_parameter`,
        `should_have_loopback_interface` (including\n   settings-driven role-list
        overrides).\n\n92 new tests; `pytest tests/unit` now reports 117 passed.\n\n##
        Local verification\n\n- `pytest tests/unit` \u2014 117 passed\n- `flake8 tests/
        netbox_manager/` \u2014 clean\n- `black --check tests/ netbox_manager/` \u2014
        clean\n- `mypy netbox_manager/` \u2014 unchanged from baseline (pre-existing\n
        \ `import-untyped` notes for untyped third-party libraries; the new test files\n
        \ add no errors of their own)\n- `yamllint` \u2014 unchanged (no YAML touched)\n\n##
        Notes for reviewers\n\n- The settings-stub cases use\n  `monkeypatch.setattr(main.settings,
        \"NODE_ROLES\", ..., raising=False)`: the\n  keys are not real attributes
        on the Dynaconf object, so `raising=False` is\n  required, and monkeypatch's
        teardown restores the absent \u2192 default-fallback\n  state.\n- The `make_device`
        / `make_interface` factories are deliberately minimal \u2014\n  they expose
        only the attributes these helpers read. Later #232 tiers should\n  extend
        them in place rather than re-deriving device/interface shapes.\n\nPart of
        #232."
      change_url: https://github.com/osism/netbox-manager/pull/248
      child_jobs: []
      commit_id: 162ea723c5ae251cf05709f0c10085211a460583
      event_id: d83ea360-6424-11f1-978c-f6124bedbaf8
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/73495e6abbad40d4a6b422d69df59c23/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/73495e6abbad40d4a6b422d69df59c23/work/logs
        result_data_file: /var/lib/zuul/builds/73495e6abbad40d4a6b422d69df59c23/work/results.json
        src_root: /var/lib/zuul/builds/73495e6abbad40d4a6b422d69df59c23/work/src
        work_root: /var/lib/zuul/builds/73495e6abbad40d4a6b422d69df59c23/work
      include_vars: []
      items:
      - branch: main
        change: '248'
        change_message: "Add Tier 1 unit tests for pure-logic helpers in main.py\n\n##
          Summary\n\nCloses #247 \u2014 Tier 1 of the #232 unit-test rollout: unit
          tests for the\npure-logic helpers in `netbox_manager/main.py`. These functions
          are\ndeterministic transformations of plain Python data or tiny attribute-bag\nobjects,
          so the tests need no live NetBox, `ansible_runner`, filesystem, or\nfull
          `pynetbox` mocks \u2014 at most a `types.SimpleNamespace`.\n\nBuilds on
          the #233/#234 foundation (pytest harness, `tests/` tree,\n`test-requirements.txt`,
          shared `conftest.py`, Zuul `netbox-manager-unit-tests`\njob).\n\n## Change
          set (commit order)\n\n1. **Add shared device/interface factories to test
          conftest** \u2014 `make_device`\n   and `make_interface` fixtures producing
          `SimpleNamespace` attribute bags,\n   documented for reuse by later tiers.\n2.
          **settings/role and generic helpers** (`test_helpers.py`, groups 1+2) \u2014\n
          \  `get_node_roles`, `get_switch_roles`, `deep_merge`, `get_leading_number`,\n
          \  `get_resource_name`, `get_device_role_slug`,\n   `find_device_names_in_structure`,
          `is_virtual_interface`,\n   `_split_tasks_by_type`.\n3. **task-filter helpers**
          (`test_task_filters.py`, group 3) \u2014\n   `should_skip_task_by_filter`,
          `extract_device_names_from_task`,\n   `should_skip_task_by_device_filter`.\n4.
          **autoconf helpers** (`test_autoconf_helpers.py`, group 4) \u2014\n   `get_autoconf_prefix`,
          `_extract_device_names_from_autoconf_task`,\n   `_filter_tasks_by_device`,
          `_filter_tasks_by_type_by_device`,\n   `_filter_portchannel_tasks_by_device`.\n5.
          **loopback-gate helpers** (`test_loopback_gate.py`, group 5) \u2014\n   `has_sonic_hwsku_parameter`,
          `should_have_loopback_interface` (including\n   settings-driven role-list
          overrides).\n\n92 new tests; `pytest tests/unit` now reports 117 passed.\n\n##
          Local verification\n\n- `pytest tests/unit` \u2014 117 passed\n- `flake8
          tests/ netbox_manager/` \u2014 clean\n- `black --check tests/ netbox_manager/`
          \u2014 clean\n- `mypy netbox_manager/` \u2014 unchanged from baseline (pre-existing\n
          \ `import-untyped` notes for untyped third-party libraries; the new test
          files\n  add no errors of their own)\n- `yamllint` \u2014 unchanged (no
          YAML touched)\n\n## Notes for reviewers\n\n- The settings-stub cases use\n
          \ `monkeypatch.setattr(main.settings, \"NODE_ROLES\", ..., raising=False)`:
          the\n  keys are not real attributes on the Dynaconf object, so `raising=False`
          is\n  required, and monkeypatch's teardown restores the absent \u2192 default-fallback\n
          \ state.\n- The `make_device` / `make_interface` factories are deliberately
          minimal \u2014\n  they expose only the attributes these helpers read. Later
          #232 tiers should\n  extend them in place rather than re-deriving device/interface
          shapes.\n\nPart of #232."
        change_url: https://github.com/osism/netbox-manager/pull/248
        commit_id: 162ea723c5ae251cf05709f0c10085211a460583
        patchset: 162ea723c5ae251cf05709f0c10085211a460583
        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: python-black
      jobtags: []
      max_attempts: 3
      message: QWRkIFRpZXIgMSB1bml0IHRlc3RzIGZvciBwdXJlLWxvZ2ljIGhlbHBlcnMgaW4gbWFpbi5weQoKIyMgU3VtbWFyeQoKQ2xvc2VzICMyNDcg4oCUIFRpZXIgMSBvZiB0aGUgIzIzMiB1bml0LXRlc3Qgcm9sbG91dDogdW5pdCB0ZXN0cyBmb3IgdGhlCnB1cmUtbG9naWMgaGVscGVycyBpbiBgbmV0Ym94X21hbmFnZXIvbWFpbi5weWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKZGV0ZXJtaW5pc3RpYyB0cmFuc2Zvcm1hdGlvbnMgb2YgcGxhaW4gUHl0aG9uIGRhdGEgb3IgdGlueSBhdHRyaWJ1dGUtYmFnCm9iamVjdHMsIHNvIHRoZSB0ZXN0cyBuZWVkIG5vIGxpdmUgTmV0Qm94LCBgYW5zaWJsZV9ydW5uZXJgLCBmaWxlc3lzdGVtLCBvcgpmdWxsIGBweW5ldGJveGAgbW9ja3Mg4oCUIGF0IG1vc3QgYSBgdHlwZXMuU2ltcGxlTmFtZXNwYWNlYC4KCkJ1aWxkcyBvbiB0aGUgIzIzMy8jMjM0IGZvdW5kYXRpb24gKHB5dGVzdCBoYXJuZXNzLCBgdGVzdHMvYCB0cmVlLApgdGVzdC1yZXF1aXJlbWVudHMudHh0YCwgc2hhcmVkIGBjb25mdGVzdC5weWAsIFp1dWwgYG5ldGJveC1tYW5hZ2VyLXVuaXQtdGVzdHNgCmpvYikuCgojIyBDaGFuZ2Ugc2V0IChjb21taXQgb3JkZXIpCgoxLiAqKkFkZCBzaGFyZWQgZGV2aWNlL2ludGVyZmFjZSBmYWN0b3JpZXMgdG8gdGVzdCBjb25mdGVzdCoqIOKAlCBgbWFrZV9kZXZpY2VgCiAgIGFuZCBgbWFrZV9pbnRlcmZhY2VgIGZpeHR1cmVzIHByb2R1Y2luZyBgU2ltcGxlTmFtZXNwYWNlYCBhdHRyaWJ1dGUgYmFncywKICAgZG9jdW1lbnRlZCBmb3IgcmV1c2UgYnkgbGF0ZXIgdGllcnMuCjIuICoqc2V0dGluZ3Mvcm9sZSBhbmQgZ2VuZXJpYyBoZWxwZXJzKiogKGB0ZXN0X2hlbHBlcnMucHlgLCBncm91cHMgMSsyKSDigJQKICAgYGdldF9ub2RlX3JvbGVzYCwgYGdldF9zd2l0Y2hfcm9sZXNgLCBgZGVlcF9tZXJnZWAsIGBnZXRfbGVhZGluZ19udW1iZXJgLAogICBgZ2V0X3Jlc291cmNlX25hbWVgLCBgZ2V0X2RldmljZV9yb2xlX3NsdWdgLAogICBgZmluZF9kZXZpY2VfbmFtZXNfaW5fc3RydWN0dXJlYCwgYGlzX3ZpcnR1YWxfaW50ZXJmYWNlYCwKICAgYF9zcGxpdF90YXNrc19ieV90eXBlYC4KMy4gKip0YXNrLWZpbHRlciBoZWxwZXJzKiogKGB0ZXN0X3Rhc2tfZmlsdGVycy5weWAsIGdyb3VwIDMpIOKAlAogICBgc2hvdWxkX3NraXBfdGFza19ieV9maWx0ZXJgLCBgZXh0cmFjdF9kZXZpY2VfbmFtZXNfZnJvbV90YXNrYCwKICAgYHNob3VsZF9za2lwX3Rhc2tfYnlfZGV2aWNlX2ZpbHRlcmAuCjQuICoqYXV0b2NvbmYgaGVscGVycyoqIChgdGVzdF9hdXRvY29uZl9oZWxwZXJzLnB5YCwgZ3JvdXAgNCkg4oCUCiAgIGBnZXRfYXV0b2NvbmZfcHJlZml4YCwgYF9leHRyYWN0X2RldmljZV9uYW1lc19mcm9tX2F1dG9jb25mX3Rhc2tgLAogICBgX2ZpbHRlcl90YXNrc19ieV9kZXZpY2VgLCBgX2ZpbHRlcl90YXNrc19ieV90eXBlX2J5X2RldmljZWAsCiAgIGBfZmlsdGVyX3BvcnRjaGFubmVsX3Rhc2tzX2J5X2RldmljZWAuCjUuICoqbG9vcGJhY2stZ2F0ZSBoZWxwZXJzKiogKGB0ZXN0X2xvb3BiYWNrX2dhdGUucHlgLCBncm91cCA1KSDigJQKICAgYGhhc19zb25pY19od3NrdV9wYXJhbWV0ZXJgLCBgc2hvdWxkX2hhdmVfbG9vcGJhY2tfaW50ZXJmYWNlYCAoaW5jbHVkaW5nCiAgIHNldHRpbmdzLWRyaXZlbiByb2xlLWxpc3Qgb3ZlcnJpZGVzKS4KCjkyIG5ldyB0ZXN0czsgYHB5dGVzdCB0ZXN0cy91bml0YCBub3cgcmVwb3J0cyAxMTcgcGFzc2VkLgoKIyMgTG9jYWwgdmVyaWZpY2F0aW9uCgotIGBweXRlc3QgdGVzdHMvdW5pdGAg4oCUIDExNyBwYXNzZWQKLSBgZmxha2U4IHRlc3RzLyBuZXRib3hfbWFuYWdlci9gIOKAlCBjbGVhbgotIGBibGFjayAtLWNoZWNrIHRlc3RzLyBuZXRib3hfbWFuYWdlci9gIOKAlCBjbGVhbgotIGBteXB5IG5ldGJveF9tYW5hZ2VyL2Ag4oCUIHVuY2hhbmdlZCBmcm9tIGJhc2VsaW5lIChwcmUtZXhpc3RpbmcKICBgaW1wb3J0LXVudHlwZWRgIG5vdGVzIGZvciB1bnR5cGVkIHRoaXJkLXBhcnR5IGxpYnJhcmllczsgdGhlIG5ldyB0ZXN0IGZpbGVzCiAgYWRkIG5vIGVycm9ycyBvZiB0aGVpciBvd24pCi0gYHlhbWxsaW50YCDigJQgdW5jaGFuZ2VkIChubyBZQU1MIHRvdWNoZWQpCgojIyBOb3RlcyBmb3IgcmV2aWV3ZXJzCgotIFRoZSBzZXR0aW5ncy1zdHViIGNhc2VzIHVzZQogIGBtb25rZXlwYXRjaC5zZXRhdHRyKG1haW4uc2V0dGluZ3MsICJOT0RFX1JPTEVTIiwgLi4uLCByYWlzaW5nPUZhbHNlKWA6IHRoZQogIGtleXMgYXJlIG5vdCByZWFsIGF0dHJpYnV0ZXMgb24gdGhlIER5bmFjb25mIG9iamVjdCwgc28gYHJhaXNpbmc9RmFsc2VgIGlzCiAgcmVxdWlyZWQsIGFuZCBtb25rZXlwYXRjaCdzIHRlYXJkb3duIHJlc3RvcmVzIHRoZSBhYnNlbnQg4oaSIGRlZmF1bHQtZmFsbGJhY2sKICBzdGF0ZS4KLSBUaGUgYG1ha2VfZGV2aWNlYCAvIGBtYWtlX2ludGVyZmFjZWAgZmFjdG9yaWVzIGFyZSBkZWxpYmVyYXRlbHkgbWluaW1hbCDigJQKICB0aGV5IGV4cG9zZSBvbmx5IHRoZSBhdHRyaWJ1dGVzIHRoZXNlIGhlbHBlcnMgcmVhZC4gTGF0ZXIgIzIzMiB0aWVycyBzaG91bGQKICBleHRlbmQgdGhlbSBpbiBwbGFjZSByYXRoZXIgdGhhbiByZS1kZXJpdmluZyBkZXZpY2UvaW50ZXJmYWNlIHNoYXBlcy4KClBhcnQgb2YgIzIzMi4=
      patchset: 162ea723c5ae251cf05709f0c10085211a460583
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          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: 688445d15ac2c497396b682f69c57ccd484f5f25
          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/python-black/run.yml
          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: 31819d78663eb8d2acf78f9a46ef1e5043995305
          name: osism/netbox-manager
          required: false
          short_name: netbox-manager
          src_dir: src/github.com/osism/netbox-manager
      ref: refs/pull/248/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
