@@ -854,13 +854,19 @@ message VolumeCapability {
854
854
message MountVolume {
855
855
// The filesystem type. This field is OPTIONAL.
856
856
// An empty string is equal to an unspecified field value.
857
+ // If SP has DEFER_FS_OPS node capability and CO specifies
858
+ // fs_defer_ops = true then SP MUST pass this field
859
+ // to the container runtime that will mount the file system.
857
860
string fs_type = 1;
858
861
859
862
// The mount options that can be used for the volume. This field is
860
863
// OPTIONAL. `mount_flags` MAY contain sensitive information.
861
864
// Therefore, the CO and the Plugin MUST NOT leak this information
862
865
// to untrusted entities. The total size of this repeated field
863
866
// SHALL NOT exceed 4 KiB.
867
+ // If SP has DEFER_FS_OPS node capability and CO specifies
868
+ // fs_defer_ops = true then SP MUST pass this field
869
+ // to the container runtime that will mount the file system.
864
870
repeated string mount_flags = 2;
865
871
866
872
// If SP has VOLUME_MOUNT_GROUP node capability and CO provides
@@ -874,7 +880,32 @@ message VolumeCapability {
874
880
// manner, unless otherwise modified by a workload, that they are
875
881
// both readable and writable by said mount group identifier.
876
882
// This is an OPTIONAL field.
883
+ <<<<<<< HEAD
877
884
string volume_mount_group = 3;
885
+ =======
886
+ string volume_mount_group = 3 [(alpha_field) = true];
887
+
888
+ // If SP has DEFER_FS_OPS_WITH_SUPPLEMENTAL_GROUP node capability
889
+ // and CO provides this field then SP MUST ensure that the
890
+ // volume_supplemental_group parameter is passed as a supplemental
891
+ // Group ID that owns the file system after it has been mounted by
892
+ // the container runtime handler.
893
+ // A CO MUST NOT populate this field if defer_fs_ops is empty
894
+ // This is an OPTIONAL field.
895
+ string volume_supplemental_group = 4 [(alpha_field) = true];
896
+
897
+ // If SP has DEFER_FS_OPS_WITH_SUPPLEMENTAL_GROUP_CHANGE_POLICY node
898
+ // capability and CO provides this field then SP MUST ensure that
899
+ // the volume_supplemental_group_change_policy parameter is passed
900
+ // as the policy through which ownership by a supplemental Group ID
901
+ // is set after it has been mounted by the container runtime
902
+ // handler.
903
+ // A CO MUST NOT populate this field if defer_fs_ops or
904
+ // volume_supplemental_group is empty
905
+ // This is an OPTIONAL field.
906
+ string volume_supplemental_group_change_policy = 5
907
+ [(alpha_field) = true];
908
+ >>>>>>> 6f051a7 (Runtime Assisted Mount and Manamgent enhancements)
878
909
}
879
910
880
911
// Specify how a volume can be accessed.
@@ -2349,6 +2380,13 @@ message NodePublishVolumeRequest {
2349
2380
// This field is OPTIONAL and MUST match the volume_context of the
2350
2381
// volume identified by `volume_id`.
2351
2382
map<string, string> volume_context = 8;
2383
+
2384
+ // Indicates SP MUST defer file system mount and any post-mount
2385
+ // configuration operations (such as application of file system
2386
+ // ownership by a supplemental group, if supported) to
2387
+ // a container runtime handler.
2388
+ // This field is OPTIONAL.
2389
+ bool defer_fs_ops = 9;
2352
2390
}
2353
2391
2354
2392
message NodePublishVolumeResponse {
@@ -2399,6 +2437,11 @@ message NodeUnpublishVolumeRequest {
2399
2437
// system/filesystem, but, at a minimum, SP MUST accept a max path
2400
2438
// length of at least 128 bytes.
2401
2439
string target_path = 2;
2440
+
2441
+ // Indicates SP MUST defer file system dismount and cleanup
2442
+ // to a container runtime handler.
2443
+ // This field is OPTIONAL.
2444
+ bool defer_fs_ops = 3;
2402
2445
}
2403
2446
2404
2447
message NodeUnpublishVolumeResponse {
@@ -2455,6 +2498,11 @@ message NodeGetVolumeStatsRequest {
2455
2498
// system/filesystem, but, at a minimum, SP MUST accept a max path
2456
2499
// length of at least 128 bytes.
2457
2500
string staging_target_path = 3;
2501
+
2502
+ // Indicates SP MUST obtain file system stats from a
2503
+ // container runtime handler (that has mounted the file system).
2504
+ // This field is OPTIONAL.
2505
+ bool defer_fs_ops = 4;
2458
2506
}
2459
2507
2460
2508
message NodeGetVolumeStatsResponse {
@@ -2571,6 +2619,22 @@ message NodeServiceCapability {
2571
2619
// with provided volume group identifier during node stage
2572
2620
// or node publish RPC calls.
2573
2621
VOLUME_MOUNT_GROUP = 6;
2622
+
2623
+ // Indicates that Node service supports deferring file system
2624
+ // mount and management operations to a container runtime handler.
2625
+ DEFER_FS_OPS = 7 [(alpha_enum_value) = true];
2626
+
2627
+ // Indicates that Node service supports passing a supplemental
2628
+ // Group ID as a post mount configuration when deferring
2629
+ // file system mount to a container runtime handler.
2630
+ DEFER_FS_OPS_WITH_SUPPLEMENTAL_GROUP = 8
2631
+ [(alpha_enum_value) = true];
2632
+
2633
+ // Indicates that Node service supports passing a supplemental
2634
+ // Group ID change policy as a post mount configuration when
2635
+ // deferring file system mount to a container runtime handler.
2636
+ DEFER_FS_OPS_WITH_SUPPLEMENTAL_GROUP_CHANGE_POLICY = 9
2637
+ [(alpha_enum_value) = true];
2574
2638
}
2575
2639
2576
2640
Type type = 1;
@@ -2640,6 +2704,13 @@ message NodeGetInfoResponse {
2640
2704
// Indicates the node exists within the "region" "R1" and the "zone"
2641
2705
// "Z2".
2642
2706
Topology accessible_topology = 3;
2707
+
2708
+ // If SP has DEFER_FS_OPS node capability, a plugin MUST populate
2709
+ // this field with the list of file systems that it supports. A CO
2710
+ // SHOULD use this to match the deferral capabilities of a plugin
2711
+ // with a container runtime handler for a workload.
2712
+ // This field is OPTIONAL.
2713
+ repeated string supported_file_systems = 4;
2643
2714
}
2644
2715
```
2645
2716
@@ -2717,6 +2788,11 @@ message NodeExpandVolumeRequest {
2717
2788
// section on how to use this field.
2718
2789
map<string, string> secrets = 6
2719
2790
[(csi_secret) = true, (alpha_field) = true];
2791
+
2792
+ // Indicates SP MUST defer file system expansion to a
2793
+ // container runtime handler (that has mounted the file system).
2794
+ // This field is OPTIONAL.
2795
+ bool defer_fs_ops = 7 [(alpha_enum_value) = true];
2720
2796
}
2721
2797
2722
2798
message NodeExpandVolumeResponse {
@@ -2785,6 +2861,13 @@ message NodeExpandVolumeResponse {
2785
2861
* Plugins SHALL NOT create additional files or directories adjacent to the UNIX socket specified by ` CSI_ENDPOINT ` ; violations of this requirement constitute "abuse".
2786
2862
* The Plugin Supervisor is the ultimate authority of the directory in which the UNIX socket endpoint is created and MAY enforce policies to prevent and/or mitigate abuse of the directory by Plugins.
2787
2863
2864
+ #### Deferring Filesystem Mount and Management to a Container Runtime Handler
2865
+ A Plugin may have the capability to defer file system mount and management operations to a container runtime handler.
2866
+ The CO SHOULD populate ` defer_fs_ops ` as ` True ` in CSI Node APIs when the following conditions are fulfilled:
2867
+ - The container runtime handler (associated with a workload) supports deferral of file system mount and management operations from a CSI plugin.
2868
+ - The CSI plugin is able to support deferral of file system mount and management operations to a container runtime handler.
2869
+ - Both container runtime handler and CSI plugin is compatible around support for mounting specific file systems and applying post-mount configuration based on the workload spec (e.g. supplemental group ownership)
2870
+
2788
2871
### Supervised Lifecycle Management
2789
2872
2790
2873
* For Plugins packaged in software form:
0 commit comments