all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe70:674d
      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: e4e8fa7c-2a1e-4c63-8a4e-1e7d33deca2a
        host_id: d2c528664e1bd332192bb574345deb0c6c7158061222e4a6c036b5ef
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe70:674d
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.229
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.232
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe70:674d
        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#143>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: e88c3398c23b457c901ed0dc45a0d4c1
      build_refs:
      - branch: main
        change: '2497'
        change_message: "Gate SONiC EthernetN breakout on port topology\n\nFollow-up
          to the unified breakout mode selection.\n\n## Problem\n\nThe loose SONiC-name
          breakout path treats any four consecutive `EthernetN`\ninterfaces at <=50G
          as a 4xNG breakout **without consulting the `port_config`\ntopology**. Unifying
          breakout mode selection routed this path through\n`BREAKOUT_MODE_BY_SPEED`,
          which newly enables `4x10G` here \u2014 so a switch whose\n*native* low-speed
          ports happen to be named `Ethernet0..3` is now misdetected\nas a breakout.
          For example AS5835-54T (native 10G) or DellEMC-S5212f /\nAS7326-56X (native
          25G) fabricate a `4x10G` / `4x25G` cage that does not exist.\n\n## Change\n\nAdd
          a topology gate on this path: accept the group as a breakout only when\n`port_config`
          confirms a single multi-lane master (`Ethernet{base}`) whose\nintermediate
          lanes `Ethernet{base+1..base+3}` are **absent** \u2014 they only\nmaterialize
          when the cage is actually broken out. Four separate single-lane\nentries
          are native ports and are now skipped.\n\n- Mirrors the existing 400G sub-path's
          lane check.\n- Lives entirely on the SONiC-name path; `BREAKOUT_MODE_BY_SPEED`
          is untouched\n  (the NetBox `EthX/Y/Z` path legitimately needs its `10G`
          entry).\n- Adds a regression test covering four native single-lane 25G ports.\n\n##
          Scope / known limitations\n\n- This is a **necessary-not-sufficient** negative
          filter: it removes the known\n  native-port false positives but cannot by
          itself prove breakout *intent*. A\n  planned follow-up will add an explicit
          per-port `breakout_mode` declaration as\n  the authoritative signal (making
          the bare-`EthernetN` path safe without\n  inference).\n- The multi-lane
          test uses comma detection, consistent with the existing\n  detection sites
          (the offset-multiplier logic and the 400G path). Range-form\n  lane specs
          (`1-4`) are not used by any bundled hwsku; normalizing lane parsing\n  across
          all detection sites is deliberately left as a separate change.\n\nRelated:\n\n-
          osism/python-osism#2488\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/python-osism/pull/2497
        commit_id: a19a73543a56757ab81c63890e5ebc7e303f233b
        patchset: a19a73543a56757ab81c63890e5ebc7e303f233b
        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: 66dd111405a1416b9299767f8655cbbf
      buildset_refs:
      - branch: main
        change: '2497'
        change_message: "Gate SONiC EthernetN breakout on port topology\n\nFollow-up
          to the unified breakout mode selection.\n\n## Problem\n\nThe loose SONiC-name
          breakout path treats any four consecutive `EthernetN`\ninterfaces at <=50G
          as a 4xNG breakout **without consulting the `port_config`\ntopology**. Unifying
          breakout mode selection routed this path through\n`BREAKOUT_MODE_BY_SPEED`,
          which newly enables `4x10G` here \u2014 so a switch whose\n*native* low-speed
          ports happen to be named `Ethernet0..3` is now misdetected\nas a breakout.
          For example AS5835-54T (native 10G) or DellEMC-S5212f /\nAS7326-56X (native
          25G) fabricate a `4x10G` / `4x25G` cage that does not exist.\n\n## Change\n\nAdd
          a topology gate on this path: accept the group as a breakout only when\n`port_config`
          confirms a single multi-lane master (`Ethernet{base}`) whose\nintermediate
          lanes `Ethernet{base+1..base+3}` are **absent** \u2014 they only\nmaterialize
          when the cage is actually broken out. Four separate single-lane\nentries
          are native ports and are now skipped.\n\n- Mirrors the existing 400G sub-path's
          lane check.\n- Lives entirely on the SONiC-name path; `BREAKOUT_MODE_BY_SPEED`
          is untouched\n  (the NetBox `EthX/Y/Z` path legitimately needs its `10G`
          entry).\n- Adds a regression test covering four native single-lane 25G ports.\n\n##
          Scope / known limitations\n\n- This is a **necessary-not-sufficient** negative
          filter: it removes the known\n  native-port false positives but cannot by
          itself prove breakout *intent*. A\n  planned follow-up will add an explicit
          per-port `breakout_mode` declaration as\n  the authoritative signal (making
          the bare-`EthernetN` path safe without\n  inference).\n- The multi-lane
          test uses comma detection, consistent with the existing\n  detection sites
          (the offset-multiplier logic and the 400G path). Range-form\n  lane specs
          (`1-4`) are not used by any bundled hwsku; normalizing lane parsing\n  across
          all detection sites is deliberately left as a separate change.\n\nRelated:\n\n-
          osism/python-osism#2488\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/python-osism/pull/2497
        commit_id: a19a73543a56757ab81c63890e5ebc7e303f233b
        patchset: a19a73543a56757ab81c63890e5ebc7e303f233b
        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: '2497'
      change_message: "Gate SONiC EthernetN breakout on port topology\n\nFollow-up
        to the unified breakout mode selection.\n\n## Problem\n\nThe loose SONiC-name
        breakout path treats any four consecutive `EthernetN`\ninterfaces at <=50G
        as a 4xNG breakout **without consulting the `port_config`\ntopology**. Unifying
        breakout mode selection routed this path through\n`BREAKOUT_MODE_BY_SPEED`,
        which newly enables `4x10G` here \u2014 so a switch whose\n*native* low-speed
        ports happen to be named `Ethernet0..3` is now misdetected\nas a breakout.
        For example AS5835-54T (native 10G) or DellEMC-S5212f /\nAS7326-56X (native
        25G) fabricate a `4x10G` / `4x25G` cage that does not exist.\n\n## Change\n\nAdd
        a topology gate on this path: accept the group as a breakout only when\n`port_config`
        confirms a single multi-lane master (`Ethernet{base}`) whose\nintermediate
        lanes `Ethernet{base+1..base+3}` are **absent** \u2014 they only\nmaterialize
        when the cage is actually broken out. Four separate single-lane\nentries are
        native ports and are now skipped.\n\n- Mirrors the existing 400G sub-path's
        lane check.\n- Lives entirely on the SONiC-name path; `BREAKOUT_MODE_BY_SPEED`
        is untouched\n  (the NetBox `EthX/Y/Z` path legitimately needs its `10G` entry).\n-
        Adds a regression test covering four native single-lane 25G ports.\n\n## Scope
        / known limitations\n\n- This is a **necessary-not-sufficient** negative filter:
        it removes the known\n  native-port false positives but cannot by itself prove
        breakout *intent*. A\n  planned follow-up will add an explicit per-port `breakout_mode`
        declaration as\n  the authoritative signal (making the bare-`EthernetN` path
        safe without\n  inference).\n- The multi-lane test uses comma detection, consistent
        with the existing\n  detection sites (the offset-multiplier logic and the
        400G path). Range-form\n  lane specs (`1-4`) are not used by any bundled hwsku;
        normalizing lane parsing\n  across all detection sites is deliberately left
        as a separate change.\n\nRelated:\n\n- osism/python-osism#2488\n\n\U0001F916
        Generated with [Claude Code](https://claude.com/claude-code)\n"
      change_url: https://github.com/osism/python-osism/pull/2497
      child_jobs: []
      commit_id: a19a73543a56757ab81c63890e5ebc7e303f233b
      event_id: dd2a9590-847d-11f1-9dda-46f7608d886d
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/e88c3398c23b457c901ed0dc45a0d4c1/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/e88c3398c23b457c901ed0dc45a0d4c1/work/logs
        result_data_file: /var/lib/zuul/builds/e88c3398c23b457c901ed0dc45a0d4c1/work/results.json
        src_root: /var/lib/zuul/builds/e88c3398c23b457c901ed0dc45a0d4c1/work/src
        work_root: /var/lib/zuul/builds/e88c3398c23b457c901ed0dc45a0d4c1/work
      include_vars: []
      items:
      - branch: main
        change: '2497'
        change_message: "Gate SONiC EthernetN breakout on port topology\n\nFollow-up
          to the unified breakout mode selection.\n\n## Problem\n\nThe loose SONiC-name
          breakout path treats any four consecutive `EthernetN`\ninterfaces at <=50G
          as a 4xNG breakout **without consulting the `port_config`\ntopology**. Unifying
          breakout mode selection routed this path through\n`BREAKOUT_MODE_BY_SPEED`,
          which newly enables `4x10G` here \u2014 so a switch whose\n*native* low-speed
          ports happen to be named `Ethernet0..3` is now misdetected\nas a breakout.
          For example AS5835-54T (native 10G) or DellEMC-S5212f /\nAS7326-56X (native
          25G) fabricate a `4x10G` / `4x25G` cage that does not exist.\n\n## Change\n\nAdd
          a topology gate on this path: accept the group as a breakout only when\n`port_config`
          confirms a single multi-lane master (`Ethernet{base}`) whose\nintermediate
          lanes `Ethernet{base+1..base+3}` are **absent** \u2014 they only\nmaterialize
          when the cage is actually broken out. Four separate single-lane\nentries
          are native ports and are now skipped.\n\n- Mirrors the existing 400G sub-path's
          lane check.\n- Lives entirely on the SONiC-name path; `BREAKOUT_MODE_BY_SPEED`
          is untouched\n  (the NetBox `EthX/Y/Z` path legitimately needs its `10G`
          entry).\n- Adds a regression test covering four native single-lane 25G ports.\n\n##
          Scope / known limitations\n\n- This is a **necessary-not-sufficient** negative
          filter: it removes the known\n  native-port false positives but cannot by
          itself prove breakout *intent*. A\n  planned follow-up will add an explicit
          per-port `breakout_mode` declaration as\n  the authoritative signal (making
          the bare-`EthernetN` path safe without\n  inference).\n- The multi-lane
          test uses comma detection, consistent with the existing\n  detection sites
          (the offset-multiplier logic and the 400G path). Range-form\n  lane specs
          (`1-4`) are not used by any bundled hwsku; normalizing lane parsing\n  across
          all detection sites is deliberately left as a separate change.\n\nRelated:\n\n-
          osism/python-osism#2488\n\n\U0001F916 Generated with [Claude Code](https://claude.com/claude-code)\n"
        change_url: https://github.com/osism/python-osism/pull/2497
        commit_id: a19a73543a56757ab81c63890e5ebc7e303f233b
        patchset: a19a73543a56757ab81c63890e5ebc7e303f233b
        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: R2F0ZSBTT05pQyBFdGhlcm5ldE4gYnJlYWtvdXQgb24gcG9ydCB0b3BvbG9neQoKRm9sbG93LXVwIHRvIHRoZSB1bmlmaWVkIGJyZWFrb3V0IG1vZGUgc2VsZWN0aW9uLgoKIyMgUHJvYmxlbQoKVGhlIGxvb3NlIFNPTmlDLW5hbWUgYnJlYWtvdXQgcGF0aCB0cmVhdHMgYW55IGZvdXIgY29uc2VjdXRpdmUgYEV0aGVybmV0TmAKaW50ZXJmYWNlcyBhdCA8PTUwRyBhcyBhIDR4TkcgYnJlYWtvdXQgKip3aXRob3V0IGNvbnN1bHRpbmcgdGhlIGBwb3J0X2NvbmZpZ2AKdG9wb2xvZ3kqKi4gVW5pZnlpbmcgYnJlYWtvdXQgbW9kZSBzZWxlY3Rpb24gcm91dGVkIHRoaXMgcGF0aCB0aHJvdWdoCmBCUkVBS09VVF9NT0RFX0JZX1NQRUVEYCwgd2hpY2ggbmV3bHkgZW5hYmxlcyBgNHgxMEdgIGhlcmUg4oCUIHNvIGEgc3dpdGNoIHdob3NlCipuYXRpdmUqIGxvdy1zcGVlZCBwb3J0cyBoYXBwZW4gdG8gYmUgbmFtZWQgYEV0aGVybmV0MC4uM2AgaXMgbm93IG1pc2RldGVjdGVkCmFzIGEgYnJlYWtvdXQuIEZvciBleGFtcGxlIEFTNTgzNS01NFQgKG5hdGl2ZSAxMEcpIG9yIERlbGxFTUMtUzUyMTJmIC8KQVM3MzI2LTU2WCAobmF0aXZlIDI1RykgZmFicmljYXRlIGEgYDR4MTBHYCAvIGA0eDI1R2AgY2FnZSB0aGF0IGRvZXMgbm90IGV4aXN0LgoKIyMgQ2hhbmdlCgpBZGQgYSB0b3BvbG9neSBnYXRlIG9uIHRoaXMgcGF0aDogYWNjZXB0IHRoZSBncm91cCBhcyBhIGJyZWFrb3V0IG9ubHkgd2hlbgpgcG9ydF9jb25maWdgIGNvbmZpcm1zIGEgc2luZ2xlIG11bHRpLWxhbmUgbWFzdGVyIChgRXRoZXJuZXR7YmFzZX1gKSB3aG9zZQppbnRlcm1lZGlhdGUgbGFuZXMgYEV0aGVybmV0e2Jhc2UrMS4uYmFzZSszfWAgYXJlICoqYWJzZW50Kiog4oCUIHRoZXkgb25seQptYXRlcmlhbGl6ZSB3aGVuIHRoZSBjYWdlIGlzIGFjdHVhbGx5IGJyb2tlbiBvdXQuIEZvdXIgc2VwYXJhdGUgc2luZ2xlLWxhbmUKZW50cmllcyBhcmUgbmF0aXZlIHBvcnRzIGFuZCBhcmUgbm93IHNraXBwZWQuCgotIE1pcnJvcnMgdGhlIGV4aXN0aW5nIDQwMEcgc3ViLXBhdGgncyBsYW5lIGNoZWNrLgotIExpdmVzIGVudGlyZWx5IG9uIHRoZSBTT05pQy1uYW1lIHBhdGg7IGBCUkVBS09VVF9NT0RFX0JZX1NQRUVEYCBpcyB1bnRvdWNoZWQKICAodGhlIE5ldEJveCBgRXRoWC9ZL1pgIHBhdGggbGVnaXRpbWF0ZWx5IG5lZWRzIGl0cyBgMTBHYCBlbnRyeSkuCi0gQWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBjb3ZlcmluZyBmb3VyIG5hdGl2ZSBzaW5nbGUtbGFuZSAyNUcgcG9ydHMuCgojIyBTY29wZSAvIGtub3duIGxpbWl0YXRpb25zCgotIFRoaXMgaXMgYSAqKm5lY2Vzc2FyeS1ub3Qtc3VmZmljaWVudCoqIG5lZ2F0aXZlIGZpbHRlcjogaXQgcmVtb3ZlcyB0aGUga25vd24KICBuYXRpdmUtcG9ydCBmYWxzZSBwb3NpdGl2ZXMgYnV0IGNhbm5vdCBieSBpdHNlbGYgcHJvdmUgYnJlYWtvdXQgKmludGVudCouIEEKICBwbGFubmVkIGZvbGxvdy11cCB3aWxsIGFkZCBhbiBleHBsaWNpdCBwZXItcG9ydCBgYnJlYWtvdXRfbW9kZWAgZGVjbGFyYXRpb24gYXMKICB0aGUgYXV0aG9yaXRhdGl2ZSBzaWduYWwgKG1ha2luZyB0aGUgYmFyZS1gRXRoZXJuZXROYCBwYXRoIHNhZmUgd2l0aG91dAogIGluZmVyZW5jZSkuCi0gVGhlIG11bHRpLWxhbmUgdGVzdCB1c2VzIGNvbW1hIGRldGVjdGlvbiwgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZwogIGRldGVjdGlvbiBzaXRlcyAodGhlIG9mZnNldC1tdWx0aXBsaWVyIGxvZ2ljIGFuZCB0aGUgNDAwRyBwYXRoKS4gUmFuZ2UtZm9ybQogIGxhbmUgc3BlY3MgKGAxLTRgKSBhcmUgbm90IHVzZWQgYnkgYW55IGJ1bmRsZWQgaHdza3U7IG5vcm1hbGl6aW5nIGxhbmUgcGFyc2luZwogIGFjcm9zcyBhbGwgZGV0ZWN0aW9uIHNpdGVzIGlzIGRlbGliZXJhdGVseSBsZWZ0IGFzIGEgc2VwYXJhdGUgY2hhbmdlLgoKUmVsYXRlZDoKCi0gb3Npc20vcHl0aG9uLW9zaXNtIzI0ODgKCvCfpJYgR2VuZXJhdGVkIHdpdGggW0NsYXVkZSBDb2RlXShodHRwczovL2NsYXVkZS5jb20vY2xhdWRlLWNvZGUpCg==
      patchset: a19a73543a56757ab81c63890e5ebc7e303f233b
      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/python-osism:
            canonical_name: github.com/osism/python-osism
            checkout: main
            commit: 61ea0f629502fb3fbd254dadaaa943ad6a4aeb1d
          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
          untrusted/project_3/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 1d71e58c93442038e695a5d883d57a603182c7ae
        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: 1800
      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: 61ea0f629502fb3fbd254dadaaa943ad6a4aeb1d
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2497/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
