all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe29:22dc
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 97bf85b6-180b-4359-98dc-5340747c4aab
        host_id: df70f2a3f3d0c26428f22685cfc722ebc48099d99e7332c39e017195
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe29:22dc
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.123
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.193.114
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe29:22dc
        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-osism-unit-tests explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/python-osism/.zuul.yaml@main#133>'
      - '<Job python-osism-unit-tests explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: c6f35516c9414def97af784147ce1e6e
      build_refs:
      - branch: main
        change: '2215'
        change_message: "Add unit tests for osism/tasks/conductor/sonic/connections\n\nCovers
          the five pure traversal helpers and the BFS in osism/tasks/conductor/sonic/connections.py
          plus the VIP-cache load/clear pair: get_connected_device_via_interface (mgmt_only,
          missing/empty connected_endpoints, reachable=False, source-device exclusion,
          multi-endpoint fall-through, missing/None device on the endpoint), get_connected_interfaces
          (set-instance return, mgmt-only skip, unconnected interface skip, port-channel
          member_mapping wiring, helper-raises and cache-lookup-failure logging),
          get_connected_device_ for_sonic_interface (PortChannel delegation, regular-interface
          match and miss, helper exception, empty interface list), get_connected_
          device_for_port_channel (unknown PC, empty members, single connected member,
          multi-member fall-through, all unconnected, member without matching NetBox
          interface, detect_port_channels raises), and find_ interconnected_devices
          (empty input, no role match, single-spine drop, two/three connected spines,
          two disjoint pairs, leaf-filter, separate groups per role, per-device cache
          error, custom target_roles, devices with role=None or missing role attribute).
          Also covers load_vip_ addresses_cache (populates, NetBox error \u2192 []),
          clear_vip_addresses_ cache (resets to None) and a load-after-clear round-trip.\r\n\r\nMocks
          follow the issue's hints: helpers are patched in the connections module
          namespace (get_cached_device_interfaces, get_connected_device_ via_interface,
          convert_netbox_interface_to_sonic, utils.nb), while detect_port_channels
          is patched at osism.tasks.conductor.sonic.interface because the function
          imports it lazily. The module-level _vip_addresses_cache is reset by a fixture
          to keep tests independent.\r\n\r\nOut of scope (Tier 3, tracked separately):
          get_device_bgp_neighbors_ via_loopback and get_connected_interface_ipv4_address.\r\n\r\nCloses
          #2205\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2215
        commit_id: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        patchset: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      buildset: 56f436d243264ec7acb3f21d5d8819ee
      buildset_refs:
      - branch: main
        change: '2215'
        change_message: "Add unit tests for osism/tasks/conductor/sonic/connections\n\nCovers
          the five pure traversal helpers and the BFS in osism/tasks/conductor/sonic/connections.py
          plus the VIP-cache load/clear pair: get_connected_device_via_interface (mgmt_only,
          missing/empty connected_endpoints, reachable=False, source-device exclusion,
          multi-endpoint fall-through, missing/None device on the endpoint), get_connected_interfaces
          (set-instance return, mgmt-only skip, unconnected interface skip, port-channel
          member_mapping wiring, helper-raises and cache-lookup-failure logging),
          get_connected_device_ for_sonic_interface (PortChannel delegation, regular-interface
          match and miss, helper exception, empty interface list), get_connected_
          device_for_port_channel (unknown PC, empty members, single connected member,
          multi-member fall-through, all unconnected, member without matching NetBox
          interface, detect_port_channels raises), and find_ interconnected_devices
          (empty input, no role match, single-spine drop, two/three connected spines,
          two disjoint pairs, leaf-filter, separate groups per role, per-device cache
          error, custom target_roles, devices with role=None or missing role attribute).
          Also covers load_vip_ addresses_cache (populates, NetBox error \u2192 []),
          clear_vip_addresses_ cache (resets to None) and a load-after-clear round-trip.\r\n\r\nMocks
          follow the issue's hints: helpers are patched in the connections module
          namespace (get_cached_device_interfaces, get_connected_device_ via_interface,
          convert_netbox_interface_to_sonic, utils.nb), while detect_port_channels
          is patched at osism.tasks.conductor.sonic.interface because the function
          imports it lazily. The module-level _vip_addresses_cache is reset by a fixture
          to keep tests independent.\r\n\r\nOut of scope (Tier 3, tracked separately):
          get_device_bgp_neighbors_ via_loopback and get_connected_interface_ipv4_address.\r\n\r\nCloses
          #2205\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2215
        commit_id: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        patchset: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      change: '2215'
      change_message: "Add unit tests for osism/tasks/conductor/sonic/connections\n\nCovers
        the five pure traversal helpers and the BFS in osism/tasks/conductor/sonic/connections.py
        plus the VIP-cache load/clear pair: get_connected_device_via_interface (mgmt_only,
        missing/empty connected_endpoints, reachable=False, source-device exclusion,
        multi-endpoint fall-through, missing/None device on the endpoint), get_connected_interfaces
        (set-instance return, mgmt-only skip, unconnected interface skip, port-channel
        member_mapping wiring, helper-raises and cache-lookup-failure logging), get_connected_device_
        for_sonic_interface (PortChannel delegation, regular-interface match and miss,
        helper exception, empty interface list), get_connected_ device_for_port_channel
        (unknown PC, empty members, single connected member, multi-member fall-through,
        all unconnected, member without matching NetBox interface, detect_port_channels
        raises), and find_ interconnected_devices (empty input, no role match, single-spine
        drop, two/three connected spines, two disjoint pairs, leaf-filter, separate
        groups per role, per-device cache error, custom target_roles, devices with
        role=None or missing role attribute). Also covers load_vip_ addresses_cache
        (populates, NetBox error \u2192 []), clear_vip_addresses_ cache (resets to
        None) and a load-after-clear round-trip.\r\n\r\nMocks follow the issue's hints:
        helpers are patched in the connections module namespace (get_cached_device_interfaces,
        get_connected_device_ via_interface, convert_netbox_interface_to_sonic, utils.nb),
        while detect_port_channels is patched at osism.tasks.conductor.sonic.interface
        because the function imports it lazily. The module-level _vip_addresses_cache
        is reset by a fixture to keep tests independent.\r\n\r\nOut of scope (Tier
        3, tracked separately): get_device_bgp_neighbors_ via_loopback and get_connected_interface_ipv4_address.\r\n\r\nCloses
        #2205\r\n\r\nAI-assisted: Claude Code"
      change_url: https://github.com/osism/python-osism/pull/2215
      child_jobs: []
      commit_id: d00aa1a95b5663c1a8d8c92f76af96815be64c49
      event_id: 43644ff0-4215-11f1-82f1-056c7804b20e
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/c6f35516c9414def97af784147ce1e6e/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/c6f35516c9414def97af784147ce1e6e/work/logs
        result_data_file: /var/lib/zuul/builds/c6f35516c9414def97af784147ce1e6e/work/results.json
        src_root: /var/lib/zuul/builds/c6f35516c9414def97af784147ce1e6e/work/src
        work_root: /var/lib/zuul/builds/c6f35516c9414def97af784147ce1e6e/work
      include_vars: []
      items:
      - branch: main
        change: '2215'
        change_message: "Add unit tests for osism/tasks/conductor/sonic/connections\n\nCovers
          the five pure traversal helpers and the BFS in osism/tasks/conductor/sonic/connections.py
          plus the VIP-cache load/clear pair: get_connected_device_via_interface (mgmt_only,
          missing/empty connected_endpoints, reachable=False, source-device exclusion,
          multi-endpoint fall-through, missing/None device on the endpoint), get_connected_interfaces
          (set-instance return, mgmt-only skip, unconnected interface skip, port-channel
          member_mapping wiring, helper-raises and cache-lookup-failure logging),
          get_connected_device_ for_sonic_interface (PortChannel delegation, regular-interface
          match and miss, helper exception, empty interface list), get_connected_
          device_for_port_channel (unknown PC, empty members, single connected member,
          multi-member fall-through, all unconnected, member without matching NetBox
          interface, detect_port_channels raises), and find_ interconnected_devices
          (empty input, no role match, single-spine drop, two/three connected spines,
          two disjoint pairs, leaf-filter, separate groups per role, per-device cache
          error, custom target_roles, devices with role=None or missing role attribute).
          Also covers load_vip_ addresses_cache (populates, NetBox error \u2192 []),
          clear_vip_addresses_ cache (resets to None) and a load-after-clear round-trip.\r\n\r\nMocks
          follow the issue's hints: helpers are patched in the connections module
          namespace (get_cached_device_interfaces, get_connected_device_ via_interface,
          convert_netbox_interface_to_sonic, utils.nb), while detect_port_channels
          is patched at osism.tasks.conductor.sonic.interface because the function
          imports it lazily. The module-level _vip_addresses_cache is reset by a fixture
          to keep tests independent.\r\n\r\nOut of scope (Tier 3, tracked separately):
          get_device_bgp_neighbors_ via_loopback and get_connected_interface_ipv4_address.\r\n\r\nCloses
          #2205\r\n\r\nAI-assisted: Claude Code"
        change_url: https://github.com/osism/python-osism/pull/2215
        commit_id: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        patchset: d00aa1a95b5663c1a8d8c92f76af96815be64c49
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
        topic: null
      job: python-osism-unit-tests
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIG9zaXNtL3Rhc2tzL2NvbmR1Y3Rvci9zb25pYy9jb25uZWN0aW9ucwoKQ292ZXJzIHRoZSBmaXZlIHB1cmUgdHJhdmVyc2FsIGhlbHBlcnMgYW5kIHRoZSBCRlMgaW4gb3Npc20vdGFza3MvY29uZHVjdG9yL3NvbmljL2Nvbm5lY3Rpb25zLnB5IHBsdXMgdGhlIFZJUC1jYWNoZSBsb2FkL2NsZWFyIHBhaXI6IGdldF9jb25uZWN0ZWRfZGV2aWNlX3ZpYV9pbnRlcmZhY2UgKG1nbXRfb25seSwgbWlzc2luZy9lbXB0eSBjb25uZWN0ZWRfZW5kcG9pbnRzLCByZWFjaGFibGU9RmFsc2UsIHNvdXJjZS1kZXZpY2UgZXhjbHVzaW9uLCBtdWx0aS1lbmRwb2ludCBmYWxsLXRocm91Z2gsIG1pc3NpbmcvTm9uZSBkZXZpY2Ugb24gdGhlIGVuZHBvaW50KSwgZ2V0X2Nvbm5lY3RlZF9pbnRlcmZhY2VzIChzZXQtaW5zdGFuY2UgcmV0dXJuLCBtZ210LW9ubHkgc2tpcCwgdW5jb25uZWN0ZWQgaW50ZXJmYWNlIHNraXAsIHBvcnQtY2hhbm5lbCBtZW1iZXJfbWFwcGluZyB3aXJpbmcsIGhlbHBlci1yYWlzZXMgYW5kIGNhY2hlLWxvb2t1cC1mYWlsdXJlIGxvZ2dpbmcpLCBnZXRfY29ubmVjdGVkX2RldmljZV8gZm9yX3NvbmljX2ludGVyZmFjZSAoUG9ydENoYW5uZWwgZGVsZWdhdGlvbiwgcmVndWxhci1pbnRlcmZhY2UgbWF0Y2ggYW5kIG1pc3MsIGhlbHBlciBleGNlcHRpb24sIGVtcHR5IGludGVyZmFjZSBsaXN0KSwgZ2V0X2Nvbm5lY3RlZF8gZGV2aWNlX2Zvcl9wb3J0X2NoYW5uZWwgKHVua25vd24gUEMsIGVtcHR5IG1lbWJlcnMsIHNpbmdsZSBjb25uZWN0ZWQgbWVtYmVyLCBtdWx0aS1tZW1iZXIgZmFsbC10aHJvdWdoLCBhbGwgdW5jb25uZWN0ZWQsIG1lbWJlciB3aXRob3V0IG1hdGNoaW5nIE5ldEJveCBpbnRlcmZhY2UsIGRldGVjdF9wb3J0X2NoYW5uZWxzIHJhaXNlcyksIGFuZCBmaW5kXyBpbnRlcmNvbm5lY3RlZF9kZXZpY2VzIChlbXB0eSBpbnB1dCwgbm8gcm9sZSBtYXRjaCwgc2luZ2xlLXNwaW5lIGRyb3AsIHR3by90aHJlZSBjb25uZWN0ZWQgc3BpbmVzLCB0d28gZGlzam9pbnQgcGFpcnMsIGxlYWYtZmlsdGVyLCBzZXBhcmF0ZSBncm91cHMgcGVyIHJvbGUsIHBlci1kZXZpY2UgY2FjaGUgZXJyb3IsIGN1c3RvbSB0YXJnZXRfcm9sZXMsIGRldmljZXMgd2l0aCByb2xlPU5vbmUgb3IgbWlzc2luZyByb2xlIGF0dHJpYnV0ZSkuIEFsc28gY292ZXJzIGxvYWRfdmlwXyBhZGRyZXNzZXNfY2FjaGUgKHBvcHVsYXRlcywgTmV0Qm94IGVycm9yIOKGkiBbXSksIGNsZWFyX3ZpcF9hZGRyZXNzZXNfIGNhY2hlIChyZXNldHMgdG8gTm9uZSkgYW5kIGEgbG9hZC1hZnRlci1jbGVhciByb3VuZC10cmlwLg0KDQpNb2NrcyBmb2xsb3cgdGhlIGlzc3VlJ3MgaGludHM6IGhlbHBlcnMgYXJlIHBhdGNoZWQgaW4gdGhlIGNvbm5lY3Rpb25zIG1vZHVsZSBuYW1lc3BhY2UgKGdldF9jYWNoZWRfZGV2aWNlX2ludGVyZmFjZXMsIGdldF9jb25uZWN0ZWRfZGV2aWNlXyB2aWFfaW50ZXJmYWNlLCBjb252ZXJ0X25ldGJveF9pbnRlcmZhY2VfdG9fc29uaWMsIHV0aWxzLm5iKSwgd2hpbGUgZGV0ZWN0X3BvcnRfY2hhbm5lbHMgaXMgcGF0Y2hlZCBhdCBvc2lzbS50YXNrcy5jb25kdWN0b3Iuc29uaWMuaW50ZXJmYWNlIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGltcG9ydHMgaXQgbGF6aWx5LiBUaGUgbW9kdWxlLWxldmVsIF92aXBfYWRkcmVzc2VzX2NhY2hlIGlzIHJlc2V0IGJ5IGEgZml4dHVyZSB0byBrZWVwIHRlc3RzIGluZGVwZW5kZW50Lg0KDQpPdXQgb2Ygc2NvcGUgKFRpZXIgMywgdHJhY2tlZCBzZXBhcmF0ZWx5KTogZ2V0X2RldmljZV9iZ3BfbmVpZ2hib3JzXyB2aWFfbG9vcGJhY2sgYW5kIGdldF9jb25uZWN0ZWRfaW50ZXJmYWNlX2lwdjRfYWRkcmVzcy4NCg0KQ2xvc2VzICMyMjA1DQoNCkFJLWFzc2lzdGVkOiBDbGF1ZGUgQ29kZQ==
      patchset: d00aa1a95b5663c1a8d8c92f76af96815be64c49
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 69987497b92a6fd27b27eac0fffd3d2d5411103c
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
          untrusted/project_0/github.com/osism/python-osism:
            canonical_name: github.com/osism/python-osism
            checkout: main
            commit: e03198e120c34a60624ca1ca6dd63ce297d12ad4
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 69987497b92a6fd27b27eac0fffd3d2d5411103c
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 397240f42127868e42e86e6aeb120c2cb092d117
        playbooks:
        - path: untrusted/project_0/github.com/osism/python-osism/playbooks/test-unit.yml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_1/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_1/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_2/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_2/openinfra-zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/python-osism
        name: osism/python-osism
        short_name: python-osism
        src_dir: src/github.com/osism/python-osism
      projects:
        github.com/osism/python-osism:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          checkout: main
          checkout_description: zuul branch
          commit: e03198e120c34a60624ca1ca6dd63ce297d12ad4
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2215/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
