diff --git a/pkg/common/unittestcommon/utils.go b/pkg/common/unittestcommon/utils.go index 8324d8139f..a9632035a8 100644 --- a/pkg/common/unittestcommon/utils.go +++ b/pkg/common/unittestcommon/utils.go @@ -63,7 +63,6 @@ var mapVolumePathToID map[string]map[string]string func GetFakeContainerOrchestratorInterface(orchestratorType int) (commonco.COCommonInterface, error) { if orchestratorType == common.Kubernetes { defaultFSS := map[string]string{ - "file-volume": "true", "block-volume-snapshot": "true", "tkgs-ha": "true", "list-volumes": "true", diff --git a/pkg/csi/service/common/constants.go b/pkg/csi/service/common/constants.go index b6d3d602e8..d20b2659b0 100644 --- a/pkg/csi/service/common/constants.go +++ b/pkg/csi/service/common/constants.go @@ -412,8 +412,6 @@ const ( // CSISVFeatureStateReplication is feature flag for SV feature state // replication feature. CSISVFeatureStateReplication = "csi-sv-feature-states-replication" - // FileVolume is feature flag name for file volume support in WCP. - FileVolume = "file-volume" // TriggerCSIFullSyync is feature flag to trigger full sync. TriggerCsiFullSync = "trigger-csi-fullsync" // CSIVolumeManagerIdempotency is the feature flag for idempotency handling diff --git a/pkg/csi/service/wcp/controller.go b/pkg/csi/service/wcp/controller.go index a251d442bd..6905e868f9 100644 --- a/pkg/csi/service/wcp/controller.go +++ b/pkg/csi/service/wcp/controller.go @@ -1736,10 +1736,6 @@ func (c *controller) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequ } if !isBlockRequest { - if !commonco.ContainerOrchestratorUtility.IsFSSEnabled(ctx, common.FileVolume) { - return nil, csifault.CSIUnimplementedFault, logger.LogNewErrorCode(log, codes.Unimplemented, - "file volume feature is disabled on the cluster") - } // Block file volume provisioning if FSS Workload_Domain_Isolation_Supported is enabled but // 'fileVolumeActivated' field is set to false in vSphere config secret. if isWorkloadDomainIsolationEnabled && diff --git a/pkg/csi/service/wcpguest/controller.go b/pkg/csi/service/wcpguest/controller.go index 5081922693..52ea73efaf 100644 --- a/pkg/csi/service/wcpguest/controller.go +++ b/pkg/csi/service/wcpguest/controller.go @@ -476,7 +476,7 @@ func (c *controller) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequ return nil, csifault.CSIInternalFault, status.Error(codes.DeadlineExceeded, msg) } attributes := make(map[string]string) - if commonco.ContainerOrchestratorUtility.IsFSSEnabled(ctx, common.FileVolume) && isFileVolumeRequest { + if isFileVolumeRequest { attributes[common.AttributeDiskType] = common.DiskTypeFileVolume } else { attributes[common.AttributeDiskType] = common.DiskTypeBlockVolume @@ -725,12 +725,6 @@ func (c *controller) ControllerPublishVolume(ctx context.Context, req *csi.Contr // File volumes support if isFileVolumeRequest { volumeType = prometheus.PrometheusFileVolumeType - // Check the feature state for file volume support - if !commonco.ContainerOrchestratorUtility.IsFSSEnabled(ctx, common.FileVolume) { - // Feature is disabled on the cluster - return nil, csifault.CSIInternalFault, - status.Error(codes.InvalidArgument, "File volume not supported.") - } return controllerPublishForFileVolume(ctx, req, c) } volumeType = prometheus.PrometheusBlockVolumeType @@ -1081,11 +1075,7 @@ func (c *controller) ControllerUnpublishVolume(ctx context.Context, req *csi.Con } if isFileVolume { volumeType = prometheus.PrometheusFileVolumeType - if commonco.ContainerOrchestratorUtility.IsFSSEnabled(ctx, common.FileVolume) { - return controllerUnpublishForFileVolume(ctx, req, c) - } - // Feature is disabled on the cluster - return nil, csifault.CSIInvalidArgumentFault, status.Error(codes.InvalidArgument, "File volume not supported.") + return controllerUnpublishForFileVolume(ctx, req, c) } volumeType = prometheus.PrometheusBlockVolumeType return controllerUnpublishForBlockVolume(ctx, req, c) diff --git a/pkg/csi/service/wcpguest/controller_helper.go b/pkg/csi/service/wcpguest/controller_helper.go index 4955513ad9..f9504e6e02 100644 --- a/pkg/csi/service/wcpguest/controller_helper.go +++ b/pkg/csi/service/wcpguest/controller_helper.go @@ -101,8 +101,7 @@ func validateGuestClusterCreateVolumeRequest(ctx context.Context, req *csi.Creat } // Fail file volume creation if file volume feature gate is disabled - if !commonco.ContainerOrchestratorUtility.IsFSSEnabled(ctx, common.FileVolume) && - common.IsFileVolumeRequest(ctx, req.GetVolumeCapabilities()) { + if common.IsFileVolumeRequest(ctx, req.GetVolumeCapabilities()) { return logger.LogNewErrorCode(log, codes.InvalidArgument, "File volume provisioning is not supported.") } return common.ValidateCreateVolumeRequest(ctx, req) diff --git a/pkg/syncer/cnsoperator/controller/cnsfileaccessconfig/cnsfileaccessconfig_controller.go b/pkg/syncer/cnsoperator/controller/cnsfileaccessconfig/cnsfileaccessconfig_controller.go index 5e0a0279d9..fa5cd7995a 100644 --- a/pkg/syncer/cnsoperator/controller/cnsfileaccessconfig/cnsfileaccessconfig_controller.go +++ b/pkg/syncer/cnsoperator/controller/cnsfileaccessconfig/cnsfileaccessconfig_controller.go @@ -53,7 +53,6 @@ import ( "sigs.k8s.io/vsphere-csi-driver/v3/pkg/csi/service/logger" "sigs.k8s.io/vsphere-csi-driver/v3/pkg/internalapis/cnsoperator/cnsfilevolumeclient" k8s "sigs.k8s.io/vsphere-csi-driver/v3/pkg/kubernetes" - "sigs.k8s.io/vsphere-csi-driver/v3/pkg/syncer" cnsoperatortypes "sigs.k8s.io/vsphere-csi-driver/v3/pkg/syncer/cnsoperator/types" "sigs.k8s.io/vsphere-csi-driver/v3/pkg/syncer/cnsoperator/util" ) @@ -99,17 +98,7 @@ func Add(mgr manager.Manager, clusterFlavor cnstypes.CnsClusterFlavor, } } volumePermissionLockMap = &sync.Map{} - // Initialize the k8s orchestrator interface. - coCommonInterface, err := commonco.GetContainerOrchestratorInterface(ctx, common.Kubernetes, - cnstypes.CnsClusterFlavorWorkload, &syncer.COInitParams) - if err != nil { - log.Errorf("failed to create CO agnostic interface. Err: %v", err) - return err - } - if !coCommonInterface.IsFSSEnabled(ctx, common.FileVolume) { - log.Infof("Not initializing the CnsFileAccessConfig Controller as File volume feature is disabled on the cluster") - return nil - } + // Initializes kubernetes client. k8sclient, err := k8s.NewClient(ctx) if err != nil { diff --git a/pkg/syncer/cnsoperator/manager/init.go b/pkg/syncer/cnsoperator/manager/init.go index 01abd74d99..10994f5f20 100644 --- a/pkg/syncer/cnsoperator/manager/init.go +++ b/pkg/syncer/cnsoperator/manager/init.go @@ -259,24 +259,22 @@ func InitCnsOperator(ctx context.Context, clusterFlavor cnstypes.CnsClusterFlavo } if !stretchedSupervisor || syncer.IsWorkloadDomainIsolationSupported { - if cnsOperator.coCommonInterface.IsFSSEnabled(ctx, common.FileVolume) { - // Create CnsFileAccessConfig CRD from manifest if file volume feature - // is enabled. - err = k8s.CreateCustomResourceDefinitionFromManifest(ctx, cnsoperatorconfig.EmbedCnsFileAccessConfigCRFile, - cnsoperatorconfig.EmbedCnsFileAccessConfigCRFileName) - if err != nil { - log.Errorf("Failed to create %q CRD. Err: %+v", cnsoperatorv1alpha1.CnsFileAccessConfigPlural, err) - return err - } - // Create FileVolumeClients CRD from manifest if file volume feature - // is enabled. - err = k8s.CreateCustomResourceDefinitionFromManifest(ctx, - internalapiscnsoperatorconfig.EmbedCnsFileVolumeClientFile, - internalapiscnsoperatorconfig.EmbedCnsFileVolumeClientFileName) - if err != nil { - log.Errorf("Failed to create %q CRD. Err: %+v", internalapis.CnsFileVolumeClientPlural, err) - return err - } + // Create CnsFileAccessConfig CRD from manifest if file volume feature + // is enabled. + err = k8s.CreateCustomResourceDefinitionFromManifest(ctx, cnsoperatorconfig.EmbedCnsFileAccessConfigCRFile, + cnsoperatorconfig.EmbedCnsFileAccessConfigCRFileName) + if err != nil { + log.Errorf("Failed to create %q CRD. Err: %+v", cnsoperatorv1alpha1.CnsFileAccessConfigPlural, err) + return err + } + // Create FileVolumeClients CRD from manifest if file volume feature + // is enabled. + err = k8s.CreateCustomResourceDefinitionFromManifest(ctx, + internalapiscnsoperatorconfig.EmbedCnsFileVolumeClientFile, + internalapiscnsoperatorconfig.EmbedCnsFileVolumeClientFileName) + if err != nil { + log.Errorf("Failed to create %q CRD. Err: %+v", internalapis.CnsFileVolumeClientPlural, err) + return err } } } else if clusterFlavor == cnstypes.CnsClusterFlavorVanilla { diff --git a/tests/e2e/go.mod b/tests/e2e/go.mod index 9cfa390d2a..817230fc4b 100644 --- a/tests/e2e/go.mod +++ b/tests/e2e/go.mod @@ -1,6 +1,6 @@ module sigs.k8s.io/vsphere-csi-driver/v3/tests/e2e -go 1.25.5 +go 1.26.1 require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc @@ -24,12 +24,12 @@ require ( k8s.io/kubernetes v1.35.0 k8s.io/pod-security-admission v0.34.0 k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 - sigs.k8s.io/controller-runtime v0.19.7 + sigs.k8s.io/controller-runtime v0.23.3 sigs.k8s.io/vsphere-csi-driver/v3 v3.0.0-00010101000000-000000000000 ) require ( - cel.dev/expr v0.24.0 // indirect + cel.dev/expr v0.25.1 // indirect cyphar.com/go-pathrs v0.2.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab // indirect @@ -134,7 +134,7 @@ require ( go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.39.0 // indirect go.opentelemetry.io/otel/trace v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect @@ -144,16 +144,16 @@ require ( golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/mod v0.31.0 // indirect golang.org/x/net v0.48.0 // indirect - golang.org/x/oauth2 v0.32.0 // indirect + golang.org/x/oauth2 v0.34.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.39.0 // indirect golang.org/x/term v0.38.0 // indirect golang.org/x/text v0.32.0 // indirect golang.org/x/time v0.9.0 // indirect golang.org/x/tools v0.40.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 // indirect - google.golang.org/grpc v1.77.0 // indirect + google.golang.org/grpc v1.79.3 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -184,7 +184,7 @@ require ( sigs.k8s.io/kustomize/api v0.20.1 // indirect sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect sigs.k8s.io/randfill v1.0.0 // indirect - sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect sigs.k8s.io/yaml v1.6.0 // indirect ) @@ -207,6 +207,8 @@ replace ( k8s.io/cri-client => k8s.io/cri-client v0.35.0 k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.35.0 k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.35.0 + k8s.io/endpointslice => k8s.io/endpointslice v0.28.1 + k8s.io/externaljwt => k8s.io/externaljwt v0.31.0 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.35.0 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.35.0 k8s.io/kube-proxy => k8s.io/kube-proxy v0.35.0 @@ -224,6 +226,4 @@ replace ( k8s.io/sample-controller => k8s.io/sample-controller v0.35.0 sigs.k8s.io/controller-runtime => sigs.k8s.io/controller-runtime v0.19.1 sigs.k8s.io/vsphere-csi-driver/v3 => ../../ - k8s.io/endpointslice => k8s.io/endpointslice v0.28.1 - k8s.io/externaljwt => k8s.io/externaljwt v0.31.0 ) diff --git a/tests/e2e/go.sum b/tests/e2e/go.sum index 8e9b1363e8..e6af1676fc 100644 --- a/tests/e2e/go.sum +++ b/tests/e2e/go.sum @@ -1,5 +1,6 @@ cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cyphar.com/go-pathrs v0.2.1 h1:9nx1vOgwVvX1mNBWDu93+vaceedpbsDqo+XuBGL40b8= cyphar.com/go-pathrs v0.2.1/go.mod h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= @@ -339,6 +340,7 @@ go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= @@ -380,6 +382,7 @@ golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -426,10 +429,12 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4= google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 h1:2I6GHUeJ/4shcDpoUlLs/2WPnhg7yJwvXtqcMJt9liA= google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -516,5 +521,6 @@ sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=