Repository: kubernetes-sigs/ibm-vpc-block-csi-driver
Pull request #221: vpc acadia profile support 
Author: login: arahamad
Labels: name: cncf-cla: yes
description: Indicates the PR's author has signed the CNCF CLA.
name: lgtm
description: "Looks good to me", indicates that a PR is ready to be merged.
name: size/L
description: Denotes a PR that changes 100-499 lines, ignoring generated files.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
Created: 2025-04-21T06:14:02Z | Merged: 2025-04-21T11:53:01Z

new vpc profile sdp support 


Diff:
diff --git a/deploy/kubernetes/storageclass/ibmc-vpc-block-sdp-StorageClass.yaml b/deploy/kubernetes/storageclass/ibmc-vpc-block-sdp-StorageClass.yaml
new file mode 100644
index 00000000..8dc9c4a8
--- /dev/null
+++ b/deploy/kubernetes/storageclass/ibmc-vpc-block-sdp-StorageClass.yaml
@@ -0,0 +1,19 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+  name: ibmc-vpc-block-sdp
+provisioner: vpc.block.csi.ibm.io
+parameters:
+  profile: "sdp"
+  iops: ""
+  throughput: ""
+  csi.storage.k8s.io/fstype: "ext4"
+  billingType: "hourly"
+  encrypted: "false"
+  encryptionKey: ""
+  resourceGroup: ""
+  zone: ""
+  tags: ""
+  generation: "gc"
+  classVersion: "1"
+reclaimPolicy: "Delete"
\ No newline at end of file
diff --git a/go.mod b/go.mod
index 21d18810..2d00daac 100644
--- a/go.mod
+++ b/go.mod
@@ -4,8 +4,8 @@ go 1.22.0
 
 require (
 	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.15
+	github.com/IBM/ibmcloud-volume-interface v1.2.11
+	github.com/IBM/ibmcloud-volume-vpc v1.1.16
 	github.com/IBM/secret-utils-lib v1.1.12
 	github.com/container-storage-interface/spec v1.9.0
 	github.com/golang/glog v1.2.4
diff --git a/go.sum b/go.sum
index 9c7434b5..8cb2d242 100644
--- a/go.sum
+++ b/go.sum
@@ -8,10 +8,10 @@ github.com/IBM/go-sdk-core/v5 v5.17.4 h1:VGb9+mRrnS2HpHZFM5hy4J6ppIWnwNrw0G+tLSg
 github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns=
 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.15 h1:0TsFcTX8Enbma+gq3Lp9dNqB0NzlzGw+SR4hvPJsXMQ=
-github.com/IBM/ibmcloud-volume-vpc v1.1.15/go.mod h1:CSAsBgEXN6WL8y/EpEj9GA+w+vs3fVLoRadtuCWUAz8=
+github.com/IBM/ibmcloud-volume-interface v1.2.11 h1:6WfsSwfkLJggxlh2j7FDGU3hkZO8fsKzb54w5KHrvzA=
+github.com/IBM/ibmcloud-volume-interface v1.2.11/go.mod h1:sDeQiPuN8k9yTRl9FbE2GZCXPNg4cV3oldUfL8wwGNA=
+github.com/IBM/ibmcloud-volume-vpc v1.1.16 h1:jvxitm9Z2oBvZBLLYeAfULz7p8yy9BmBH8EYSQXNdfo=
+github.com/IBM/ibmcloud-volume-vpc v1.1.16/go.mod h1:50mcqD68wGwQJ/W+jROhKuaDHqJUrnJO91cwsjQOYK0=
 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.12 h1:ASilsVPL6NnyUqPu5v/x3a083lrmXkNU+NIJJAobLOY=
diff --git a/pkg/ibmcsidriver/constants.go b/pkg/ibmcsidriver/constants.go
index c284241f..a681c23e 100644
--- a/pkg/ibmcsidriver/constants.go
+++ b/pkg/ibmcsidriver/constants.go
@@ -128,6 +128,9 @@ const (
 
 	// MinimumSDPVolumeSizeInBytes ... This is minimum size require for sdp (acadia profile)
 	MinimumSDPVolumeSizeInBytes int64 = 1 * utils.GiB
+
+	// Throughput ...
+	Throughput = "throughput"
 )
 
 // SupportedFS the supported FS types
diff --git a/pkg/ibmcsidriver/controller_helper.go b/pkg/ibmcsidriver/controller_helper.go
index a5b17eb4..4bcb2f7f 100644
--- a/pkg/ibmcsidriver/controller_helper.go
+++ b/pkg/ibmcsidriver/controller_helper.go
@@ -41,7 +41,7 @@ func getRequestedCapacity(capRange *csi.CapacityRange, profileName string) (int6
 		if profileName == SDPProfile { // SDP profile minimum size is 1GB
 			capBytes = MinimumSDPVolumeSizeInBytes
 		} else {
-			capBytes = utils.MinimumVolumeSizeInBytes // tierd and custom profile minimum size is 10 GB
+			capBytes = utils.MinimumVolumeSizeInBytes // tier and custom profile minimum size is 10 GB
 		}
 		// returns in GiB
 		return capBytes, nil
@@ -168,7 +168,15 @@ func getVolumeParameters(logger *zap.Logger, req *csi.CreateVolumeRequest, confi
 				iops := value
 				volume.Iops = &iops
 			}
-
+		case Throughput: // getting throughput value from storage class if it is provided
+			if len(value) != 0 {
+				bandwidth, errParse := strconv.ParseInt(value, 10, 32)
+				if errParse != nil {
+					err = fmt.Errorf("'<%v>' is invalid, value of '%s' should be an int32 type", value, key)
+				} else {
+					volume.Bandwidth = int32(bandwidth)
+				}
+			}
 		default:
 			err = fmt.Errorf("<%s> is an invalid parameter", key)
 		}
@@ -318,6 +326,15 @@ func overrideParams(logger *zap.Logger, req *csi.CreateVolumeRequest, config *co
 				iops := value
 				volume.Iops = &iops
 			}
+		case Throughput: // getting throughput value from storage class if it is provided
+			if len(value) != 0 {
+				bandwidth, errParse := strconv.ParseInt(value, 10, 32)
+				if errParse != nil {
+					err = fmt.Errorf("'<%v>' is invalid, value of '%s' should be an int32 type", value, key)
+				} else {
+					volume.Bandwidth = int32(bandwidth)
+				}
+			}
 		default:
 			err = fmt.Errorf("<%s> is an invalid parameter", key)
 		}
