Skip to content

Commit 8bd4dcd

Browse files
committed
chore: support runtimeClassHandler parameter in storage class
1 parent 4d9c909 commit 8bd4dcd

File tree

7 files changed

+17
-13
lines changed

7 files changed

+17
-13
lines changed

pkg/azurefile/azurefile.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ const (
163163
selectRandomMatchingAccountField = "selectrandommatchingaccount"
164164
accountQuotaField = "accountquota"
165165
defaultKataCCLabel = "kubernetes.azure.com/kata-cc-isolation"
166+
runtimeClassHandlerField = "runtimeclasshandler"
167+
defaultRuntimeClassHandler = "kata-cc"
166168

167169
accountNotProvisioned = "StorageAccountIsNotProvisioned"
168170
// this is a workaround fix for 429 throttling issue, will update cloud provider for better fix later

pkg/azurefile/controllerserver.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,9 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
226226
case pvNameKey:
227227
fileShareNameReplaceMap[pvNameMetadata] = v
228228
case serverNameField:
229-
// no op, only used in NodeStageVolume
230229
case folderNameField:
231-
// no op, only used in NodeStageVolume
232230
case clientIDField:
231+
case runtimeClassHandlerField:
233232
// no op, only used in NodeStageVolume
234233
case fsGroupChangePolicyField:
235234
fsGroupChangePolicy = v

pkg/azurefile/controllerserver_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ var _ = ginkgo.Describe("TestCreateVolume", func() {
922922
clientIDField: "client-id",
923923
provisionedBandwidthField: "100",
924924
provisionedIopsField: "800",
925+
runtimeClassHandlerField: "runtime-handler",
925926
}
926927

927928
req := &csi.CreateVolumeRequest{

pkg/azurefile/nodeserver.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,11 @@ func (d *Driver) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolu
120120
return nil, status.Errorf(codes.Internal, "failed to get runtime class for pod %s/%s: %v", context[podNamespaceField], context[podNameField], err)
121121
}
122122
klog.V(2).Infof("NodePublishVolume: volume(%s) mount on %s with runtimeClass %s", volumeID, target, runtimeClass)
123-
isConfidentialRuntimeClass, err := isConfidentialRuntimeClassFunc(ctx, d.kubeClient, runtimeClass)
123+
runtimeClassHandler := getValueInMap(context, runtimeClassHandlerField)
124+
if runtimeClassHandler == "" {
125+
runtimeClassHandler = defaultRuntimeClassHandler
126+
}
127+
isConfidentialRuntimeClass, err := isConfidentialRuntimeClassFunc(ctx, d.kubeClient, runtimeClass, runtimeClassHandler)
124128
if err != nil {
125129
return nil, status.Errorf(codes.Internal, "failed to check if runtime class %s is confidential: %v", runtimeClass, err)
126130
}

pkg/azurefile/nodeserver_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func mockGetRuntimeClassForPod(_ context.Context, _ clientset.Interface, _, _ st
117117
return "mockRuntimeClass", nil
118118
}
119119

120-
func mockIsConfidentialRuntimeClass(_ context.Context, _ clientset.Interface, _ string) (bool, error) {
120+
func mockIsConfidentialRuntimeClass(_ context.Context, _ clientset.Interface, _ string, _ string) (bool, error) {
121121
return true, nil
122122
}
123123

pkg/azurefile/utils.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,8 @@ func isReadOnlyFromCapability(vc *csi.VolumeCapability) bool {
319319
mode == csi.VolumeCapability_AccessMode_SINGLE_NODE_READER_ONLY)
320320
}
321321

322-
const confidentialRuntimeClassHandler = "kata-cc"
323-
324322
// check if runtimeClass is confidential
325-
func isConfidentialRuntimeClass(ctx context.Context, kubeClient clientset.Interface, runtimeClassName string) (bool, error) {
323+
func isConfidentialRuntimeClass(ctx context.Context, kubeClient clientset.Interface, runtimeClassName, runtimeClassHandler string) (bool, error) {
326324
// if runtimeClassName is empty, return false
327325
if runtimeClassName == "" {
328326
return false, nil
@@ -336,7 +334,7 @@ func isConfidentialRuntimeClass(ctx context.Context, kubeClient clientset.Interf
336334
return false, err
337335
}
338336
klog.V(4).Infof("runtimeClass %s handler: %s", runtimeClassName, runtimeClass.Handler)
339-
return runtimeClass.Handler == confidentialRuntimeClassHandler, nil
337+
return runtimeClass.Handler == runtimeClassHandler, nil
340338
}
341339

342340
// getBackOff returns a backoff object based on the config

pkg/azurefile/utils_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ func TestIsConfidentialRuntimeClass(t *testing.T) {
806806
ctx := context.TODO()
807807

808808
// Test the case where kubeClient is nil
809-
_, err := isConfidentialRuntimeClass(ctx, nil, "test-runtime-class")
809+
_, err := isConfidentialRuntimeClass(ctx, nil, "test-runtime-class", defaultRuntimeClassHandler)
810810
if err == nil || err.Error() != "kubeClient is nil" {
811811
t.Fatalf("expected error 'kubeClient is nil', got %v", err)
812812
}
@@ -819,14 +819,14 @@ func TestIsConfidentialRuntimeClass(t *testing.T) {
819819
ObjectMeta: metav1.ObjectMeta{
820820
Name: "test-runtime-class",
821821
},
822-
Handler: confidentialRuntimeClassHandler,
822+
Handler: defaultRuntimeClassHandler,
823823
}
824824
_, err = clientset.NodeV1().RuntimeClasses().Create(ctx, runtimeClass, metav1.CreateOptions{})
825825
if err != nil {
826826
t.Fatalf("expected no error, got %v", err)
827827
}
828828

829-
isConfidential, err := isConfidentialRuntimeClass(ctx, clientset, "test-runtime-class")
829+
isConfidential, err := isConfidentialRuntimeClass(ctx, clientset, "test-runtime-class", defaultRuntimeClassHandler)
830830
if err != nil {
831831
t.Fatalf("expected no error, got %v", err)
832832
}
@@ -847,7 +847,7 @@ func TestIsConfidentialRuntimeClass(t *testing.T) {
847847
t.Fatalf("expected no error, got %v", err)
848848
}
849849

850-
isConfidential, err = isConfidentialRuntimeClass(ctx, clientset, "test-runtime-class-non-confidential")
850+
isConfidential, err = isConfidentialRuntimeClass(ctx, clientset, "test-runtime-class-non-confidential", defaultRuntimeClassHandler)
851851
if err != nil {
852852
t.Fatalf("expected no error, got %v", err)
853853
}
@@ -857,7 +857,7 @@ func TestIsConfidentialRuntimeClass(t *testing.T) {
857857
}
858858

859859
// Test the case where the runtime class does not exist
860-
_, err = isConfidentialRuntimeClass(ctx, clientset, "nonexistent-runtime-class")
860+
_, err = isConfidentialRuntimeClass(ctx, clientset, "nonexistent-runtime-class", defaultRuntimeClassHandler)
861861
if err == nil {
862862
t.Fatalf("expected an error, got nil")
863863
}

0 commit comments

Comments
 (0)