From b38fd14b0381a80acf2f5fe6327a632b2dc6442e Mon Sep 17 00:00:00 2001 From: Sameer Shaikh Date: Tue, 28 Jan 2025 18:18:25 +0530 Subject: [PATCH] Support for update Volume tags via RIAAS --- cmd/main.go | 2 +- go.mod | 6 +- go.sum | 12 +- pkg/ibmcsidriver/controller.go | 2 +- pkg/ibmcsidriver/controller_helper_test.go | 2 +- pkg/ibmcsidriver/controller_test.go | 2 +- pkg/ibmcsidriver/fileOps_test.go | 2 +- pkg/ibmcsidriver/ibm_csi_driver.go | 2 +- pkg/ibmcsidriver/ibm_csi_driver_test.go | 2 +- pkg/ibmcsidriver/node_helper_test.go | 2 +- pkg/ibmcsidriver/server_test.go | 2 +- tests/sanity/sanity_test.go | 2 +- .../ibmcloudprovider/fake_volume_provider.go | 126 ------------------ .../ibmcloudprovider/ibm_volume_provider.go | 32 ----- .../lib/provider/vpc_data_types.go | 1 - .../block/provider/update_volume.go | 4 +- .../vpcvolume/update_volume_with_etag.go | 6 +- .../ibmcloudprovider/fake_volume_provider.go | 35 +++++ .../pkg/watcher/pv_watcher.go | 87 ++++++++++-- vendor/modules.txt | 9 +- 20 files changed, 139 insertions(+), 199 deletions(-) delete mode 100644 vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/fake_volume_provider.go delete mode 100644 vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/ibm_volume_provider.go rename vendor/github.com/IBM/{ibm-csi-common => ibmcloud-volume-vpc}/pkg/watcher/pv_watcher.go (77%) diff --git a/cmd/main.go b/cmd/main.go index 28920718..8d9ce6dc 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -35,7 +35,7 @@ import ( "github.com/IBM/ibm-csi-common/pkg/metrics" mountManager "github.com/IBM/ibm-csi-common/pkg/mountmanager" "github.com/IBM/ibm-csi-common/pkg/utils" - "github.com/IBM/ibm-csi-common/pkg/watcher" + "github.com/IBM/ibmcloud-volume-vpc/pkg/watcher" csiConfig "github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/config" driver "github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/pkg/ibmcsidriver" "go.uber.org/zap" diff --git a/go.mod b/go.mod index 1ecb900a..f80fc06a 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/kubernetes-sigs/ibm-vpc-block-csi-driver go 1.22.0 require ( - github.com/IBM/ibm-csi-common v1.1.19-0.20250126063306-393291468e53 - github.com/IBM/ibmcloud-volume-interface v1.2.8 - github.com/IBM/ibmcloud-volume-vpc v1.1.13-0.20250127094601-d8c3a709bd18 + github.com/IBM/ibm-csi-common v1.1.18 + github.com/IBM/ibmcloud-volume-interface v1.2.9 + github.com/IBM/ibmcloud-volume-vpc v1.1.14-0.20250128124505-29e0357e83da github.com/IBM/secret-utils-lib v1.1.11 github.com/container-storage-interface/spec v1.9.0 github.com/golang/glog v1.2.1 diff --git a/go.sum b/go.sum index 12fdebe3..60e3468b 100644 --- a/go.sum +++ b/go.sum @@ -6,12 +6,12 @@ github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.6.7 h1:eHgfQl6IeSmzWUyiSi13CvoFYsovoyq github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.6.7/go.mod h1:RiUvKuHKTBmBApDMUQzBL14pQUGKcx/IioKQPIcRQjs= github.com/IBM/go-sdk-core/v5 v5.17.4 h1:VGb9+mRrnS2HpHZFM5hy4J6ppIWnwNrw0G+tLSgcJLc= github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= -github.com/IBM/ibm-csi-common v1.1.19-0.20250126063306-393291468e53 h1:u0LDzIFa0iN/kTueTgjW1QsBEtYw7bNc0T4gH01Xpgc= -github.com/IBM/ibm-csi-common v1.1.19-0.20250126063306-393291468e53/go.mod h1:8bAkk54FT6JJ+OTH97/kaD6AMiXN4tI6oBS1hxZvZSw= -github.com/IBM/ibmcloud-volume-interface v1.2.8 h1:1cHqS+sLgcHQ/74gBxyWPe8DzimxvDeODRg0yAzwEhs= -github.com/IBM/ibmcloud-volume-interface v1.2.8/go.mod h1:sDeQiPuN8k9yTRl9FbE2GZCXPNg4cV3oldUfL8wwGNA= -github.com/IBM/ibmcloud-volume-vpc v1.1.13-0.20250127094601-d8c3a709bd18 h1:dUUTM1uJNMcDkGKuCNpwO4vUmYOouwOTkryfkvL/Tio= -github.com/IBM/ibmcloud-volume-vpc v1.1.13-0.20250127094601-d8c3a709bd18/go.mod h1:N/m+YQAfiLZWeaKUBf01j5OpAYPsRMLL/ds1Znju47Y= +github.com/IBM/ibm-csi-common v1.1.18 h1:CbzoONFN6vdmPLoXGxygiq3sbr2xtAcVUb0Vqj3/HNI= +github.com/IBM/ibm-csi-common v1.1.18/go.mod h1:bDs9CLfr09kFpSMcR35e9AmyR2pSydx8goHjagFPrHs= +github.com/IBM/ibmcloud-volume-interface v1.2.9 h1:ug55V2mzK/IaFkfuKDOt74yzhLapSR/+qVgfQblfAjw= +github.com/IBM/ibmcloud-volume-interface v1.2.9/go.mod h1:sDeQiPuN8k9yTRl9FbE2GZCXPNg4cV3oldUfL8wwGNA= +github.com/IBM/ibmcloud-volume-vpc v1.1.14-0.20250128124505-29e0357e83da h1:gqkyWHZ6KabXLnQnMEoG0+XfBK0c467JfFNkPg6wXCU= +github.com/IBM/ibmcloud-volume-vpc v1.1.14-0.20250128124505-29e0357e83da/go.mod h1:CSAsBgEXN6WL8y/EpEj9GA+w+vs3fVLoRadtuCWUAz8= github.com/IBM/secret-common-lib v1.1.11 h1:EpfEe1gT1bnFQ3bxQPrh6bzTPeGjUo1NReVkCCP+TOc= github.com/IBM/secret-common-lib v1.1.11/go.mod h1:7YJF0ipT979nHIPkiCpvjFboFoIhrmYnIliE1vjCjZM= github.com/IBM/secret-utils-lib v1.1.11 h1:w87BzkddoFFlhRuWRteuGj3/561lEUg6Oo0RajVC87A= diff --git a/pkg/ibmcsidriver/controller.go b/pkg/ibmcsidriver/controller.go index 9ef9e596..0df6138a 100644 --- a/pkg/ibmcsidriver/controller.go +++ b/pkg/ibmcsidriver/controller.go @@ -22,7 +22,7 @@ import ( "strings" "time" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" commonError "github.com/IBM/ibm-csi-common/pkg/messages" "github.com/IBM/ibm-csi-common/pkg/metrics" "github.com/IBM/ibm-csi-common/pkg/utils" diff --git a/pkg/ibmcsidriver/controller_helper_test.go b/pkg/ibmcsidriver/controller_helper_test.go index e5638b5c..3e44cd7e 100644 --- a/pkg/ibmcsidriver/controller_helper_test.go +++ b/pkg/ibmcsidriver/controller_helper_test.go @@ -21,7 +21,7 @@ import ( "fmt" "testing" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "github.com/IBM/ibm-csi-common/pkg/utils" "github.com/IBM/ibmcloud-volume-interface/config" "github.com/IBM/ibmcloud-volume-interface/lib/provider" diff --git a/pkg/ibmcsidriver/controller_test.go b/pkg/ibmcsidriver/controller_test.go index 91c00691..9e1d959b 100644 --- a/pkg/ibmcsidriver/controller_test.go +++ b/pkg/ibmcsidriver/controller_test.go @@ -33,7 +33,7 @@ import ( csi "github.com/container-storage-interface/spec/lib/go/csi" "github.com/stretchr/testify/assert" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "github.com/IBM/ibmcloud-volume-interface/lib/provider/fake" "golang.org/x/net/context" "google.golang.org/grpc/codes" diff --git a/pkg/ibmcsidriver/fileOps_test.go b/pkg/ibmcsidriver/fileOps_test.go index b264bc8e..6e92b06a 100644 --- a/pkg/ibmcsidriver/fileOps_test.go +++ b/pkg/ibmcsidriver/fileOps_test.go @@ -21,7 +21,7 @@ import ( "os" "testing" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/pkg/ibmcsidriver/ibmcsidriverfakes" "github.com/stretchr/testify/assert" ) diff --git a/pkg/ibmcsidriver/ibm_csi_driver.go b/pkg/ibmcsidriver/ibm_csi_driver.go index 2416d971..9b6889a3 100644 --- a/pkg/ibmcsidriver/ibm_csi_driver.go +++ b/pkg/ibmcsidriver/ibm_csi_driver.go @@ -20,7 +20,7 @@ package ibmcsidriver import ( "fmt" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" commonError "github.com/IBM/ibm-csi-common/pkg/messages" nodeMetadata "github.com/IBM/ibm-csi-common/pkg/metadata" mountManager "github.com/IBM/ibm-csi-common/pkg/mountmanager" diff --git a/pkg/ibmcsidriver/ibm_csi_driver_test.go b/pkg/ibmcsidriver/ibm_csi_driver_test.go index e810f335..34de8825 100644 --- a/pkg/ibmcsidriver/ibm_csi_driver_test.go +++ b/pkg/ibmcsidriver/ibm_csi_driver_test.go @@ -22,7 +22,7 @@ import ( testingexec "k8s.io/utils/exec/testing" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" nodeMetadata "github.com/IBM/ibm-csi-common/pkg/metadata" nodeInfo "github.com/IBM/ibm-csi-common/pkg/metadata/fake" mountManager "github.com/IBM/ibm-csi-common/pkg/mountmanager" diff --git a/pkg/ibmcsidriver/node_helper_test.go b/pkg/ibmcsidriver/node_helper_test.go index 61403a09..c3f00627 100644 --- a/pkg/ibmcsidriver/node_helper_test.go +++ b/pkg/ibmcsidriver/node_helper_test.go @@ -19,7 +19,7 @@ package ibmcsidriver import ( "testing" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "github.com/stretchr/testify/assert" ) diff --git a/pkg/ibmcsidriver/server_test.go b/pkg/ibmcsidriver/server_test.go index 62dead26..1f651eec 100644 --- a/pkg/ibmcsidriver/server_test.go +++ b/pkg/ibmcsidriver/server_test.go @@ -21,7 +21,7 @@ import ( "flag" "testing" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "github.com/stretchr/testify/assert" ) diff --git a/tests/sanity/sanity_test.go b/tests/sanity/sanity_test.go index 3e767eb5..1bc7c885 100644 --- a/tests/sanity/sanity_test.go +++ b/tests/sanity/sanity_test.go @@ -41,7 +41,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" - cloudProvider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" + cloudProvider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" nodeMetadata "github.com/IBM/ibm-csi-common/pkg/metadata" mountManager "github.com/IBM/ibm-csi-common/pkg/mountmanager" diff --git a/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/fake_volume_provider.go b/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/fake_volume_provider.go deleted file mode 100644 index 486752b4..00000000 --- a/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/fake_volume_provider.go +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright 2021 IBM Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Package ibmcloudprovider ... -package ibmcloudprovider - -import ( - "bytes" - "testing" - - "github.com/IBM/ibmcloud-volume-interface/config" - "github.com/IBM/ibmcloud-volume-interface/lib/provider" - "github.com/IBM/ibmcloud-volume-interface/lib/provider/fake" - "go.uber.org/zap" - "go.uber.org/zap/zapcore" - "golang.org/x/net/context" -) - -const ( - // TestProviderAccountID ... - TestProviderAccountID = "test-provider-account" - - // TestProviderAccessToken ... - TestProviderAccessToken = "test-provider-access-token" - - // TestIKSAccountID ... - TestIKSAccountID = "test-iks-account" - - // TestZone ... - TestZone = "test-zone" - - // IAMURL ... - IAMURL = "test-iam-url" - - // IAMClientID ... - IAMClientID = "test-iam_client_id" - - // IAMClientSecret ... - IAMClientSecret = "test-iam_client_secret" - - // IAMAPIKey ... - IAMAPIKey = "test-iam_api_key" - - // RefreshToken ... - RefreshToken = "test-refresh_token" - - // TestEndpointURL ... - TestEndpointURL = "http://some_endpoint" - - // TestAPIVersion ... - TestAPIVersion = "2019-07-02" -) - -// GetTestLogger ... -func GetTestLogger(t *testing.T) (logger *zap.Logger, teardown func()) { - atom := zap.NewAtomicLevel() - atom.SetLevel(zap.DebugLevel) - - encoderCfg := zap.NewProductionEncoderConfig() - encoderCfg.TimeKey = "timestamp" - encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder - - buf := &bytes.Buffer{} - - logger = zap.New( - zapcore.NewCore( - zapcore.NewJSONEncoder(encoderCfg), - zapcore.AddSync(buf), - atom, - ), - zap.AddCaller(), - ) - - teardown = func() { - _ = logger.Sync() - if t.Failed() { - t.Log(buf) - } - } - return -} - -// FakeIBMCloudStorageProvider Provider -type FakeIBMCloudStorageProvider struct { - ProviderName string - ProviderConfig *config.Config - ClusterID string - fakeSession *fake.FakeSession -} - -var _ CloudProviderInterface = &FakeIBMCloudStorageProvider{} - -// NewFakeIBMCloudStorageProvider ... -func NewFakeIBMCloudStorageProvider(configPath string, logger *zap.Logger) (*FakeIBMCloudStorageProvider, error) { - return &FakeIBMCloudStorageProvider{ProviderName: "FakeIBMCloudStorageProvider", - ProviderConfig: &config.Config{VPC: &config.VPCProviderConfig{VPCBlockProviderName: "VPCFakeProvider"}}, - ClusterID: "fake-clusterID", fakeSession: &fake.FakeSession{}}, nil -} - -// GetProviderSession ... -func (ficp *FakeIBMCloudStorageProvider) GetProviderSession(ctx context.Context, logger *zap.Logger) (provider.Session, error) { - return ficp.fakeSession, nil -} - -// GetConfig ... -func (ficp *FakeIBMCloudStorageProvider) GetConfig() *config.Config { - return ficp.ProviderConfig -} - -// GetClusterID ... -func (ficp *FakeIBMCloudStorageProvider) GetClusterID() string { - return ficp.ClusterID -} diff --git a/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/ibm_volume_provider.go b/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/ibm_volume_provider.go deleted file mode 100644 index 98c4c5c0..00000000 --- a/vendor/github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider/ibm_volume_provider.go +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright 2021 IBM Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Package ibmcloudprovider ... -package ibmcloudprovider - -import ( - "github.com/IBM/ibmcloud-volume-interface/config" - "github.com/IBM/ibmcloud-volume-interface/lib/provider" - "go.uber.org/zap" - "golang.org/x/net/context" -) - -// CloudProviderInterface ... -type CloudProviderInterface interface { - GetProviderSession(ctx context.Context, logger *zap.Logger) (provider.Session, error) - GetConfig() *config.Config - GetClusterID() string -} diff --git a/vendor/github.com/IBM/ibmcloud-volume-interface/lib/provider/vpc_data_types.go b/vendor/github.com/IBM/ibmcloud-volume-interface/lib/provider/vpc_data_types.go index ddcb4a11..92e1e600 100644 --- a/vendor/github.com/IBM/ibmcloud-volume-interface/lib/provider/vpc_data_types.go +++ b/vendor/github.com/IBM/ibmcloud-volume-interface/lib/provider/vpc_data_types.go @@ -26,7 +26,6 @@ type VPCVolume struct { VolumeEncryptionKey *VolumeEncryptionKey `json:"encryption_key,omitempty"` Profile *Profile `json:"profile,omitempty"` CRN string `json:"crn,omitempty"` - ETag string `json:"etag,omitempty"` Status string `json:"status,omitempty"` Tags []string `json:"volume_tags,omitempty"` VPCBlockVolume diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/update_volume.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/update_volume.go index a436c611..c766290b 100644 --- a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/update_volume.go +++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/update_volume.go @@ -41,7 +41,7 @@ func (vpcs *VPCSession) UpdateVolume(volumeRequest provider.Volume) error { return err } if existVolume != nil && existVolume.Status == validVolumeStatus { - vpcs.Logger.Info("Volume got valid (available) state") + vpcs.Logger.Info("Volume got valid (available) state",zap.Reflect("etag", etag)) return nil } return userError.GetUserError("VolumeNotInValidState", err, volumeRequest.VolumeID) @@ -53,7 +53,7 @@ func (vpcs *VPCSession) UpdateVolume(volumeRequest provider.Volume) error { //If tags are equal then skip the UpdateVolume RIAAS API call if ifTagsEqual(existVolume.UserTags, volumeRequest.VPCVolume.Tags) { - vpcs.Logger.Info("There is no change in user tags for volume, skipping the updateVolume for VPC IaaS... ", zap.Reflect("existVolume", existVolume.Tags), zap.Reflect("volumeRequest", volumeRequest.VPCVolume.Tags)) + vpcs.Logger.Info("There is no change in user tags for volume, skipping the updateVolume for VPC IaaS... ", zap.Reflect("existVolume", existVolume.UserTags), zap.Reflect("volumeRequest", volumeRequest.VPCVolume.Tags)) return nil } diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/vpcvolume/update_volume_with_etag.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/vpcvolume/update_volume_with_etag.go index bf70f0c3..69bd797a 100644 --- a/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/vpcvolume/update_volume_with_etag.go +++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/vpcvolume/update_volume_with_etag.go @@ -28,10 +28,10 @@ import ( // UpdateVolume PATCH to /volumes for updating user tags only func (vs *VolumeService) UpdateVolumeWithEtag(volumeID string, etag string, volumeTemplate *models.Volume, ctxLogger *zap.Logger) error { - ctxLogger.Debug("Entry Backend UpdateVolume") - defer ctxLogger.Debug("Exit Backend UpdateVolume") + ctxLogger.Debug("Entry Backend UpdateVolumeWithEtag") + defer ctxLogger.Debug("Exit Backend UpdateVolumeWithEtag") - defer util.TimeTracker("UpdateVolume", time.Now()) + defer util.TimeTracker("UpdateVolumeWithEtag", time.Now()) operation := &client.Operation{ Name: "UpdateVolume", diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider/fake_volume_provider.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider/fake_volume_provider.go index 4d0d8838..817a8884 100644 --- a/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider/fake_volume_provider.go +++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider/fake_volume_provider.go @@ -18,11 +18,15 @@ package ibmcloudprovider import ( + "bytes" + "testing" "github.com/IBM/ibmcloud-volume-interface/config" "github.com/IBM/ibmcloud-volume-interface/lib/provider" "github.com/IBM/ibmcloud-volume-interface/lib/provider/fake" "go.uber.org/zap" "golang.org/x/net/context" + "github.com/stretchr/testify/assert" + "go.uber.org/zap/zapcore" ) const ( @@ -70,6 +74,37 @@ type FakeIBMCloudStorageProvider struct { var _ CloudProviderInterface = &FakeIBMCloudStorageProvider{} +func GetTestLogger(t *testing.T) (logger *zap.Logger, teardown func()) { + atom := zap.NewAtomicLevel() + atom.SetLevel(zap.DebugLevel) + + encoderCfg := zap.NewProductionEncoderConfig() + encoderCfg.TimeKey = "timestamp" + encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder + + buf := &bytes.Buffer{} + + logger = zap.New( + zapcore.NewCore( + zapcore.NewJSONEncoder(encoderCfg), + zapcore.AddSync(buf), + atom, + ), + zap.AddCaller(), + ) + + teardown = func() { + err := logger.Sync() + assert.Nil(t, err) + + if t.Failed() { + t.Log(buf) + } + } + + return +} + // NewFakeIBMCloudStorageProvider ... func NewFakeIBMCloudStorageProvider(configPath string, logger *zap.Logger) (*FakeIBMCloudStorageProvider, error) { return &FakeIBMCloudStorageProvider{ProviderName: "FakeIBMCloudStorageProvider", diff --git a/vendor/github.com/IBM/ibm-csi-common/pkg/watcher/pv_watcher.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/watcher/pv_watcher.go similarity index 77% rename from vendor/github.com/IBM/ibm-csi-common/pkg/watcher/pv_watcher.go rename to vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/watcher/pv_watcher.go index 7cfaec0e..f0884685 100644 --- a/vendor/github.com/IBM/ibm-csi-common/pkg/watcher/pv_watcher.go +++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/pkg/watcher/pv_watcher.go @@ -1,5 +1,5 @@ /** - * Copyright 2021 IBM Corp. + * Copyright 2025 IBM Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,13 +23,15 @@ import ( "strings" "time" + uid "github.com/gofrs/uuid" + "go.uber.org/zap/zapcore" + "github.com/golang/glog" - cloudprovider "github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider" - "github.com/IBM/ibm-csi-common/pkg/utils" "github.com/IBM/ibmcloud-volume-interface/config" "github.com/IBM/ibmcloud-volume-interface/lib/provider" iks_vpc_provider "github.com/IBM/ibmcloud-volume-vpc/iks/provider" + cloudprovider "github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider" "go.uber.org/zap" "golang.org/x/net/context" @@ -83,6 +85,24 @@ const ( VolumeUpdateEventReason = "VolumeMetaDataSaved" //VolumeUpdateEventSuccess ... VolumeUpdateEventSuccess = "Success" + + // VolumeIDLabel ... + VolumeIDLabel = "volumeId" + + // VolumeCRNLabel ... + VolumeCRNLabel = "volumeCRN" + + // ClusterIDLabel ... + ClusterIDLabel = "clusterID" + + // IOPSLabel ... + IOPSLabel = "iops" + + // ZoneLabel ... + ZoneLabel = "zone" + + // GiB in bytes + GiB = 1024 * 1024 * 1024 ) // VolumeTypeMap ... @@ -153,7 +173,7 @@ func (pvw *PVWatcher) Start() { func (pvw *PVWatcher) updateVolume(oldobj, obj interface{}) { // Run as non-blocking thread to allow parallel processing of volumes go func() { - ctxLogger, requestID := utils.GetContextLogger(context.Background(), false) + ctxLogger, requestID := GetContextLogger(context.Background(), false) // panic-recovery function that avoid watcher thread to stop because of unexexpected error defer func() { if r := recover(); r != nil { @@ -168,8 +188,8 @@ func (pvw *PVWatcher) updateVolume(oldobj, obj interface{}) { oldpv, _ := oldobj.(*v1.PersistentVolume) oldCapacity := oldpv.Spec.Capacity[v1.ResourceStorage] capacity := newpv.Spec.Capacity[v1.ResourceStorage] - iops := newpv.Spec.CSI.VolumeAttributes[utils.IOPSLabel] - oldiops := oldpv.Spec.CSI.VolumeAttributes[utils.IOPSLabel] + iops := newpv.Spec.CSI.VolumeAttributes[IOPSLabel] + oldiops := oldpv.Spec.CSI.VolumeAttributes[IOPSLabel] if (newpv.Status.Phase == oldpv.Status.Phase) && (oldCapacity.Value() == capacity.Value()) && (oldiops == iops) { ctxLogger.Info("Skipping update Volume as there is no change in status , capacity and iops") @@ -217,7 +237,7 @@ func (pvw *PVWatcher) getTags(pv *v1.PersistentVolume, ctxLogger *zap.Logger) (s tags = strings.Split(tagstr, ",") } // append default tags to users tag list - tags = append(tags, utils.ClusterIDLabel+":"+volAttributes[utils.ClusterIDLabel]) + tags = append(tags, ClusterIDLabel+":"+volAttributes[ClusterIDLabel]) tags = append(tags, ReclaimPolicyTag+string(pv.Spec.PersistentVolumeReclaimPolicy)) tags = append(tags, StorageClassTag+pv.Spec.StorageClassName) tags = append(tags, NameSpaceTag+pv.Spec.ClaimRef.Namespace) @@ -237,8 +257,8 @@ func (pvw *PVWatcher) getVolume(pv *v1.PersistentVolume, ctxLogger *zap.Logger) VolumeType: provider.VolumeType(VolumeTypeMap[pv.Spec.CSI.Driver]), } volume.CRN = crn - clusterID := pv.Spec.CSI.VolumeAttributes[utils.ClusterIDLabel] - volume.Attributes = map[string]string{strings.ToLower(utils.ClusterIDLabel): clusterID} + clusterID := pv.Spec.CSI.VolumeAttributes[ClusterIDLabel] + volume.Attributes = map[string]string{strings.ToLower(ClusterIDLabel): clusterID} if pv.Status.Phase == v1.VolumeReleased { // Set only status in case of delete operation volume.Attributes[VolumeStatus] = VolumeStatusDeleted @@ -246,9 +266,9 @@ func (pvw *PVWatcher) getVolume(pv *v1.PersistentVolume, ctxLogger *zap.Logger) volume.Tags = tags //Get Capacity and convert to GiB capacity := pv.Spec.Capacity[v1.ResourceStorage] - capacityGiB := utils.BytesToGiB(capacity.Value()) + capacityGiB := BytesToGiB(capacity.Value()) volume.Capacity = &capacityGiB - iops := pv.Spec.CSI.VolumeAttributes[utils.IOPSLabel] + iops := pv.Spec.CSI.VolumeAttributes[IOPSLabel] volume.Iops = &iops volume.Attributes[VolumeStatus] = VolumeStatusCreated } @@ -266,3 +286,48 @@ func (pvw *PVWatcher) filter(obj interface{}) bool { pvw.logger.Debug("Exit filter()", zap.Bool("provisoinerMatch", provisoinerMatch)) return provisoinerMatch } + +// BytesToGiB converts Bytes to GiB +func BytesToGiB(volumeSizeBytes int64) int { + return int(volumeSizeBytes / GiB) +} + +// GetContextLogger ... +func GetContextLogger(ctx context.Context, isDebug bool) (*zap.Logger, string) { + return GetContextLoggerWithRequestID(ctx, isDebug, nil) +} + +// GetContextLoggerWithRequestID adds existing requestID in the logger +// The Existing requestID might be coming from ControllerPublishVolume etc +func GetContextLoggerWithRequestID(ctx context.Context, isDebug bool, requestIDIn *string) (*zap.Logger, string) { + consoleDebugging := zapcore.Lock(os.Stdout) + consoleErrors := zapcore.Lock(os.Stderr) + encoderConfig := zap.NewProductionEncoderConfig() + encoderConfig.TimeKey = "ts" + encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder + traceLevel := zap.NewAtomicLevel() + if isDebug { + traceLevel.SetLevel(zap.DebugLevel) + } else { + traceLevel.SetLevel(zap.InfoLevel) + } + + core := zapcore.NewTee( + zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), consoleDebugging, zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + return (lvl >= traceLevel.Level()) && (lvl < zapcore.ErrorLevel) + })), + zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), consoleErrors, zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { + return lvl >= zapcore.ErrorLevel + })), + ) + logger := zap.New(core, zap.AddCaller()) + // generating a unique request ID so that logs can be filter + if requestIDIn == nil { + // Generate New RequestID if not provided + uuid, _ := uid.NewV4() // #nosec G104: Attempt to randomly generate uuid + requestID := uuid.String() + requestIDIn = &requestID + } + logger = logger.With(zap.String("RequestID", *requestIDIn)) + return logger, *requestIDIn + " " +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 65a4598f..02fb2f27 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -8,17 +8,15 @@ github.com/IBM-Cloud/ibm-cloud-cli-sdk/common/rest # github.com/IBM/go-sdk-core/v5 v5.17.4 ## explicit; go 1.20 github.com/IBM/go-sdk-core/v5/core -# github.com/IBM/ibm-csi-common v1.1.19-0.20250126063306-393291468e53 +# github.com/IBM/ibm-csi-common v1.1.18 ## explicit; go 1.22.0 -github.com/IBM/ibm-csi-common/pkg/ibmcloudprovider github.com/IBM/ibm-csi-common/pkg/messages github.com/IBM/ibm-csi-common/pkg/metadata github.com/IBM/ibm-csi-common/pkg/metadata/fake github.com/IBM/ibm-csi-common/pkg/metrics github.com/IBM/ibm-csi-common/pkg/mountmanager github.com/IBM/ibm-csi-common/pkg/utils -github.com/IBM/ibm-csi-common/pkg/watcher -# github.com/IBM/ibmcloud-volume-interface v1.2.8 +# github.com/IBM/ibmcloud-volume-interface v1.2.9 ## explicit; go 1.22.0 github.com/IBM/ibmcloud-volume-interface/config github.com/IBM/ibmcloud-volume-interface/lib/metrics @@ -29,7 +27,7 @@ github.com/IBM/ibmcloud-volume-interface/lib/utils/reasoncode github.com/IBM/ibmcloud-volume-interface/provider/auth github.com/IBM/ibmcloud-volume-interface/provider/iam github.com/IBM/ibmcloud-volume-interface/provider/local -# github.com/IBM/ibmcloud-volume-vpc v1.1.13-0.20250127094601-d8c3a709bd18 +# github.com/IBM/ibmcloud-volume-vpc v1.1.14-0.20250128124505-29e0357e83da ## explicit; go 1.22.0 github.com/IBM/ibmcloud-volume-vpc/block/provider github.com/IBM/ibmcloud-volume-vpc/block/utils @@ -46,6 +44,7 @@ github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/riaas github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/vpcvolume github.com/IBM/ibmcloud-volume-vpc/iks/provider github.com/IBM/ibmcloud-volume-vpc/pkg/ibmcloudprovider +github.com/IBM/ibmcloud-volume-vpc/pkg/watcher # github.com/IBM/secret-common-lib v1.1.11 ## explicit; go 1.22.0 github.com/IBM/secret-common-lib/pkg/secret_provider