diff --git a/pkg/ibmcsidriver/controller_helper_test.go b/pkg/ibmcsidriver/controller_helper_test.go
index ca2c90ec..5df5ffb1 100644
--- a/pkg/ibmcsidriver/controller_helper_test.go
+++ b/pkg/ibmcsidriver/controller_helper_test.go
@@ -193,6 +193,7 @@ func TestGetVolumeParameters(t *testing.T) {
 					EncryptionKey: "key",
 					ClassVersion:  "",
 					Generation:    "generation",
+					Throughput:    "1000",
 					IOPS:          noIops,
 				},
 			},
@@ -202,6 +203,7 @@ func TestGetVolumeParameters(t *testing.T) {
 					Tags:          []string{createdByIBM},
 					Profile:       &provider.Profile{Name: "general-purpose"},
 					ResourceGroup: &provider.ResourceGroup{ID: "myresourcegroups"},
+					Bandwidth:     1000,
 				},
 				Region: "us-south-test",
 				Iops:   &noIops,
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 92e1e600..5c2f38a4 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
@@ -28,6 +28,7 @@ type VPCVolume struct {
 	CRN                 string               `json:"crn,omitempty"`
 	Status              string               `json:"status,omitempty"`
 	Tags                []string             `json:"volume_tags,omitempty"`
+	Bandwidth           int32                `json:"bandwidth,omitempty"`
 	VPCBlockVolume
 	VPCFileVolume
 }
diff --git a/vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go b/vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go
index aa8e7ae5..e3d361d2 100644
--- a/vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go
+++ b/vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go
@@ -19,8 +19,11 @@ package util
 
 import (
 	"fmt"
+	"strings"
 )
 
