all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:feac:79a6
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      docker_image: frontend
      docker_namespace: osism
      docker_registry: osism.harbor.regio.digital
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: 3d94a233-ee1e-4433-92ae-c9184a34b269
        host_id: d2c528664e1bd332192bb574345deb0c6c7158061222e4a6c036b5ef
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:feac:79a6
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.217
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.91
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:feac:79a6
        region: null
        slot: null
      repository: osism/osism
  vars:
    docker_image: frontend
    docker_namespace: osism
    docker_registry: osism.harbor.regio.digital
    repository: osism/osism
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job container-image-python-osism-frontend-build explicit: None implied:
        {MatchAny:{ImpliedBranchMatcher:main}} source: osism/python-osism/.zuul.yaml@main#87>'
      - '<Job container-image-python-osism-frontend-build explicit: None implied:
        None source: osism/python-osism/.zuul.yaml@main#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: ab31c9b2fc04406198f80a6011c334be
      build_refs:
      - branch: main
        change: '2290'
        change_message: "Add unit tests for conductor SONiC BGP/VLAN/Loopback/VRF
          helpers\n\nCloses #2223.\n\nAdds `tests/unit/tasks/conductor/sonic/test_config_generator_bgp_vlan_vrf.py`
          covering the BGP, VLAN, Loopback and VRF helpers in `osism/tasks/conductor/sonic/config_generator.py`.\n\n##
          Coverage\n\n- `_add_bgp_configurations` \u2014 `BGP_NEIGHBOR_AF` / `BGP_NEIGHBOR`
          for connected interfaces and port channels, plus VLAN-SVI BGP: untagged-member
          exclusion, direct vs. transfer-role IPv4, switch-to-switch / `l2vpn_evpn`
          tag handling, non-default VRF, peer-IP local-addr resolution and peer-IP
          dedup\n- `_get_connected_device_for_interface` \u2014 delegation\n- `_determine_peer_type`
          \u2014 AS-mapping vs. computed ASN, missing `primary_ip4`, and exception
          handling\n- `_add_vlan_configuration` \u2014 members / `VLAN_MEMBER` / SVI,
          unmapped-member warning\n- `_add_loopback_configuration` \u2014 `Loopback0`
          `BGP_GLOBALS_AF_NETWORK` (v4/v6), invalid-IP path\n- `_get_vrf_info` \u2014
          both naming conventions, per-interface and top-level error paths\n- `_add_vrf_configuration`
          \u2014 VNI/table_id/neither, `BGP_GLOBALS` deep copy, VXLAN sections, interface/port-channel
          VRF assignment\n\n## Notes\n\n- `_add_vlan_configuration` does not actually
          sort `members` by SONiC name (the issue text says it does); tests assert
          the real behaviour via an order-independent comparison.\n- Log-only branches
          are asserted via the shared `loguru_logs` fixture.\n\n## Checks\n\n- `flake8`,
          `python-black` green locally\n- `mypy` runs as a separate Zuul job; the
          file follows the annotation-free `SimpleNamespace` style of the existing,
          CI-green SONiC test files\n- `pytest` left to the `python-osism-unit-tests`
          Zuul job\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2290
        commit_id: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        patchset: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        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: b6f78f1592744e5c850f55f2ce1ecea1
      buildset_refs:
      - branch: main
        change: '2290'
        change_message: "Add unit tests for conductor SONiC BGP/VLAN/Loopback/VRF
          helpers\n\nCloses #2223.\n\nAdds `tests/unit/tasks/conductor/sonic/test_config_generator_bgp_vlan_vrf.py`
          covering the BGP, VLAN, Loopback and VRF helpers in `osism/tasks/conductor/sonic/config_generator.py`.\n\n##
          Coverage\n\n- `_add_bgp_configurations` \u2014 `BGP_NEIGHBOR_AF` / `BGP_NEIGHBOR`
          for connected interfaces and port channels, plus VLAN-SVI BGP: untagged-member
          exclusion, direct vs. transfer-role IPv4, switch-to-switch / `l2vpn_evpn`
          tag handling, non-default VRF, peer-IP local-addr resolution and peer-IP
          dedup\n- `_get_connected_device_for_interface` \u2014 delegation\n- `_determine_peer_type`
          \u2014 AS-mapping vs. computed ASN, missing `primary_ip4`, and exception
          handling\n- `_add_vlan_configuration` \u2014 members / `VLAN_MEMBER` / SVI,
          unmapped-member warning\n- `_add_loopback_configuration` \u2014 `Loopback0`
          `BGP_GLOBALS_AF_NETWORK` (v4/v6), invalid-IP path\n- `_get_vrf_info` \u2014
          both naming conventions, per-interface and top-level error paths\n- `_add_vrf_configuration`
          \u2014 VNI/table_id/neither, `BGP_GLOBALS` deep copy, VXLAN sections, interface/port-channel
          VRF assignment\n\n## Notes\n\n- `_add_vlan_configuration` does not actually
          sort `members` by SONiC name (the issue text says it does); tests assert
          the real behaviour via an order-independent comparison.\n- Log-only branches
          are asserted via the shared `loguru_logs` fixture.\n\n## Checks\n\n- `flake8`,
          `python-black` green locally\n- `mypy` runs as a separate Zuul job; the
          file follows the annotation-free `SimpleNamespace` style of the existing,
          CI-green SONiC test files\n- `pytest` left to the `python-osism-unit-tests`
          Zuul job\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2290
        commit_id: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        patchset: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        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: '2290'
      change_message: "Add unit tests for conductor SONiC BGP/VLAN/Loopback/VRF helpers\n\nCloses
        #2223.\n\nAdds `tests/unit/tasks/conductor/sonic/test_config_generator_bgp_vlan_vrf.py`
        covering the BGP, VLAN, Loopback and VRF helpers in `osism/tasks/conductor/sonic/config_generator.py`.\n\n##
        Coverage\n\n- `_add_bgp_configurations` \u2014 `BGP_NEIGHBOR_AF` / `BGP_NEIGHBOR`
        for connected interfaces and port channels, plus VLAN-SVI BGP: untagged-member
        exclusion, direct vs. transfer-role IPv4, switch-to-switch / `l2vpn_evpn`
        tag handling, non-default VRF, peer-IP local-addr resolution and peer-IP dedup\n-
        `_get_connected_device_for_interface` \u2014 delegation\n- `_determine_peer_type`
        \u2014 AS-mapping vs. computed ASN, missing `primary_ip4`, and exception handling\n-
        `_add_vlan_configuration` \u2014 members / `VLAN_MEMBER` / SVI, unmapped-member
        warning\n- `_add_loopback_configuration` \u2014 `Loopback0` `BGP_GLOBALS_AF_NETWORK`
        (v4/v6), invalid-IP path\n- `_get_vrf_info` \u2014 both naming conventions,
        per-interface and top-level error paths\n- `_add_vrf_configuration` \u2014
        VNI/table_id/neither, `BGP_GLOBALS` deep copy, VXLAN sections, interface/port-channel
        VRF assignment\n\n## Notes\n\n- `_add_vlan_configuration` does not actually
        sort `members` by SONiC name (the issue text says it does); tests assert the
        real behaviour via an order-independent comparison.\n- Log-only branches are
        asserted via the shared `loguru_logs` fixture.\n\n## Checks\n\n- `flake8`,
        `python-black` green locally\n- `mypy` runs as a separate Zuul job; the file
        follows the annotation-free `SimpleNamespace` style of the existing, CI-green
        SONiC test files\n- `pytest` left to the `python-osism-unit-tests` Zuul job\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)"
      change_url: https://github.com/osism/python-osism/pull/2290
      child_jobs: []
      commit_id: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
      event_id: e2c98650-5390-11f1-822e-99bdb0084f5b
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/ab31c9b2fc04406198f80a6011c334be/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/ab31c9b2fc04406198f80a6011c334be/work/logs
        result_data_file: /var/lib/zuul/builds/ab31c9b2fc04406198f80a6011c334be/work/results.json
        src_root: /var/lib/zuul/builds/ab31c9b2fc04406198f80a6011c334be/work/src
        work_root: /var/lib/zuul/builds/ab31c9b2fc04406198f80a6011c334be/work
      include_vars: []
      items:
      - branch: main
        change: '2290'
        change_message: "Add unit tests for conductor SONiC BGP/VLAN/Loopback/VRF
          helpers\n\nCloses #2223.\n\nAdds `tests/unit/tasks/conductor/sonic/test_config_generator_bgp_vlan_vrf.py`
          covering the BGP, VLAN, Loopback and VRF helpers in `osism/tasks/conductor/sonic/config_generator.py`.\n\n##
          Coverage\n\n- `_add_bgp_configurations` \u2014 `BGP_NEIGHBOR_AF` / `BGP_NEIGHBOR`
          for connected interfaces and port channels, plus VLAN-SVI BGP: untagged-member
          exclusion, direct vs. transfer-role IPv4, switch-to-switch / `l2vpn_evpn`
          tag handling, non-default VRF, peer-IP local-addr resolution and peer-IP
          dedup\n- `_get_connected_device_for_interface` \u2014 delegation\n- `_determine_peer_type`
          \u2014 AS-mapping vs. computed ASN, missing `primary_ip4`, and exception
          handling\n- `_add_vlan_configuration` \u2014 members / `VLAN_MEMBER` / SVI,
          unmapped-member warning\n- `_add_loopback_configuration` \u2014 `Loopback0`
          `BGP_GLOBALS_AF_NETWORK` (v4/v6), invalid-IP path\n- `_get_vrf_info` \u2014
          both naming conventions, per-interface and top-level error paths\n- `_add_vrf_configuration`
          \u2014 VNI/table_id/neither, `BGP_GLOBALS` deep copy, VXLAN sections, interface/port-channel
          VRF assignment\n\n## Notes\n\n- `_add_vlan_configuration` does not actually
          sort `members` by SONiC name (the issue text says it does); tests assert
          the real behaviour via an order-independent comparison.\n- Log-only branches
          are asserted via the shared `loguru_logs` fixture.\n\n## Checks\n\n- `flake8`,
          `python-black` green locally\n- `mypy` runs as a separate Zuul job; the
          file follows the annotation-free `SimpleNamespace` style of the existing,
          CI-green SONiC test files\n- `pytest` left to the `python-osism-unit-tests`
          Zuul job\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)"
        change_url: https://github.com/osism/python-osism/pull/2290
        commit_id: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        patchset: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
        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: container-image-python-osism-frontend-build
      jobtags: []
      max_attempts: 3
      message: QWRkIHVuaXQgdGVzdHMgZm9yIGNvbmR1Y3RvciBTT05pQyBCR1AvVkxBTi9Mb29wYmFjay9WUkYgaGVscGVycwoKQ2xvc2VzICMyMjIzLgoKQWRkcyBgdGVzdHMvdW5pdC90YXNrcy9jb25kdWN0b3Ivc29uaWMvdGVzdF9jb25maWdfZ2VuZXJhdG9yX2JncF92bGFuX3ZyZi5weWAgY292ZXJpbmcgdGhlIEJHUCwgVkxBTiwgTG9vcGJhY2sgYW5kIFZSRiBoZWxwZXJzIGluIGBvc2lzbS90YXNrcy9jb25kdWN0b3Ivc29uaWMvY29uZmlnX2dlbmVyYXRvci5weWAuCgojIyBDb3ZlcmFnZQoKLSBgX2FkZF9iZ3BfY29uZmlndXJhdGlvbnNgIOKAlCBgQkdQX05FSUdIQk9SX0FGYCAvIGBCR1BfTkVJR0hCT1JgIGZvciBjb25uZWN0ZWQgaW50ZXJmYWNlcyBhbmQgcG9ydCBjaGFubmVscywgcGx1cyBWTEFOLVNWSSBCR1A6IHVudGFnZ2VkLW1lbWJlciBleGNsdXNpb24sIGRpcmVjdCB2cy4gdHJhbnNmZXItcm9sZSBJUHY0LCBzd2l0Y2gtdG8tc3dpdGNoIC8gYGwydnBuX2V2cG5gIHRhZyBoYW5kbGluZywgbm9uLWRlZmF1bHQgVlJGLCBwZWVyLUlQIGxvY2FsLWFkZHIgcmVzb2x1dGlvbiBhbmQgcGVlci1JUCBkZWR1cAotIGBfZ2V0X2Nvbm5lY3RlZF9kZXZpY2VfZm9yX2ludGVyZmFjZWAg4oCUIGRlbGVnYXRpb24KLSBgX2RldGVybWluZV9wZWVyX3R5cGVgIOKAlCBBUy1tYXBwaW5nIHZzLiBjb21wdXRlZCBBU04sIG1pc3NpbmcgYHByaW1hcnlfaXA0YCwgYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwotIGBfYWRkX3ZsYW5fY29uZmlndXJhdGlvbmAg4oCUIG1lbWJlcnMgLyBgVkxBTl9NRU1CRVJgIC8gU1ZJLCB1bm1hcHBlZC1tZW1iZXIgd2FybmluZwotIGBfYWRkX2xvb3BiYWNrX2NvbmZpZ3VyYXRpb25gIOKAlCBgTG9vcGJhY2swYCBgQkdQX0dMT0JBTFNfQUZfTkVUV09SS2AgKHY0L3Y2KSwgaW52YWxpZC1JUCBwYXRoCi0gYF9nZXRfdnJmX2luZm9gIOKAlCBib3RoIG5hbWluZyBjb252ZW50aW9ucywgcGVyLWludGVyZmFjZSBhbmQgdG9wLWxldmVsIGVycm9yIHBhdGhzCi0gYF9hZGRfdnJmX2NvbmZpZ3VyYXRpb25gIOKAlCBWTkkvdGFibGVfaWQvbmVpdGhlciwgYEJHUF9HTE9CQUxTYCBkZWVwIGNvcHksIFZYTEFOIHNlY3Rpb25zLCBpbnRlcmZhY2UvcG9ydC1jaGFubmVsIFZSRiBhc3NpZ25tZW50CgojIyBOb3RlcwoKLSBgX2FkZF92bGFuX2NvbmZpZ3VyYXRpb25gIGRvZXMgbm90IGFjdHVhbGx5IHNvcnQgYG1lbWJlcnNgIGJ5IFNPTmlDIG5hbWUgKHRoZSBpc3N1ZSB0ZXh0IHNheXMgaXQgZG9lcyk7IHRlc3RzIGFzc2VydCB0aGUgcmVhbCBiZWhhdmlvdXIgdmlhIGFuIG9yZGVyLWluZGVwZW5kZW50IGNvbXBhcmlzb24uCi0gTG9nLW9ubHkgYnJhbmNoZXMgYXJlIGFzc2VydGVkIHZpYSB0aGUgc2hhcmVkIGBsb2d1cnVfbG9nc2AgZml4dHVyZS4KCiMjIENoZWNrcwoKLSBgZmxha2U4YCwgYHB5dGhvbi1ibGFja2AgZ3JlZW4gbG9jYWxseQotIGBteXB5YCBydW5zIGFzIGEgc2VwYXJhdGUgWnV1bCBqb2I7IHRoZSBmaWxlIGZvbGxvd3MgdGhlIGFubm90YXRpb24tZnJlZSBgU2ltcGxlTmFtZXNwYWNlYCBzdHlsZSBvZiB0aGUgZXhpc3RpbmcsIENJLWdyZWVuIFNPTmlDIHRlc3QgZmlsZXMKLSBgcHl0ZXN0YCBsZWZ0IHRvIHRoZSBgcHl0aG9uLW9zaXNtLXVuaXQtdGVzdHNgIFp1dWwgam9iCgrwn6SWIEdlbmVyYXRlZCB3aXRoIFtDbGF1ZGUgQ29kZV0oaHR0cHM6Ly9jbGF1ZGUuY29tL2NsYXVkZS1jb2RlKQ==
      patchset: 72a6c2c3f9a7e9ccc37a0830a255687b0b95770f
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 58f24f5b479e15eb2d520850d27e3b1b6fc66aa6
          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/python-osism:
            canonical_name: github.com/osism/python-osism
            checkout: main
            commit: f3727d8ce27ddb65b50fb9cf51be03d766843685
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 58f24f5b479e15eb2d520850d27e3b1b6fc66aa6
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
        playbooks:
        - path: untrusted/project_0/github.com/osism/python-osism/playbooks/build.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
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_3/zuul-jobs
            link_target: untrusted/project_3/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_3/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: f3727d8ce27ddb65b50fb9cf51be03d766843685
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2290/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
