|
8 | 8 |
|
9 | 9 | admissionv1 "k8s.io/api/admission/v1"
|
10 | 10 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
| 11 | + "k8s.io/apimachinery/pkg/labels" |
11 | 12 | "sigs.k8s.io/controller-runtime/pkg/client"
|
12 | 13 | cnsoperatorv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/cnsoperator"
|
13 | 14 |
|
@@ -42,6 +43,25 @@ func validateCreateCnsFileAccessConfig(ctx context.Context, clientConfig *rest.C
|
42 | 43 | }
|
43 | 44 | }
|
44 | 45 |
|
| 46 | + // This validation is not required for PVCSI service account. |
| 47 | + isPvCSIServiceAccount, err := validatePvCSIServiceAccount(req.UserInfo.Username) |
| 48 | + if err != nil { |
| 49 | + // return AdmissionResponse result |
| 50 | + return &admissionv1.AdmissionResponse{ |
| 51 | + Allowed: false, |
| 52 | + Result: &metav1.Status{ |
| 53 | + Message: fmt.Sprintf("failed to validate user information: %v", err), |
| 54 | + }, |
| 55 | + } |
| 56 | + } |
| 57 | + |
| 58 | + // If user is PVCSI service account, allow this request. |
| 59 | + if isPvCSIServiceAccount { |
| 60 | + return &admissionv1.AdmissionResponse{ |
| 61 | + Allowed: true, |
| 62 | + } |
| 63 | + } |
| 64 | + |
45 | 65 | vm := cnsFileAccessConfig.Spec.VMName
|
46 | 66 | pvc := cnsFileAccessConfig.Spec.PvcName
|
47 | 67 | namespace := cnsFileAccessConfig.Namespace
|
@@ -87,9 +107,14 @@ func cnsFileAccessConfigAlreadyExists(ctx context.Context, clientConfig *rest.Co
|
87 | 107 | return "", err
|
88 | 108 | }
|
89 | 109 |
|
| 110 | + // List only those CnsFileAccessConfig CRs which are not created by PVCSI. |
| 111 | + labelSelector := labels.SelectorFromSet(labels.Set{devopsUserLabelKey: "true"}) |
90 | 112 | // Get the list of all CnsFileAccessConfig CRs in the given namespace.
|
91 | 113 | cnsFileAccessConfigList := &cnsfileaccessconfigv1alpha1.CnsFileAccessConfigList{}
|
92 |
| - err = cnsOperatorClient.List(ctx, cnsFileAccessConfigList, &client.ListOptions{Namespace: namespace}) |
| 114 | + err = cnsOperatorClient.List(ctx, cnsFileAccessConfigList, &client.ListOptions{ |
| 115 | + Namespace: namespace, |
| 116 | + LabelSelector: labelSelector, |
| 117 | + }) |
93 | 118 | if err != nil {
|
94 | 119 | log.Errorf("failed to list CnsFileAccessConfigList CRs from %s namesapace. Error: %+v",
|
95 | 120 | namespace, err)
|
|
0 commit comments