+const vpcError = "Trace Code:"
+
 // Message Wrapper Message/Error Class
 type Message struct {
 	Code         string
@@ -39,5 +42,9 @@ func (msg Message) Error() string {
 
 // Info ...
 func (msg Message) Info() string {
-	return fmt.Sprintf("{Code:%s, Type:%s, Description:%s, BackendError:%s, RC:%d}", msg.Code, msg.Type, msg.Description, msg.BackendError, msg.RC)
+	if strings.Contains(msg.BackendError, vpcError) {
+		return fmt.Sprintf("{%s.%s}", msg.BackendError, msg.Description)
+	} else {
+		return fmt.Sprintf("{Code:%s, Description:%s.%s, RC:%d}", msg.Code, msg.Description, msg.BackendError, msg.RC)
+	}
 }
diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/create_volume.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/create_volume.go
index 37210c17..4b2e2665 100644
--- a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/create_volume.go
+++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/create_volume.go
@@ -52,6 +52,7 @@ func (vpcs *VPCSession) CreateVolume(volumeRequest provider.Volume) (volumeRespo
 		Name:          *volumeRequest.Name,
 		Capacity:      int64(*volumeRequest.Capacity),
 		Iops:          iops,
+		Bandwidth:     volumeRequest.Bandwidth,
 		UserTags:      volumeRequest.VPCVolume.Tags,
 		ResourceGroup: &resourceGroup,
 		Profile: &models.Profile{
diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/util.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/util.go
index e1e9ca8f..3c8d305b 100644
--- a/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/util.go
+++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/block/provider/util.go
@@ -58,23 +58,28 @@ const (
 var volumeIDPartsCount = 5
 
 var skipErrorCodes = map[string]bool{
-	"validation_invalid_name":              true,
-	"volume_capacity_max":                  true,
-	"volume_id_invalid":                    true,
-	"volume_profile_iops_invalid":          true,
-	"volume_capacity_zero_or_negative":     true,
-	"not_found":                            true,
-	"volume_id_not_found":                  true,
-	"volume_name_not_found":                true,
-	"volume_profile_capacity_iops_invalid": true,
-	"internal_error":                       false,
-	"invalid_route":                        false,
-	SnapshotNotFound:                       true,
-	"snapshots_not_authorized":             true,
-	SnapshotIDNotFound:                     true,
-	"snapshots_source_volume_not_found":    true,
-	"snapshots_source_volume_not_attached": true,
-	"volume_capacity_maximum":              true,
+	"validation_invalid_name":                      true,
+	"volume_capacity_max":                          true,
+	"volume_id_invalid":                            true,
+	"volume_profile_iops_invalid":                  true,
+	"volume_capacity_zero_or_negative":             true,
+	"not_found":                                    true,
+	"volume_id_not_found":                          true,
+	"volume_name_not_found":                        true,
+	"volume_profile_capacity_iops_invalid":         true,
+	"internal_error":                               false,
+	"invalid_route":                                false,
+	SnapshotNotFound:                               true,
+	"snapshots_not_authorized":                     true,
+	SnapshotIDNotFound:                             true,
+	"snapshots_source_volume_not_found":            true,
+	"snapshots_source_volume_not_attached":         true,
+	"volume_capacity_maximum":                      true,
+	"volume_profile_not_found":                     true,
+	"validation_failed_maximum":                    true,
+	"validation_failed_anyof":                      true,
+	"volume_profile_capacity_maxbandwidth_invalid": true,
+	"validation_failed_pattern":                    true,
 
 	// IKS ms error code for skip re-try
 	"ST0008": true, //resources not found
@@ -387,6 +392,13 @@ func FromProviderToLibVolume(vpcVolume *models.Volume, logger *zap.Logger) (libV
 	if vpcVolume.SourceSnapshot != nil {
 		libVolume.SnapshotID = vpcVolume.SourceSnapshot.ID
 	}
+	if vpcVolume.Profile != nil {
+		libVolume.Profile = &provider.Profile{
+			Href: vpcVolume.Profile.Href,
+			Name: vpcVolume.Profile.Name,
+			CRN:  vpcVolume.Profile.CRN}
+	}
+	libVolume.Bandwidth = vpcVolume.Bandwidth
 	libVolume.CRN = vpcVolume.CRN
 	libVolume.Tags = vpcVolume.UserTags
 	libVolume.Status = string(vpcVolume.Status)
diff --git a/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/models/volume.go b/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/models/volume.go
index 014e18c3..3e8b71de 100644
--- a/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/models/volume.go
+++ b/vendor/github.com/IBM/ibmcloud-volume-vpc/common/vpcclient/models/volume.go
@@ -38,6 +38,7 @@ type Volume struct {
 	Name                string               `json:"name,omitempty"`
 	Capacity            int64                `json:"capacity,omitempty"`
 	Iops                int64                `json:"iops,omitempty"`
+	Bandwidth           int32                `json:"bandwidth,omitempty"`
 	VolumeEncryptionKey *VolumeEncryptionKey `json:"encryption_key,omitempty"`
 	ResourceGroup       *ResourceGroup       `json:"resource_group,omitempty"`
 	Tags                []string             `json:"tags,omitempty"` //We need to validate and remove this if not required.
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 817a8884..4946c7c3 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,15 +18,16 @@
 package ibmcloudprovider
 
 import (
-	"bytes"	
+	"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"
 	"go.uber.org/zap/zapcore"
+	"golang.org/x/net/context"
 )
 
 const (
@@ -52,7 +53,7 @@ const (
 	IAMClientSecret = "test-iam_client_secret"
 
 	// IAMAPIKey ...
-	IAMAPIKey = "test-iam_api_key"
+	IAMAPIKey = "test-iam_api_key" // #nosec G101
 
 	// RefreshToken ...
 	RefreshToken = "test-refresh_token"
diff --git a/vendor/modules.txt b/vendor/modules.txt
index f9bd8235..484a6b26 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -16,7 +16,7 @@ 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/ibmcloud-volume-interface v1.2.9
+# github.com/IBM/ibmcloud-volume-interface v1.2.11
 ## explicit; go 1.22.0
 github.com/IBM/ibmcloud-volume-interface/config
 github.com/IBM/ibmcloud-volume-interface/lib/metrics
@@ -27,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.15
+# github.com/IBM/ibmcloud-volume-vpc v1.1.16
 ## explicit; go 1.22.0
 github.com/IBM/ibmcloud-volume-vpc/block/provider
 github.com/IBM/ibmcloud-volume-vpc/block/utils


Reviews:
user: login: sameshai
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T11:43:40Z
user: login: arahamad
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T11:45:51Z
user: login: sameshai
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T11:47:54Z
user: login: sameshai
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T11:48:19Z
user: login: sameshai
body: Post the sample error messages we get today as we are including new interface changes but not the csi common
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T11:49:31Z
user: login: prankulmahajan
body: lgtm
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-21T11:51:48Z
user: login: arahamad
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-21T12:13:14Z

Review comments:
diff_hunk: @@ -128,6 +128,9 @@ const (
 
 	// MinimumSDPVolumeSizeInBytes ... This is minimum size require for sdp (acadia profile)
 	MinimumSDPVolumeSizeInBytes int64 = 1 * utils.GiB
+
+	// Throughput ...
+	Throughput = "throughput"
path: pkg/ibmcsidriver/constants.go
user: login: sameshai
body: Do we need to call throughput on CSI side and bandwidht on RIAAS side ? Do we need to keep it same ? 
created_at: 2025-04-21T11:43:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -128,6 +128,9 @@ const (
 
 	// MinimumSDPVolumeSizeInBytes ... This is minimum size require for sdp (acadia profile)
 	MinimumSDPVolumeSizeInBytes int64 = 1 * utils.GiB
+
+	// Throughput ...
+	Throughput = "throughput"
path: pkg/ibmcsidriver/constants.go
user: login: arahamad
body: @sameshai , actually I align with volumeattributeclass and what k8s talk about so it looks we need to have this mapping as k8s always talk about throughput 
created_at: 2025-04-21T11:45:51Z
author_association: CONTRIBUTOR
diff_hunk: @@ -39,5 +42,9 @@ func (msg Message) Error() string {
 
 // Info ...
 func (msg Message) Info() string {
-	return fmt.Sprintf("{Code:%s, Type:%s, Description:%s, BackendError:%s, RC:%d}", msg.Code, msg.Type, msg.Description, msg.BackendError, msg.RC)
path: vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go
user: login: sameshai
body: Test this for couple of errors like invalid iops , throughput and see the format of error message your are getting. Test 2 scenarios one actual RIAAS error and other is the error from Driver itself.
created_at: 2025-04-21T11:47:54Z
author_association: CONTRIBUTOR
diff_hunk: @@ -128,6 +128,9 @@ const (
 
 	// MinimumSDPVolumeSizeInBytes ... This is minimum size require for sdp (acadia profile)
 	MinimumSDPVolumeSizeInBytes int64 = 1 * utils.GiB
+
+	// Throughput ...
+	Throughput = "throughput"
path: pkg/ibmcsidriver/constants.go
user: login: sameshai
body: ok
created_at: 2025-04-21T11:48:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -39,5 +42,9 @@ func (msg Message) Error() string {
 
 // Info ...
 func (msg Message) Info() string {
-	return fmt.Sprintf("{Code:%s, Type:%s, Description:%s, BackendError:%s, RC:%d}", msg.Code, msg.Type, msg.Description, msg.BackendError, msg.RC)
path: vendor/github.com/IBM/ibmcloud-volume-interface/lib/utils/messages.go
user: login: arahamad
body: @sameshai I verified both tests, here is the results
**Invalid iops:**
```
 Warning  ProvisioningFailed    68s                 vpc.block.csi.ibm.io_ibm-vpc-block-csi-controller-6d55756ddf-pg8bh_7ecb9acb-25a6-423c-9b2e-3e111a2357e5  failed to provision volume with StorageClass "ibmc-vpc-block-sdp": rpc error: code = Internal desc = {RequestID: c12e52e9-6a96-43f5-84cb-6e84cc33c987 , Code: InternalError, Description: Internal error occurred%!(EXTRA string=creation), BackendError: {Trace Code:c12e52e9-6a96-43f5-84cb-6e84cc33c987, The volume profile specified in the request is not valid for the provided capacity and/or IOPS. Please check .Failed to create volume with the storage provider}, Action: Please check 'BackendError' tag for more details}
```

**Invalid throughput/bandwidth:**
```
 Warning  ProvisioningFailed    58s                 vpc.block.csi.ibm.io_ibm-vpc-block-csi-controller-6d55756ddf-pg8bh_7ecb9acb-25a6-423c-9b2e-3e111a2357e5  failed to provision volume with StorageClass "ibmc-vpc-block-sdp": rpc error: code = Internal desc = {RequestID: a2326fa7-d1ff-46a7-8ccf-1964fe3e023d , Code: InternalError, Description: Internal error occurred%!(EXTRA string=creation), BackendError: {Trace Code:a2326fa7-d1ff-46a7-8ccf-1964fe3e023d, The volume profile specified in the request is not valid for the provided capacity and/or Bandwidth. Please check .Failed to create volume with the storage provider}, Action: Please check 'BackendError' tag for more details}
```
created_at: 2025-04-21T12:13:14Z
author_association: CONTRIBUTOR

PR comments:
user: login: coveralls
created_at: 2025-04-21T06:19:44Z
body: 
[![Coverage Status](https://coveralls.io/builds/73307177/badge)](https://coveralls.io/builds/73307177)

coverage: 79.495% (-0.3%) from 79.805%
when pulling **59460144b43981786aee569dcc562276a7612316 on acadia**
into **a1a6dbc973aa6a6c6ccdb0a2da0725ea2c681c89 on master**.

author_association: NONE
user: login: arahamad
created_at: 2025-04-21T11:40:29Z
body: Following tests has been done:

- PVC Creation/writing/deletion/expansion/snapshot  working fine for sdp profile based class
- VPC creation/writing/deletion/expansion/snapshot Verified for tier one profile based storage class


author_association: CONTRIBUTOR
user: login: k8s-ci-robot
created_at: 2025-04-21T11:51:54Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/pull/221#" title="Author self-approved">arahamad</a>*, *<a href="https://github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/pull/221#pullrequestreview-2781108508" title="Approved">prankulmahajan</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fibm-vpc-block-csi-driver).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/kubernetes-sigs/ibm-vpc-block-csi-driver/blob/master/OWNERS)~~ [arahamad]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: prankulmahajan
created_at: 2025-04-21T11:52:03Z
body: /lgtm
author_association: MEMBER