diff --git a/.github/workflows/pr-codespell.yml b/.github/workflows/pr-codespell.yml index 36cb779f4..1fff7e920 100644 --- a/.github/workflows/pr-codespell.yml +++ b/.github/workflows/pr-codespell.yml @@ -15,6 +15,6 @@ jobs: with: # ignore the config/.../crd.go file as it's generated binary data that is edited elswhere. skip: .git,*.png,*.jpg,*.woff,*.ttf,*.gif,*.ico,./config/crd/v1beta1/crds/crds.go,./config/crd/v1/crds/crds.go,./go.sum,./LICENSE - ignore_words_list: iam,aks,ist,bridget,ue,shouldnot + ignore_words_list: iam,aks,ist,bridget,ue,shouldnot,atleast check_filenames: true check_hidden: true diff --git a/test/e2e/Makefile b/test/e2e/Makefile index bad4dfb1f..c36bac932 100644 --- a/test/e2e/Makefile +++ b/test/e2e/Makefile @@ -55,7 +55,7 @@ VELERO_VERSION ?= $(VERSION) PLUGINS ?= RESTORE_HELPER_IMAGE ?= #Released version only -UPGRADE_FROM_VELERO_VERSION ?= v1.8.1,v1.9.2 +UPGRADE_FROM_VELERO_VERSION ?= v1.9.6,v1.10.2 # UPGRADE_FROM_VELERO_CLI can has the same format(a list divided by comma) with UPGRADE_FROM_VELERO_VERSION # Upgrade tests will be executed sequently according to the list by UPGRADE_FROM_VELERO_VERSION # So although length of UPGRADE_FROM_VELERO_CLI list is not equal with UPGRADE_FROM_VELERO_VERSION @@ -63,7 +63,7 @@ UPGRADE_FROM_VELERO_VERSION ?= v1.8.1,v1.9.2 # to the end, nil string will be set if UPGRADE_FROM_VELERO_CLI is shorter than UPGRADE_FROM_VELERO_VERSION UPGRADE_FROM_VELERO_CLI ?= -MIGRATE_FROM_VELERO_VERSION ?= v1.8.1,self +MIGRATE_FROM_VELERO_VERSION ?= v1.10.2,self MIGRATE_FROM_VELERO_CLI ?= VELERO_NAMESPACE ?= velero diff --git a/test/e2e/migration/migration.go b/test/e2e/migration/migration.go index 90ef871ba..b1e2dae67 100644 --- a/test/e2e/migration/migration.go +++ b/test/e2e/migration/migration.go @@ -100,7 +100,8 @@ func MigrationTest(useVolumeSnapshots bool, veleroCLI2Version VeleroCLI2Version) flag.Parse() UUIDgen, err = uuid.NewRandom() Expect(err).To(Succeed()) - + supportUploaderType, err := IsSupportUploaderType(veleroCLI2Version.VeleroVersion) + Expect(err).To(Succeed()) oneHourTimeout, _ := context.WithTimeout(context.Background(), time.Minute*60) if veleroCLI2Version.VeleroCLI == "" { @@ -126,14 +127,20 @@ func MigrationTest(useVolumeSnapshots bool, veleroCLI2Version VeleroCLI2Version) OriginVeleroCfg.UseNodeAgent = !useVolumeSnapshots // TODO: self means 1.10 and upper version if veleroCLI2Version.VeleroVersion != "self" { + Expect(err).To(Succeed()) fmt.Printf("Using default images address of Velero CLI %s\n", veleroCLI2Version.VeleroVersion) OriginVeleroCfg.VeleroImage = "" OriginVeleroCfg.RestoreHelperImage = "" OriginVeleroCfg.Plugins = "" //TODO: Remove this once origin Velero version is 1.10 and upper OriginVeleroCfg.UploaderType = "" - OriginVeleroCfg.UseNodeAgent = false - OriginVeleroCfg.UseRestic = !useVolumeSnapshots + if supportUploaderType { + OriginVeleroCfg.UseRestic = false + OriginVeleroCfg.UseNodeAgent = !useVolumeSnapshots + } else { + OriginVeleroCfg.UseRestic = !useVolumeSnapshots + OriginVeleroCfg.UseNodeAgent = false + } } Expect(VeleroInstall(context.Background(), &OriginVeleroCfg)).To(Succeed()) @@ -165,11 +172,7 @@ func MigrationTest(useVolumeSnapshots bool, veleroCLI2Version VeleroCLI2Version) BackupStorageClassCfg.IncludeResources = "StorageClass" BackupStorageClassCfg.IncludeClusterResources = true //TODO Remove UseRestic parameter once minor version is 1.10 or upper - BackupStorageClassCfg.UseResticIfFSBackup = true - if veleroCLI2Version.VeleroVersion == "self" { - BackupStorageClassCfg.UseResticIfFSBackup = false - } - + BackupStorageClassCfg.UseResticIfFSBackup = !supportUploaderType Expect(VeleroBackupNamespace(context.Background(), OriginVeleroCfg.VeleroCLI, OriginVeleroCfg.VeleroNamespace, BackupStorageClassCfg)).To(Succeed(), func() string { RunDebug(context.Background(), veleroCfg.VeleroCLI, veleroCfg.VeleroNamespace, BackupStorageClassCfg.BackupName, "") @@ -184,10 +187,8 @@ func MigrationTest(useVolumeSnapshots bool, veleroCLI2Version VeleroCLI2Version) BackupCfg.Selector = "" BackupCfg.DefaultVolumesToFsBackup = !useVolumeSnapshots //TODO Remove UseRestic parameter once minor version is 1.10 or upper - BackupCfg.UseResticIfFSBackup = true - if veleroCLI2Version.VeleroVersion == "self" { - BackupCfg.UseResticIfFSBackup = false - } + BackupCfg.UseResticIfFSBackup = !supportUploaderType + Expect(VeleroBackupNamespace(context.Background(), OriginVeleroCfg.VeleroCLI, OriginVeleroCfg.VeleroNamespace, BackupCfg)).To(Succeed(), func() string { RunDebug(context.Background(), OriginVeleroCfg.VeleroCLI, OriginVeleroCfg.VeleroNamespace, BackupCfg.BackupName, "") diff --git a/test/e2e/upgrade/upgrade.go b/test/e2e/upgrade/upgrade.go index 72e8db807..0bf0ccc96 100644 --- a/test/e2e/upgrade/upgrade.go +++ b/test/e2e/upgrade/upgrade.go @@ -97,6 +97,8 @@ func BackupUpgradeRestoreTest(useVolumeSnapshots bool, veleroCLI2Version VeleroC UUIDgen, err = uuid.NewRandom() Expect(err).To(Succeed()) oneHourTimeout, _ := context.WithTimeout(context.Background(), time.Minute*60) + supportUploaderType, err := IsSupportUploaderType(veleroCLI2Version.VeleroVersion) + Expect(err).To(Succeed()) if veleroCLI2Version.VeleroCLI == "" { //Assume tag of velero server image is identical to velero CLI version //Download velero CLI if it's empty according to velero CLI version @@ -118,8 +120,13 @@ func BackupUpgradeRestoreTest(useVolumeSnapshots bool, veleroCLI2Version VeleroC tmpCfgForOldVeleroInstall.RestoreHelperImage = "" tmpCfgForOldVeleroInstall.Plugins = "" tmpCfgForOldVeleroInstall.UploaderType = "" - tmpCfgForOldVeleroInstall.UseNodeAgent = false - tmpCfgForOldVeleroInstall.UseRestic = !useVolumeSnapshots + if supportUploaderType { + tmpCfgForOldVeleroInstall.UseRestic = false + tmpCfgForOldVeleroInstall.UseNodeAgent = !useVolumeSnapshots + } else { + tmpCfgForOldVeleroInstall.UseRestic = !useVolumeSnapshots + tmpCfgForOldVeleroInstall.UseNodeAgent = false + } Expect(VeleroInstall(context.Background(), &tmpCfgForOldVeleroInstall)).To(Succeed()) Expect(CheckVeleroVersion(context.Background(), tmpCfgForOldVeleroInstall.VeleroCLI, @@ -152,7 +159,7 @@ func BackupUpgradeRestoreTest(useVolumeSnapshots bool, veleroCLI2Version VeleroC BackupCfg.DefaultVolumesToFsBackup = !useVolumeSnapshots BackupCfg.Selector = "" //TODO: pay attention to this param, remove it when restic is not the default backup tool any more. - BackupCfg.UseResticIfFSBackup = true + BackupCfg.UseResticIfFSBackup = !supportUploaderType Expect(VeleroBackupNamespace(oneHourTimeout, tmpCfg.UpgradeFromVeleroCLI, tmpCfg.VeleroNamespace, BackupCfg)).To(Succeed(), func() string { RunDebug(context.Background(), tmpCfg.UpgradeFromVeleroCLI, tmpCfg.VeleroNamespace, @@ -202,13 +209,22 @@ func BackupUpgradeRestoreTest(useVolumeSnapshots bool, veleroCLI2Version VeleroC } By(fmt.Sprintf("Upgrade Velero by CLI %s", tmpCfg.VeleroCLI), func() { + tmpCfg.GCFrequency = "" - tmpCfg.UseNodeAgent = !useVolumeSnapshots tmpCfg.UseRestic = false - tmpCfg.UploaderType = "restic" - Expect(VeleroUpgrade(context.Background(), tmpCfg)).To(Succeed()) - Expect(CheckVeleroVersion(context.Background(), tmpCfg.VeleroCLI, - tmpCfg.VeleroVersion)).To(Succeed()) + tmpCfg.UseNodeAgent = !useVolumeSnapshots + Expect(err).To(Succeed()) + if supportUploaderType { + Expect(VeleroInstall(context.Background(), &tmpCfg)).To(Succeed()) + Expect(CheckVeleroVersion(context.Background(), tmpCfg.VeleroCLI, + tmpCfg.VeleroVersion)).To(Succeed()) + } else { + // For upgrade from v1.9 or other version below v1.9 + tmpCfg.UploaderType = "restic" + Expect(VeleroUpgrade(context.Background(), tmpCfg)).To(Succeed()) + Expect(CheckVeleroVersion(context.Background(), tmpCfg.VeleroCLI, + tmpCfg.VeleroVersion)).To(Succeed()) + } }) By(fmt.Sprintf("Restore %s", upgradeNamespace), func() { diff --git a/test/e2e/util/velero/velero_utils.go b/test/e2e/util/velero/velero_utils.go index 63eb54449..b8d57c621 100644 --- a/test/e2e/util/velero/velero_utils.go +++ b/test/e2e/util/velero/velero_utils.go @@ -38,6 +38,8 @@ import ( kbclient "sigs.k8s.io/controller-runtime/pkg/client" + ver "k8s.io/apimachinery/pkg/util/version" + velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" cliinstall "github.com/vmware-tanzu/velero/pkg/cmd/cli/install" "github.com/vmware-tanzu/velero/pkg/cmd/util/flag" @@ -102,6 +104,13 @@ var pluginsMatrix = map[string]map[string][]string{ "gcp": {"velero/velero-plugin-for-gcp:v1.6.0"}, "azure-csi": {"velero/velero-plugin-for-microsoft-azure:v1.6.0", "velero/velero-plugin-for-csi:v0.4.0"}, }, + "v1.11": { + "aws": {"velero/velero-plugin-for-aws:v1.7.0"}, + "azure": {"velero/velero-plugin-for-microsoft-azure:v1.7.0"}, + "vsphere": {"velero/velero-plugin-for-aws:v1.7.0", "vsphereveleroplugin/velero-plugin-for-vsphere:v1.4.2"}, + "gcp": {"velero/velero-plugin-for-gcp:v1.7.0"}, + "azure-csi": {"velero/velero-plugin-for-microsoft-azure:v1.7.0", "velero/velero-plugin-for-csi:v0.5.0"}, + }, "main": { "aws": {"velero/velero-plugin-for-aws:main"}, "azure": {"velero/velero-plugin-for-microsoft-azure:main"}, @@ -1290,3 +1299,22 @@ func GetPVB(ctx context.Context, veleroNamespace, namespace string) ([]string, e func GetPVR(ctx context.Context, veleroNamespace, namespace string) ([]string, error) { return GetVeleroResource(ctx, veleroNamespace, namespace, "podvolumerestore") } + +func IsSupportUploaderType(version string) (bool, error) { + if strings.Contains(version, "self") { + return true, nil + } + verSupportUploaderType, err := ver.ParseSemantic("v1.10.0") + if err != nil { + return false, err + } + v, err := ver.ParseSemantic(version) + if err != nil { + return false, err + } + if v.AtLeast(verSupportUploaderType) { + return true, nil + } else { + return false, nil + } +}