diff --git a/internal/util/k8s/parameters.go b/internal/util/k8s/parameters.go index 58ac54d03..5d85182b5 100644 --- a/internal/util/k8s/parameters.go +++ b/internal/util/k8s/parameters.go @@ -23,6 +23,7 @@ import ( // to the driver on CreateVolumeRequest/CreateSnapshotRequest calls. const ( csiParameterPrefix = "csi.storage.k8s.io/" + pvcNamespaceKey = "csi.storage.k8s.io/pvc/namespace" ) // RemoveCSIPrefixedParameters removes parameters prefixed with csiParameterPrefix. @@ -37,3 +38,8 @@ func RemoveCSIPrefixedParameters(param map[string]string) map[string]string { return newParam } + +// GetOwner returns the pvc namespace name from the parameter. +func GetOwner(param map[string]string) string { + return param[pvcNamespaceKey] +} diff --git a/internal/util/k8s/parameters_test.go b/internal/util/k8s/parameters_test.go index c881bb9d4..fa959b894 100644 --- a/internal/util/k8s/parameters_test.go +++ b/internal/util/k8s/parameters_test.go @@ -60,3 +60,36 @@ func TestRemoveCSIPrefixedParameters(t *testing.T) { }) } } + +func TestGetOwner(t *testing.T) { + t.Parallel() + tests := []struct { + name string + args map[string]string + want string + }{ + { + name: "namespace is not present in the parameters", + args: map[string]string{ + "foo": "bar", + }, + want: "", + }, + { + name: "namespace is present in the parameters", + args: map[string]string{ + "csi.storage.k8s.io/pvc/namespace": "bar", + }, + want: "bar", + }, + } + for _, tt := range tests { + ts := tt + t.Run(ts.name, func(t *testing.T) { + t.Parallel() + if got := GetOwner(ts.args); got != ts.want { + t.Errorf("GetOwner() = %v, want %v", got, ts.want) + } + }) + } +}