diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3eff63965..c6aed49af 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,11 +30,26 @@ on: description: "Run release tests in vlab/hlab" required: false default: false + release_test_regex: + type: string + description: "Run only release tests matched by regex" + required: false + default: "" + release_test_invert_regex: + type: boolean + description: "Invert regex match" + required: false + default: false debug_enabled: type: boolean description: "Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)" required: false default: false + pause_on_fail: + type: boolean + description: "Pause release tests on failure for debugging" + required: false + default: false permissions: contents: read @@ -67,6 +82,7 @@ jobs: with: # keep in sync with hack/tools.just version: v1.64.8 + install-mode: goinstall - name: Build all run: | @@ -216,7 +232,7 @@ jobs: needs: - test-build - name: "${{ matrix.hybrid && 'hlab' || 'vlab' }}-${{ matrix.fabricmode == 'spine-leaf' && 'sl' || 'cc' }}-${{ matrix.mesh && 'mesh-' || '' }}${{ matrix.gateway && 'gw-' || '' }}${{ matrix.includeonie && 'onie-' || '' }}${{ matrix.buildmode }}-${{ matrix.vpcmode }}" + name: "${{ matrix.hybrid && 'hlab' || 'vlab' }}-${{ matrix.fabricmode == 'spine-leaf' && 'sl' || 'cc' }}-${{ matrix.mesh && 'mesh-' || '' }}${{ matrix.gateway && 'gw-' || '' }}${{ matrix.includeonie && 'onie-' || '' }}${{ matrix.buildmode }}-${{ matrix.vpcmode }}${{ (inputs.releasetest == true || contains(github.event.pull_request.labels.*.name, 'ci:+release')) && '-rt' || '' }}" uses: ./.github/workflows/run-vlab.yaml with: @@ -230,7 +246,11 @@ jobs: buildmode: ${{ matrix.buildmode }} vpcmode: ${{ matrix.vpcmode }} releasetest: ${{ inputs.releasetest == true || contains(github.event.pull_request.labels.*.name, 'ci:+release') }} + release_test_regex: ${{ inputs.release_test_regex || '' }} + release_test_invert_regex: ${{ inputs.release_test_invert_regex == true }} hybrid: ${{ matrix.hybrid }} + debug: ${{ inputs.debug_enabled || false }} + pause_on_fail: ${{ inputs.pause_on_fail || false }} strategy: fail-fast: false @@ -367,11 +387,12 @@ jobs: - name: Prepare debug artifacts if: ${{ always() }} run: | - mkdir -p _debug/0-before + mkdir -p _debug/0-before/serial cp versions.txt _debug/0-before || true cp result/diagram.* _debug/0-before || true cp vlab.hhs _debug/0-before || true cp -r show-tech-output _debug/0-before || true + find ./vlab/vms -type f -name serial.log -exec bash -c 'cp $0 _debug/0-before/serial/$(basename $(dirname $0)).log' {} \; || true cp .zot/log _debug/zot.log || true - name: Build current hhfab @@ -392,11 +413,12 @@ jobs: - name: Prepare debug artifacts if: ${{ always() }} run: | - mkdir -p _debug/1-curr + mkdir -p _debug/1-curr/serial cp versions.txt _debug/1-curr || true cp result/diagram.* _debug/1-curr || true cp vlab.hhs _debug/1-curr || true cp -r show-tech-output _debug/1-curr || true + find ./vlab/vms -type f -name serial.log -exec bash -c 'cp $0 _debug/1-curr/serial/$(basename $(dirname $0)).log' {} \; || true cp .zot/log _debug/zot.log || true - name: hhfab vlab up after upgrade @@ -413,11 +435,12 @@ jobs: - name: Prepare debug artifacts if: ${{ always() }} run: | - mkdir -p _debug/2-after + mkdir -p _debug/2-after/serial cp versions.txt _debug/2-after || true cp result/diagram.* _debug/2-after || true cp vlab.hhs _debug/2-after || true cp -r show-tech-output _debug/2-after || true + find ./vlab/vms -type f -name serial.log -exec bash -c 'cp $0 _debug/2-after/serial/$(basename $(dirname $0)).log' {} \; || true cp .zot/log _debug/zot.log || true mv _debug fab-${{ github.run_id }}-${{ env.slug }} diff --git a/.github/workflows/run-vlab.yaml b/.github/workflows/run-vlab.yaml index e63531822..7a11ef08a 100644 --- a/.github/workflows/run-vlab.yaml +++ b/.github/workflows/run-vlab.yaml @@ -52,6 +52,16 @@ on: type: boolean required: false default: false + release_test_regex: + description: "Regex pattern to filter release tests" + type: string + required: false + default: "" + release_test_invert_regex: + description: "Invert regex selection" + type: boolean + required: false + default: false hybrid: description: "Enable hybrid mode (use env with physical switches)" type: boolean @@ -62,13 +72,18 @@ on: type: boolean required: false default: false + pause_on_fail: + description: "Pause release tests on failure for debugging" + type: boolean + required: false + default: false permissions: contents: read env: # global workflow configs - slug: "${{ inputs.hybrid && 'hlab' || 'vlab' }}-${{ inputs.fabricmode == 'spine-leaf' && 'sl' || 'cc' }}-${{ inputs.mesh && 'mesh-' || '' }}${{ inputs.gateway && 'gw-' || '' }}${{ inputs.includeonie && 'onie-' || '' }}${{ inputs.buildmode }}-${{ inputs.vpcmode }}" + slug: "${{ inputs.hybrid && 'hlab' || 'vlab' }}-${{ inputs.fabricmode == 'spine-leaf' && 'sl' || 'cc' }}-${{ inputs.mesh && 'mesh-' || '' }}${{ inputs.gateway && 'gw-' || '' }}${{ inputs.includeonie && 'onie-' || '' }}${{ inputs.buildmode }}-${{ inputs.vpcmode }}${{ inputs.releasetest && '-rt' || '' }}" # env vars to configure hhfab HHFAB_REG_REPO: 127.0.0.1:30000 HHFAB_VLAB_COLLECT: true @@ -189,6 +204,9 @@ jobs: ${{ !inputs.gateway && '--ready=setup-peerings' || '' }} \ --ready=test-connectivity \ ${{ inputs.releasetest && '--ready=release-test' || '' }} \ + ${{ inputs.release_test_regex && format('--release-test-regex="{0}"', inputs.release_test_regex) || '' }} \ + ${{ inputs.release_test_invert_regex && '--release-test-invert-regex' || '' }} \ + ${{ inputs.pause_on_fail && '--pause-on-fail' || '' }} \ --ready=exit - name: Upload Release Test Results @@ -201,12 +219,13 @@ jobs: - name: Prepare debug artifacts if: ${{ always() }} run: | - mkdir _debug + mkdir -p _debug/serial cp versions.txt _debug/ || true cp result/diagram.* _debug/ || true cp vlab.hhs _debug/ || true cp -r show-tech-output _debug/ || true cp .zot/log _debug/zot.log || true + find ./vlab/vms -type f -name serial.log -exec bash -c 'cp $0 _debug/serial/$(basename $(dirname $0)).log' {} \; || true mv _debug fab-${{ github.run_id }}-${{ env.slug }} - name: Upload debug artifacts diff --git a/cmd/hhfab/main.go b/cmd/hhfab/main.go index fdce2b9d1..ffa0b379c 100644 --- a/cmd/hhfab/main.go +++ b/cmd/hhfab/main.go @@ -765,6 +765,11 @@ func Run(ctx context.Context) error { Usage: "exit on first error", Value: true, }, + &cli.BoolFlag{ + Name: FlagPauseOnFail, + Aliases: []string{"p"}, + Usage: "pause testing on each scenario failure (for troubleshooting)", + }, &cli.StringSliceFlag{ Name: FlagNameReady, Aliases: []string{"r"}, @@ -780,6 +785,16 @@ func Run(ctx context.Context) error { Name: FlagNameVPCMode, Usage: "VPC mode to be used for on-ready commands: empty is default (l2vni), l3vni, etc.", }, + &cli.StringSliceFlag{ + Name: "release-test-regex", + Aliases: []string{"rt-regex"}, + Usage: "regex pattern to filter release tests (used when --ready=release-test)", + }, + &cli.BoolFlag{ + Name: "release-test-invert-regex", + Aliases: []string{"rt-invert"}, + Usage: "invert regex selection for release tests (used when --ready=release-test)", + }, }), Before: before(false), Action: func(c *cli.Context) error { @@ -798,6 +813,9 @@ func Run(ctx context.Context) error { OnReady: c.StringSlice(FlagNameReady), CollectShowTech: c.Bool(FlagNameCollectShowTech), VPCMode: vpcapi.VPCMode(handleL2VNI(c.String(FlagNameVPCMode))), + PauseOnFail: c.Bool(FlagPauseOnFail), + ReleaseTestRegexes: c.StringSlice("release-test-regex"), + ReleaseTestInvert: c.Bool("release-test-invert-regex"), }, }); err != nil { return fmt.Errorf("running VLAB: %w", err) diff --git a/go.mod b/go.mod index bc30cd041..50b0715ec 100644 --- a/go.mod +++ b/go.mod @@ -42,7 +42,7 @@ require ( github.com/urfave/cli/v2 v2.27.7 github.com/vbauerster/mpb/v8 v8.10.2 github.com/vishvananda/netlink v1.3.1 - go.githedgehog.com/fabric v0.88.2 + go.githedgehog.com/fabric v0.88.1 go.githedgehog.com/gateway v0.17.0 golang.org/x/crypto v0.41.0 golang.org/x/mod v0.27.0 diff --git a/go.sum b/go.sum index 37dced100..bb4c19a4a 100644 --- a/go.sum +++ b/go.sum @@ -909,8 +909,8 @@ github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= -go.githedgehog.com/fabric v0.88.2 h1:rs51cW27ilmdYjwkZ2/6baBBZtw+7aRkFg53/SXPxB0= -go.githedgehog.com/fabric v0.88.2/go.mod h1:oSHoCN+J8xiJMY3aCUmv3Sbtgw9/qOlcAVhPmliZX8Y= +go.githedgehog.com/fabric v0.88.1 h1:yxS8mq5aPe+R5SPH8LNJpU6P5LNwTNES80dhORI8BZo= +go.githedgehog.com/fabric v0.88.1/go.mod h1:oSHoCN+J8xiJMY3aCUmv3Sbtgw9/qOlcAVhPmliZX8Y= go.githedgehog.com/fabric-bcm-ygot v0.5.2-4.5.0 h1:BbK131yz1T6ldx7xsREa/A2v5bJdLcs1gVlxDujdEKg= go.githedgehog.com/fabric-bcm-ygot v0.5.2-4.5.0/go.mod h1:XWCdFbSbGP6nlg90c/922VblpHOTw07TCwx1yUHPkzc= go.githedgehog.com/gateway v0.17.0 h1:revvLmkdtDwro1CDBTVUQPJtusCb5H6+RbpmXqeeXsM= diff --git a/pkg/fab/README.md b/pkg/fab/README.md index 5ec5e3c2b..6855ab613 100644 --- a/pkg/fab/README.md +++ b/pkg/fab/README.md @@ -5,7 +5,7 @@ Stable version is listed on the [Flatcar releases page](https://www.flatcar.org/releases). ```bash -export FLATCAR_VERSION="v4230.2.1" +export FLATCAR_VERSION="v4230.2.0" export FLATCAR_VERSION_UPSTREAM="${FLATCAR_VERSION:1}" wget "https://stable.release.flatcar-linux.net/amd64-usr/${FLATCAR_VERSION_UPSTREAM}/flatcar_production_qemu_image.img" diff --git a/pkg/fab/versions.go b/pkg/fab/versions.go index 9835700dc..53aad8fe7 100644 --- a/pkg/fab/versions.go +++ b/pkg/fab/versions.go @@ -15,7 +15,7 @@ import ( var ( FabricatorVersion = meta.Version(version.Version) - FabricVersion = meta.Version("v0.88.2") + FabricVersion = meta.Version("v0.88.1") GatewayVersion = meta.Version("v0.17.0") DataplaneVersion = meta.Version("main.x86_64-unknown-linux-gnu.debug.f27f76cd91213cf4dc85d0dab95e7c70ede30efc") FRRVersion = meta.Version("0ba323e489ea2baf3f85fc42ff23aff674a25690.debug") @@ -46,8 +46,8 @@ var Versions = fabapi.Versions{ Ctl: FabricatorVersion, NodeConfig: FabricatorVersion, Pause: "3.6", // wait image from k3s // TODO embed wait into node-config image? - ControlUSBRoot: "v4230.2.1-hh3", - Flatcar: "v4230.2.1", + ControlUSBRoot: "v4152.2.3-hh1", + Flatcar: "v4152.2.3", }, Fabric: fabapi.FabricVersions{ API: FabricVersion, @@ -91,7 +91,7 @@ var Versions = fabapi.Versions{ }, VLAB: fabapi.VLABVersions{ ONIE: "v0.2.0", - Flatcar: "v4230.2.1", + Flatcar: "v4152.2.3", }, } diff --git a/pkg/hhfab/release.go b/pkg/hhfab/release.go index 0f56d7ec1..577f9fefa 100644 --- a/pkg/hhfab/release.go +++ b/pkg/hhfab/release.go @@ -24,6 +24,7 @@ import ( "go.githedgehog.com/fabric/pkg/hhfctl" "go.githedgehog.com/fabric/pkg/util/pointer" "golang.org/x/sync/errgroup" + "golang.org/x/term" kmetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kclient "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -2378,12 +2379,24 @@ func printSuiteResults(ts *JUnitTestSuite) { } func pauseOnFail() { - // pause until the user presses enter - slog.Warn("Test failed, pausing execution. Note that reverts might still need to apply, so if you intend to continue, please make sure to leave the environment in the same state as you found it") - slog.Info("Press enter to continue...") - var input string - _, _ = fmt.Scanln(&input) - slog.Info("Continuing...") + if !term.IsTerminal(int(os.Stdin.Fd())) { + // CI environment - pause for a long time to allow debugging + pauseDuration := 60 * time.Minute + slog.Warn("Running in non-interactive environment (CI)") + slog.Info("Pausing for debugging", "duration", pauseDuration) + slog.Info("You can connect to debug the VLAB state during this pause") + slog.Info("The test will automatically continue after the pause duration") + + time.Sleep(pauseDuration) + slog.Info("Pause duration expired, continuing...") + } else { + // pause until the user presses enter + slog.Warn("Test failed, pausing execution. Note that reverts might still need to apply, so if you intend to continue, please make sure to leave the environment in the same state as you found it") + slog.Info("Press enter to continue...") + var input string + _, _ = fmt.Scanln(&input) + slog.Info("Continuing...") + } } func doRunTests(ctx context.Context, testCtx *VPCPeeringTestCtx, ts *JUnitTestSuite) (*JUnitTestSuite, error) { diff --git a/pkg/hhfab/vlabrunner.go b/pkg/hhfab/vlabrunner.go index 9fb9d5a06..84a6ec346 100644 --- a/pkg/hhfab/vlabrunner.go +++ b/pkg/hhfab/vlabrunner.go @@ -98,6 +98,9 @@ type VLABRunOpts struct { OnReady []string CollectShowTech bool VPCMode vpcapi.VPCMode + PauseOnFail bool + ReleaseTestRegexes []string + ReleaseTestInvert bool } type OnReady string @@ -584,6 +587,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("reinstalling switches: %w", err) } case OnReadySetupVPCs: @@ -603,6 +610,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("setting up VPCs: %w", err) } case OnReadySetupPeerings: @@ -623,6 +634,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("setting up peerings: %w", err) } case OnReadyTestConnectivity: @@ -637,6 +652,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("testing connectivity: %w", err) } case OnReadyExit: @@ -655,6 +674,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("waiting: %w", err) } case OnReadyInspect: @@ -667,6 +690,10 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro c.CollectVLABDebug(ctx, vlab, opts) + if opts.PauseOnFail { + pauseOnFail() + } + return fmt.Errorf("inspecting: %w", err) } case OnReadyReleaseTest: @@ -674,6 +701,9 @@ func (c *Config) VLABRun(ctx context.Context, vlab *VLAB, opts VLABRunOpts) erro ResultsFile: "release-test.xml", HashPolicy: HashPolicyL2And3, VPCMode: opts.VPCMode, + PauseOnFail: opts.PauseOnFail, + Regexes: opts.ReleaseTestRegexes, + InvertRegex: opts.ReleaseTestInvert, }); err != nil { slog.Warn("Failed to run release test", "err", err) diff --git a/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/catalog.go b/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/catalog.go index 1f50767b5..6c38a0fd2 100644 --- a/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/catalog.go +++ b/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/catalog.go @@ -47,7 +47,6 @@ var defaultSwitchProfiles = []wiringapi.SwitchProfile{ } var sonicCLSPlusSwitchProfiles = []wiringapi.SwitchProfile{ - CLSPCelesticaDS2000, CLSPCelesticaDS3000, CLSPCelesticaDS4000, CLSPCelesticaDS4101, diff --git a/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/p_clsp_celestica_ds2000.go b/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/p_clsp_celestica_ds2000.go deleted file mode 100644 index e87db1d14..000000000 --- a/vendor/go.githedgehog.com/fabric/pkg/ctrl/switchprofile/p_clsp_celestica_ds2000.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2025 Hedgehog -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package switchprofile - -import ( - "go.githedgehog.com/fabric/api/meta" - wiringapi "go.githedgehog.com/fabric/api/wiring/v1beta1" - kmetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -var CLSPCelesticaDS2000 = wiringapi.SwitchProfile{ - ObjectMeta: kmetav1.ObjectMeta{ - Name: "celestica-ds2000-clsp", - }, - Spec: wiringapi.SwitchProfileSpec{ - DisplayName: "Celestica DS2000", - OtherNames: []string{"Celestica Questone 2a"}, - SwitchSilicon: SiliconBroadcomTD3_X5, - Features: wiringapi.SwitchProfileFeatures{ // TODO update - Subinterfaces: true, - ACLs: true, - L2VNI: true, - L3VNI: true, - RoCE: false, - MCLAG: true, - ESLAG: true, - ECMPRoCEQPN: false, - }, - NOSType: meta.NOSTypeSONiCCLSPlusBroadcom, - Platform: "x86_64-cel_ds2000-r0", // TODO get rid of or update - Config: wiringapi.SwitchProfileConfig{}, - Ports: map[string]wiringapi.SwitchProfilePort{ - "M1": {NOSName: "Management0", Management: true, OniePortName: "eth0"}, - "E1/1": {NOSName: "Ethernet0", Label: "1", Profile: "SFP28-25G"}, - "E1/2": {NOSName: "Ethernet1", Label: "2", Profile: "SFP28-25G"}, - "E1/3": {NOSName: "Ethernet2", Label: "3", Profile: "SFP28-25G"}, - "E1/4": {NOSName: "Ethernet3", Label: "4", Profile: "SFP28-25G"}, - "E1/5": {NOSName: "Ethernet4", Label: "5", Profile: "SFP28-25G"}, - "E1/6": {NOSName: "Ethernet5", Label: "6", Profile: "SFP28-25G"}, - "E1/7": {NOSName: "Ethernet6", Label: "7", Profile: "SFP28-25G"}, - "E1/8": {NOSName: "Ethernet7", Label: "8", Profile: "SFP28-25G"}, - "E1/9": {NOSName: "Ethernet8", Label: "9", Profile: "SFP28-25G"}, - "E1/10": {NOSName: "Ethernet9", Label: "10", Profile: "SFP28-25G"}, - "E1/11": {NOSName: "Ethernet10", Label: "11", Profile: "SFP28-25G"}, - "E1/12": {NOSName: "Ethernet11", Label: "12", Profile: "SFP28-25G"}, - "E1/13": {NOSName: "Ethernet12", Label: "13", Profile: "SFP28-25G"}, - "E1/14": {NOSName: "Ethernet13", Label: "14", Profile: "SFP28-25G"}, - "E1/15": {NOSName: "Ethernet14", Label: "15", Profile: "SFP28-25G"}, - "E1/16": {NOSName: "Ethernet15", Label: "16", Profile: "SFP28-25G"}, - "E1/17": {NOSName: "Ethernet16", Label: "17", Profile: "SFP28-25G"}, - "E1/18": {NOSName: "Ethernet17", Label: "18", Profile: "SFP28-25G"}, - "E1/19": {NOSName: "Ethernet18", Label: "19", Profile: "SFP28-25G"}, - "E1/20": {NOSName: "Ethernet19", Label: "20", Profile: "SFP28-25G"}, - "E1/21": {NOSName: "Ethernet20", Label: "21", Profile: "SFP28-25G"}, - "E1/22": {NOSName: "Ethernet21", Label: "22", Profile: "SFP28-25G"}, - "E1/23": {NOSName: "Ethernet22", Label: "23", Profile: "SFP28-25G"}, - "E1/24": {NOSName: "Ethernet23", Label: "24", Profile: "SFP28-25G"}, - "E1/25": {NOSName: "Ethernet24", Label: "25", Profile: "SFP28-25G"}, - "E1/26": {NOSName: "Ethernet25", Label: "26", Profile: "SFP28-25G"}, - "E1/27": {NOSName: "Ethernet26", Label: "27", Profile: "SFP28-25G"}, - "E1/28": {NOSName: "Ethernet27", Label: "28", Profile: "SFP28-25G"}, - "E1/29": {NOSName: "Ethernet28", Label: "29", Profile: "SFP28-25G"}, - "E1/30": {NOSName: "Ethernet29", Label: "30", Profile: "SFP28-25G"}, - "E1/31": {NOSName: "Ethernet30", Label: "31", Profile: "SFP28-25G"}, - "E1/32": {NOSName: "Ethernet31", Label: "32", Profile: "SFP28-25G"}, - "E1/33": {NOSName: "Ethernet32", Label: "33", Profile: "SFP28-25G"}, - "E1/34": {NOSName: "Ethernet33", Label: "34", Profile: "SFP28-25G"}, - "E1/35": {NOSName: "Ethernet34", Label: "35", Profile: "SFP28-25G"}, - "E1/36": {NOSName: "Ethernet35", Label: "36", Profile: "SFP28-25G"}, - "E1/37": {NOSName: "Ethernet36", Label: "37", Profile: "SFP28-25G"}, - "E1/38": {NOSName: "Ethernet37", Label: "38", Profile: "SFP28-25G"}, - "E1/39": {NOSName: "Ethernet38", Label: "39", Profile: "SFP28-25G"}, - "E1/40": {NOSName: "Ethernet39", Label: "40", Profile: "SFP28-25G"}, - "E1/41": {NOSName: "Ethernet40", Label: "41", Profile: "SFP28-25G"}, - "E1/42": {NOSName: "Ethernet41", Label: "42", Profile: "SFP28-25G"}, - "E1/43": {NOSName: "Ethernet42", Label: "43", Profile: "SFP28-25G"}, - "E1/44": {NOSName: "Ethernet43", Label: "44", Profile: "SFP28-25G"}, - "E1/45": {NOSName: "Ethernet44", Label: "45", Profile: "SFP28-25G"}, - "E1/46": {NOSName: "Ethernet45", Label: "46", Profile: "SFP28-25G"}, - "E1/47": {NOSName: "Ethernet46", Label: "47", Profile: "SFP28-25G"}, - "E1/48": {NOSName: "Ethernet47", Label: "48", Profile: "SFP28-25G"}, - "E1/49": {NOSName: "1/49", BaseNOSName: "Ethernet48", Label: "49", Profile: "QSFP28-100G"}, - "E1/50": {NOSName: "Ethernet52", Label: "50", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/51": {NOSName: "Ethernet56", Label: "51", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/52": {NOSName: "Ethernet60", Label: "52", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/53": {NOSName: "Ethernet64", Label: "53", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/54": {NOSName: "Ethernet68", Label: "54", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/55": {NOSName: "Ethernet72", Label: "55", Profile: "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix}, - "E1/56": {NOSName: "1/56", BaseNOSName: "Ethernet76", Label: "56", Profile: "QSFP28-100G"}, - }, - PortProfiles: map[string]wiringapi.SwitchProfilePortProfile{ - "SFP28-25G": { - Speed: &wiringapi.SwitchProfilePortProfileSpeed{ - Default: "25G", - Supported: []string{"10G", "25G"}, - }, - }, - "QSFP28-100G" + wiringapi.NonBreakoutPortExceptionSuffix: { - Speed: &wiringapi.SwitchProfilePortProfileSpeed{ - Default: "100G", - Supported: []string{"40G", "100G"}, - }, - }, - "QSFP28-100G": { - Breakout: &wiringapi.SwitchProfilePortProfileBreakout{ - Default: "1x100G", - Supported: map[string]wiringapi.SwitchProfilePortProfileBreakoutMode{ - "1x40G": {Offsets: []string{"0"}}, - "1x100G": {Offsets: []string{"0"}}, - "4x25G": {Offsets: []string{"0", "1", "2", "3"}}, - "4x10G": {Offsets: []string{"0", "1", "2", "3"}}, - }, - }, - }, - }, - }, -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 7f0962554..c499408fe 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1710,7 +1710,7 @@ github.com/zeebo/errs # go.etcd.io/bbolt v1.3.11 ## explicit; go 1.22 go.etcd.io/bbolt -# go.githedgehog.com/fabric v0.88.2 +# go.githedgehog.com/fabric v0.88.1 ## explicit; go 1.24.2 go.githedgehog.com/fabric/api/agent/v1beta1 go.githedgehog.com/fabric/api/dhcp/v1beta1