<!-- Thanks for filing an issue! Before hitting the button, please answer these questions.--> ## Is this a BUG REPORT or FEATURE REQUEST? Choose one: FEATURE REQUEST <!-- If this is a BUG REPORT, please: - Fill in as much of the template below as you can. If you leave out information, we can't help you as well. If this is a FEATURE REQUEST, please: In pca, the fss only support "AUTOSELECT" as the input of the export path, and generates another random path as the real path when creating an export. This feature causes a couple of issues when customers provision a PVC on a new file system using the CCM CSI driver. If customers don't include the "exportPath" in storage class definition, PVC provision will fail. This is because CSI controller driver auto-generates a path in the format "/csi-fss-*". # cat fss-st-class.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: fss-dyn-storage provisioner: fss.csi.oraclecloud.com parameters: availabilityDomain: AD-1 compartmentOcid: <compartment OCID> mountTargetOcid: <mount Target OCID> exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]" # ./kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE fss-dyn-storage fss.csi.oraclecloud.com Delete Immediate false 5s # ./kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE first-pvc-ffs-without-path Pending fss-dyn-storage 6s # ./kubectl describe pvc first-pvc-ffs-without-path Name: first-pvc-ffs-without-path Namespace: default StorageClass: fss-dyn-storage Status: Pending Volume: Labels: <none> Annotations: volume.beta.kubernetes.io/storage-provisioner: fss.csi.oraclecloud.com volume.kubernetes.io/storage-provisioner: fss.csi.oraclecloud.com Finalizers: [kubernetes.io/pvc-protection] Capacity: Access Modes: VolumeMode: Filesystem Used By: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning ProvisioningFailed 33s fss.csi.oraclecloud.com_oke-8797d75806684140ad1f10848b1cc85d-control-plane-sm2ft_1a39e229-1e12-45a9-b1fc-73e08dc744c5 failed to provision volume with StorageClass "fss-dyn-storage": rpc error: code = Internal desc = New Export creation failed, error: Error returned by FileStorage Service. Http Status Code: 400. Error Code: InvalidParameter. Opc request id: . Message: Invalid: Input path /csi-fss-b3ec4d72-eef8-42e5-b63c-bd9a432a6bf1 not supported. Only 'AUTOSELECT' is supported Operation Name: CreateExport Timestamp: 2024-01-04 22:44:33.766369963 +0000 UTC m=+82.197460520 ..... PVC can be provisioned successfully if the exportPath is defined as "AUTOSELECT" in storage class, but fails to be mounted to a pod. This is because Kubernetes already saves "AUTOSELECT" as the export path, and passes it to ccm csi node driver. # cat fss-st-class.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: fss-dyn-storage provisioner: fss.csi.oraclecloud.com parameters: availabilityDomain: AD-1 compartmentOcid: <compartment OCID> exportPath: AUTOSELECT mountTargetOcid: <mount target ocid> exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]" # ./kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE fss-dyn-storage fss.csi.oraclecloud.com Delete Immediate false 2m46s [root@sca15-ovca2 xiang_kube]# ./kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE first-pvc-ffs Bound csi-fss-<id> 5Gi RWX fss-dyn-storage 25s # ./kubectl describe pod task-pvc-pod Name: task-pvc-pod Namespace: default Node: oke-<id>/10.0.10.2 ... Volumes: task-pvc-storage: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: first-pvc-ffs ReadOnly: false Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 21s default-scheduler Successfully assigned default/task-pvc-pod to oke-<id> Warning FailedMount 5s (x6 over 21s) kubelet MountVolume.MountDevice failed for volume "csi-fss-<id>" : rpc error: code = Internal desc = mount failed: exit status 32 Mounting command: mount Mounting arguments: 10.0.10.4:AUTOSELECT /var/lib/kubelet/plugins/kubernetes.io/csi/fss.csi.oraclecloud.com/<id>/globalmount Output: mount.nfs: access denied by server while mounting 10.0.10.4:AUTOSELECT When customers delete the pvc and storage class, the corresponding export and file system will be left over in PCA. This is caused by the wrong export path as well. Kubernetes passes "ATUOSELECT" as export path to csi controller driver to delete relevant items, but fss is not able to identify the file system and export by the wrong export path. # ./kubectl delete pvc first-pvc-ffs persistentvolumeclaim "first-pvc-ffs" deleted # ./kubectl delete sc fss-dyn-storage storageclass.storage.k8s.io "fss-dyn-storage" deleted # oci fs file-system get --file-system-id <FILE system OCID> --profile DEV --cert-bundle bundle.pem { "data": { "availability-domain": "AD-1", "compartment-id": "Compartment OCID", "defined-tags": {}, "display-name": "csi-fss-id", "freeform-tags": { "exportSetId": "ID", "isDeleteMountTarget": "false", "mountTargetOCID": "mount target OCID" }, "id": "OCID", "is-clone-parent": false, "is-hydrated": true, "kms-key-id": "", "lifecycle-details": "", "lifecycle-state": "ACTIVE", "metered-bytes": 0, "source-details": { "parent-file-system-id": "", "source-snapshot-id": "" }, "time-created": "2024-01-04T22:47:43.128456+00:00" }, "etag": "<etag num" } # oci fs export get --export-id <export id> --profile DEV --cert-bundle bundle.pem { "data": { "export-options": [ { "access": "READ_WRITE", "anonymous-gid": <gid>, "anonymous-uid": <uid>, "identity-squash": "NONE", "require-privileged-source-port": false, "source": "0.0.0.0/0" } ], "export-set-id": "export-ocid", "file-system-id": "file system id, "id": "ID", "lifecycle-state": "ACTIVE", "path": "/export/ntjcj40m9tqlq4r7no38y0k1mveg4362fwia3kicmpkl9v1cj1xhfpvkyu44", "time-created": "2024-01-04T22:47:49.753925+00:00" }, "etag": "<etag num>" } If we can't reproduce a bug or think a feature already exists, we might close your issue. If we're wrong, PLEASE feel free to reopen it and explain why. --> ## Versions **CCM Version**: 1.26.2 **Environment**: - **Kubernetes version** (use `kubectl version`): - **OS** (e.g. from /etc/os-release): - **Kernel** (e.g. `uname -a`): - **Others**: ## What happened? ## What you expected to happen? ## How to reproduce it (as minimally and precisely as possible)? ## Anything else we need to know?