From da0f3f81dce1e9acd7491bb634bd20f6daa88b31 Mon Sep 17 00:00:00 2001 From: Daniel Jiang Date: Tue, 2 Aug 2022 15:47:57 +0800 Subject: [PATCH] Skip registering "crd-remap-version" plugin when feature flag (#5165) "EnableAPIGroupVersions" is set The crd-remap-version plugin will always backup v1b1 resource for some CRD. It impacts the feature flag `EnableAPIGroupVersions` which means to backup all versions, and make migration fail. In this commit the featureSet was removed from plugin server struct b/c it blocks the parm `--features` to be populated correctly. This change should not have negative impact b/c the attribute in server struct is never used. Fixes #5146 Signed-off-by: Daniel Jiang --- changelogs/unreleased/5173-reasonerjt | 1 + pkg/cmd/server/plugin/plugin.go | 17 ++++++++++------- pkg/plugin/framework/server.go | 6 +----- 3 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 changelogs/unreleased/5173-reasonerjt diff --git a/changelogs/unreleased/5173-reasonerjt b/changelogs/unreleased/5173-reasonerjt new file mode 100644 index 0000000000..c33f179b3f --- /dev/null +++ b/changelogs/unreleased/5173-reasonerjt @@ -0,0 +1 @@ +Skip registering "crd-remap-version" plugin when feature flag "EnableAPIGroupVersions" is set \ No newline at end of file diff --git a/pkg/cmd/server/plugin/plugin.go b/pkg/cmd/server/plugin/plugin.go index 5c833d76a1..5dec03856b 100644 --- a/pkg/cmd/server/plugin/plugin.go +++ b/pkg/cmd/server/plugin/plugin.go @@ -19,9 +19,11 @@ package plugin import ( "github.com/sirupsen/logrus" "github.com/spf13/cobra" - apiextensions "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" + "github.com/vmware-tanzu/velero/pkg/features" + "github.com/vmware-tanzu/velero/pkg/backup" "github.com/vmware-tanzu/velero/pkg/client" velerodiscovery "github.com/vmware-tanzu/velero/pkg/discovery" @@ -36,11 +38,10 @@ func NewCommand(f client.Factory) *cobra.Command { Hidden: true, Short: "INTERNAL COMMAND ONLY - not intended to be run directly by users", Run: func(c *cobra.Command, args []string) { - pluginServer. + pluginServer = pluginServer. RegisterBackupItemAction("velero.io/pv", newPVBackupItemAction). RegisterBackupItemAction("velero.io/pod", newPodBackupItemAction). RegisterBackupItemAction("velero.io/service-account", newServiceAccountBackupItemAction(f)). - RegisterBackupItemAction("velero.io/crd-remap-version", newRemapCRDVersionAction(f)). RegisterRestoreItemAction("velero.io/job", newJobRestoreItemAction). RegisterRestoreItemAction("velero.io/pod", newPodRestoreItemAction). RegisterRestoreItemAction("velero.io/restic", newResticRestoreItemAction(f)). @@ -55,13 +56,15 @@ func NewCommand(f client.Factory) *cobra.Command { RegisterRestoreItemAction("velero.io/crd-preserve-fields", newCRDV1PreserveUnknownFieldsItemAction). RegisterRestoreItemAction("velero.io/change-pvc-node-selector", newChangePVCNodeSelectorItemAction(f)). RegisterRestoreItemAction("velero.io/apiservice", newAPIServiceRestoreItemAction). - RegisterRestoreItemAction("velero.io/admission-webhook-configuration", newAdmissionWebhookConfigurationAction). - Serve() + RegisterRestoreItemAction("velero.io/admission-webhook-configuration", newAdmissionWebhookConfigurationAction) + if !features.IsEnabled(velerov1api.APIGroupVersionsFeatureFlag) { + // Do not register crd-remap-version BIA if the API Group feature flag is enabled, so that the v1 CRD can be backed up + pluginServer = pluginServer.RegisterBackupItemAction("velero.io/crd-remap-version", newRemapCRDVersionAction(f)) + } + pluginServer.Serve() }, } - pluginServer.BindFlags(c.Flags()) - return c } diff --git a/pkg/plugin/framework/server.go b/pkg/plugin/framework/server.go index 066a44db62..b25ef341de 100644 --- a/pkg/plugin/framework/server.go +++ b/pkg/plugin/framework/server.go @@ -25,7 +25,6 @@ import ( "github.com/sirupsen/logrus" "github.com/spf13/pflag" - veleroflag "github.com/vmware-tanzu/velero/pkg/cmd/util/flag" "github.com/vmware-tanzu/velero/pkg/util/logging" ) @@ -78,6 +77,7 @@ type Server interface { // RegisterItemSnapshotters registers multiple Item Snapshotters RegisterItemSnapshotters(map[string]HandlerInitializer) Server + // Server runs the plugin server. Serve() } @@ -87,7 +87,6 @@ type server struct { log *logrus.Logger logLevelFlag *logging.LevelFlag flagSet *pflag.FlagSet - featureSet *veleroflag.StringArray backupItemAction *BackupItemActionPlugin volumeSnapshotter *VolumeSnapshotterPlugin objectStore *ObjectStorePlugin @@ -99,12 +98,10 @@ type server struct { // NewServer returns a new Server func NewServer() Server { log := newLogger() - features := veleroflag.NewStringArray() return &server{ log: log, logLevelFlag: logging.LogLevelFlag(log.Level), - featureSet: &features, backupItemAction: NewBackupItemActionPlugin(serverLogger(log)), volumeSnapshotter: NewVolumeSnapshotterPlugin(serverLogger(log)), objectStore: NewObjectStorePlugin(serverLogger(log)), @@ -116,7 +113,6 @@ func NewServer() Server { func (s *server) BindFlags(flags *pflag.FlagSet) Server { flags.Var(s.logLevelFlag, "log-level", fmt.Sprintf("The level at which to log. Valid values are %s.", strings.Join(s.logLevelFlag.AllowedValues(), ", "))) - flags.Var(s.featureSet, "features", "List of feature flags for this plugin") s.flagSet = flags s.flagSet.ParseErrorsWhitelist.UnknownFlags = true