mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-21 10:51:29 +00:00
Merge pull request #109089 from deepakkinni/deprecate-vc-70u2-below-releases-v2
deprecate vsphere releases less than 7.0u2 for in-tree vsphere volumes
This commit is contained in:
commit
c290874532
@ -306,7 +306,7 @@ const (
|
||||
InTreePluginAzureFileUnregister featuregate.Feature = "InTreePluginAzureFileUnregister"
|
||||
|
||||
// owner: @divyenpatel
|
||||
// beta: v1.19 (requires: vSphere vCenter/ESXi Version: 7.0u1, HW Version: VM version 15)
|
||||
// beta: v1.19 (requires: vSphere vCenter/ESXi Version: 7.0u2, HW Version: VM version 15)
|
||||
//
|
||||
// Enables the vSphere in-tree driver to vSphere CSI Driver migration feature.
|
||||
CSIMigrationvSphere featuregate.Feature = "CSIMigrationvSphere"
|
||||
|
@ -14,7 +14,6 @@ require (
|
||||
github.com/Azure/go-autorest/autorest/validation v0.1.0 // indirect
|
||||
github.com/GoogleCloudPlatform/k8s-cloud-provider v1.16.1-0.20210702024009-ea6160c1d0e3
|
||||
github.com/aws/aws-sdk-go v1.38.49
|
||||
github.com/blang/semver/v4 v4.0.0
|
||||
github.com/dnaeon/go-vcr v1.0.1 // indirect
|
||||
github.com/gofrs/uuid v4.0.0+incompatible // indirect
|
||||
github.com/golang/mock v1.5.0
|
||||
|
@ -53,7 +53,7 @@ const (
|
||||
ClusterComputeResourceType = "ClusterComputeResource"
|
||||
HostSystemType = "HostSystem"
|
||||
NameProperty = "name"
|
||||
MinvCenterVersion = "6.7.0"
|
||||
MinvCenterVersion = "7.0.2"
|
||||
)
|
||||
|
||||
// Test Constants
|
||||
|
@ -20,9 +20,9 @@ import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/blang/semver/v4"
|
||||
"github.com/vmware/govmomi/find"
|
||||
"github.com/vmware/govmomi/object"
|
||||
"github.com/vmware/govmomi/vim25/soap"
|
||||
@ -202,32 +202,82 @@ func VerifyVolumePathsForVMDevices(vmDevices object.VirtualDeviceList, volPaths
|
||||
}
|
||||
|
||||
// isvCenterDeprecated takes vCenter version and vCenter API version as input and return true if vCenter is deprecated
|
||||
func isvCenterDeprecated(vCenterVersion string, vCenerAPIVersion string) (bool, error) {
|
||||
minvcversion, err := semver.New(MinvCenterVersion)
|
||||
vcdeprecated := false
|
||||
func isvCenterDeprecated(vCenterVersion string, vCenterAPIVersion string) (bool, error) {
|
||||
var vcversion, vcapiversion, minvcversion vcVersion
|
||||
var err error
|
||||
err = vcversion.parse(vCenterVersion)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to get parse vCenter version: %s. err: %+v", MinvCenterVersion, err)
|
||||
} else {
|
||||
vcversion, err := semver.New(vCenterVersion)
|
||||
return false, fmt.Errorf("failed to parse vCenter version: %s. err: %+v", vCenterVersion, err)
|
||||
}
|
||||
err = vcapiversion.parse(vCenterAPIVersion)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to parse vCenter API version: %s. err: %+v", vCenterAPIVersion, err)
|
||||
}
|
||||
err = minvcversion.parse(MinvCenterVersion)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to parse minimum vCenter version: %s. err: %+v", MinvCenterVersion, err)
|
||||
}
|
||||
if vcversion.isLessThan(minvcversion) && vcapiversion.isLessThan(minvcversion) {
|
||||
return true, nil
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// vcVersion represents a VC version
|
||||
type vcVersion struct {
|
||||
Major int64
|
||||
Minor int64
|
||||
Revision int64
|
||||
Build int64
|
||||
}
|
||||
|
||||
// parse helps parse version string to VCVersion
|
||||
// returns error when parse fail
|
||||
func (v *vcVersion) parse(version string) error {
|
||||
for index, value := range strings.Split(version, ".") {
|
||||
var err error
|
||||
if index == 0 {
|
||||
v.Major, err = strconv.ParseInt(value, 10, 64)
|
||||
} else if index == 1 {
|
||||
v.Minor, err = strconv.ParseInt(value, 10, 64)
|
||||
} else if index == 2 {
|
||||
v.Revision, err = strconv.ParseInt(value, 10, 64)
|
||||
} else if index == 3 {
|
||||
v.Build, err = strconv.ParseInt(value, 10, 64)
|
||||
}
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to parse vCenter version: %s. err: %+v", vCenterVersion, err)
|
||||
} else {
|
||||
result := vcversion.Compare(*minvcversion)
|
||||
if result == -1 {
|
||||
// vcversion is less than minvcversion
|
||||
vcdeprecated = true
|
||||
} else if result == 0 {
|
||||
// vcversion is equal to minvcversion
|
||||
// check patch version
|
||||
vcapiversion, err := semver.ParseTolerant(vCenerAPIVersion)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf("failed to parse vCenter api version: %s. err: %+v", vCenerAPIVersion, err)
|
||||
}
|
||||
if vcapiversion.Patch < 3 {
|
||||
vcdeprecated = true
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("failed to parse version: %q, err: %v", version, err)
|
||||
}
|
||||
}
|
||||
return vcdeprecated, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// isLessThan compares VCVersion v to o and returns
|
||||
// true if v is less than o
|
||||
func (v *vcVersion) isLessThan(o vcVersion) bool {
|
||||
if v.Major != o.Major {
|
||||
if v.Major > o.Major {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
if v.Minor != o.Minor {
|
||||
if v.Minor > o.Minor {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
if v.Revision != o.Revision {
|
||||
if v.Revision > o.Revision {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
if v.Build != o.Build {
|
||||
if v.Build > o.Build {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
@ -70,72 +70,36 @@ func TestUtils(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter70update1Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("7.0.1", "7.0.1.1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
func TestIsvCenterDeprecated(t *testing.T) {
|
||||
type testsData struct {
|
||||
vcVersion string
|
||||
vcAPIVersion string
|
||||
isDeprecated bool
|
||||
}
|
||||
if vcdeprecated {
|
||||
t.Fatal("vSphere 7.0 update1 should not be deprecated")
|
||||
testdataArray := []testsData{
|
||||
{"8.0.0", "8.0.0.0", false},
|
||||
{"7.0.3", "7.0.3.0", false},
|
||||
{"7.0.2", "7.0.2.0", false},
|
||||
{"7.0.1", "7.0.1.1", true},
|
||||
{"7.0.0", "7.0.0.0", true},
|
||||
{"6.7.0", "6.7.3", true},
|
||||
{"6.7.0", "6.7", true},
|
||||
{"6.7.0", "6.7.2", true},
|
||||
{"6.7.0", "6.7.1", true},
|
||||
{"6.5.0", "6.5", true},
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter70Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("7.0.0", "7.0.0.0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if vcdeprecated {
|
||||
t.Fatal("vSphere 7.0 should not be deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter67u3Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("6.7.0", "6.7.3")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if vcdeprecated {
|
||||
t.Fatal("vSphere 67u3 should not be deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter67Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("6.7.0", "6.7")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !vcdeprecated {
|
||||
t.Fatal("vSphere 6.7 should be deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter67u2Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("6.7.0", "6.7.2")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !vcdeprecated {
|
||||
t.Fatal("vSphere 6.7 update 2 should be deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter67u1Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("6.7.0", "6.7.1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !vcdeprecated {
|
||||
t.Fatal("vSphere 6.7 update 1 should be deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsvCenter65Deprecated(t *testing.T) {
|
||||
vcdeprecated, err := isvCenterDeprecated("6.5.0", "6.5")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !vcdeprecated {
|
||||
t.Fatal("vSphere 6.5 should be deprecated")
|
||||
for _, test := range testdataArray {
|
||||
deprecated, err := isvCenterDeprecated(test.vcVersion, test.vcAPIVersion)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if deprecated != test.isDeprecated {
|
||||
t.Fatalf("deprecation test failed for vc version: %q and vc API version: %q",
|
||||
test.vcVersion, test.vcAPIVersion)
|
||||
} else {
|
||||
t.Logf("deprecation test for vc version: %q and vc API version: %q passed. Is Deprecated : %v",
|
||||
test.vcAPIVersion, test.vcAPIVersion, deprecated)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user