From 031a305e0d35e228b4aea888fe9b4dfcc0f25a06 Mon Sep 17 00:00:00 2001 From: mreiger Date: Wed, 3 Dec 2025 10:32:20 +0100 Subject: [PATCH] Use substring matching for version checking for latest 202211 sonic version --- cmd/generate.go | 2 +- configdb/configdb.go | 22 +++++++++++----------- configdb/configdb_test.go | 22 ++++++++-------------- version/version.go | 21 ++++++++++++++++----- 4 files changed, 36 insertions(+), 31 deletions(-) diff --git a/cmd/generate.go b/cmd/generate.go index d6063c0..b82d955 100644 --- a/cmd/generate.go +++ b/cmd/generate.go @@ -55,7 +55,7 @@ var generateCmd = &cobra.Command{ return fmt.Errorf("failed to read version file:%w", err) } - version, err := v.UnmarshalVersion(versionBytes) + version, err := v.GetVersion(versionBytes) if err != nil { return fmt.Errorf("failed to parse version file:%w", err) } diff --git a/configdb/configdb.go b/configdb/configdb.go index 583f715..a14a0dd 100644 --- a/configdb/configdb.go +++ b/configdb/configdb.go @@ -45,7 +45,7 @@ type ConfigDB struct { VXLANTunnelMap VXLANTunnelMap `json:"VXLAN_TUNNEL_MAP,omitempty"` } -func GenerateConfigDB(input *values.Values, platform *p.Platform, environment *p.Environment, version *v.Version) (*ConfigDB, error) { +func GenerateConfigDB(input *values.Values, platform *p.Platform, environment *p.Environment, version v.Branch) (*ConfigDB, error) { if input == nil { return nil, fmt.Errorf("no input values provided") } @@ -284,7 +284,7 @@ func getInterfaces(ports values.Ports, bgpPorts []string, interconnects map[stri return interfaces } -func getLLDP(interval int, version *v.Version) *LLDP { +func getLLDP(interval int, version v.Branch) *LLDP { if interval < 1 { return nil } @@ -294,11 +294,11 @@ func getLLDP(interval int, version *v.Version) *LLDP { HelloTime: fmt.Sprintf("%d", interval), } - switch version.Branch { - case string(v.Branch202111): + switch version { + case v.Branch202111: global202111 := LLDPGlobal202111(global) lldp.Global202111 = &global202111 - case string(v.Branch202211): + case v.Branch202211: global202211 := LLDPGlobal202211(global) lldp.Global202211 = &global202211 default: @@ -504,8 +504,8 @@ func getPortsAndBreakouts(ports values.Ports, breakouts map[string]string, platf return configPorts, configBreakouts, nil } -func getSAG(sag *values.SAG, version *v.Version) (*SAG, error) { - if version.Branch != string(v.Branch202211) && sag != nil { +func getSAG(sag *values.SAG, version v.Branch) (*SAG, error) { + if version != v.Branch202211 && sag != nil { return nil, fmt.Errorf("sag configuration only works with sonic versions from the ec202211_ecsonic branch") } @@ -533,13 +533,13 @@ func getVLANs(vlans []values.VLAN) map[string]VLAN { return configVLANs } -func getVLANInterfaces(vlans []values.VLAN, version *v.Version) (map[string]VLANInterface, error) { +func getVLANInterfaces(vlans []values.VLAN, version v.Branch) (map[string]VLANInterface, error) { vlanInterfaces := make(map[string]VLANInterface) for _, vlan := range vlans { var vlanInterface VLANInterface - if version.Branch != string(v.Branch202211) && vlan.SAG != nil { + if version != v.Branch202211 && vlan.SAG != nil { return nil, fmt.Errorf("sag only works for sonic builds from branch ec202211_ecsonic") } var sag string @@ -583,14 +583,14 @@ func getVLANMembers(vlans []values.VLAN) map[string]VLANMember { return vlanMembers } -func getVRRPInterfaces(vlans []values.VLAN, version *v.Version) (map[string]VRRPInterface, error) { +func getVRRPInterfaces(vlans []values.VLAN, version v.Branch) (map[string]VRRPInterface, error) { vrrpInterfaces := make(map[string]VRRPInterface) for _, vlan := range vlans { if vlan.VRRP.Group == "" { continue } - if version.Branch != string(v.Branch202111) { + if version != v.Branch202111 { return nil, fmt.Errorf("vrrp configuration only works with sonic versions from the ec202111 branch") } diff --git a/configdb/configdb_test.go b/configdb/configdb_test.go index e0efac9..39c7cb7 100644 --- a/configdb/configdb_test.go +++ b/configdb/configdb_test.go @@ -557,25 +557,21 @@ func Test_getSAG(t *testing.T) { tests := []struct { name string sag *values.SAG - version *v.Version + version v.Branch want *SAG wantErr bool }{ { - name: "wrong version", - sag: &values.SAG{}, - version: &v.Version{ - Branch: string(v.Branch202111), - }, + name: "wrong version", + sag: &values.SAG{}, + version: v.Branch202111, want: nil, wantErr: true, }, { - name: "empty mac", - sag: &values.SAG{}, - version: &v.Version{ - Branch: string(v.Branch202211), - }, + name: "empty mac", + sag: &values.SAG{}, + version: v.Branch202211, want: nil, wantErr: false, }, @@ -584,9 +580,7 @@ func Test_getSAG(t *testing.T) { sag: &values.SAG{ MAC: "11:11:11:11:11:11", }, - version: &v.Version{ - Branch: string(v.Branch202211), - }, + version: v.Branch202211, want: &SAG{ SAGGlobal: SAGGlobal{ GatewayMAC: "11:11:11:11:11:11", diff --git a/version/version.go b/version/version.go index b313832..362f253 100644 --- a/version/version.go +++ b/version/version.go @@ -1,24 +1,35 @@ package version -import "gopkg.in/yaml.v3" +import ( + "strings" + + "gopkg.in/yaml.v3" +) type Branch string const ( Branch202111 Branch = "ec202111" - Branch202211 Branch = "ec202211_ecsonic" + Branch202211 Branch = "ec202211" ) type Version struct { Branch string `yaml:"branch"` } -func UnmarshalVersion(in []byte) (*Version, error) { +func GetVersion(in []byte) (Branch, error) { var version Version err := yaml.Unmarshal(in, &version) if err != nil { - return nil, err + return "", err + } + + if strings.Contains(version.Branch, string(Branch202111)) { + return Branch202111, nil + } + if strings.Contains(version.Branch, string(Branch202211)) { + return Branch202211, nil } - return &version, nil + return "", nil }