@@ -111,6 +111,12 @@ service Controller {
111111 returns (ControllerModifyVolumeResponse ) {
112112 option (alpha_method) = true ;
113113 }
114+
115+ rpc ControllerModifyVolumeTopology (
116+ ControllerModifyVolumeTopologyRequest )
117+ returns (ControllerModifyVolumeTopologyResponse ) {
118+ option (alpha_method) = true ;
119+ }
114120}
115121
116122service GroupController {
@@ -1047,6 +1053,52 @@ message ControllerModifyVolumeResponse {
10471053 option (alpha_message) = true ;
10481054}
10491055
1056+ message ControllerModifyVolumeTopologyRequest {
1057+ option (alpha_message) = true ;
1058+
1059+ // Container identity information for the existing volume.
1060+ // This field is REQUIRED
1061+ string volume_id = 1 ;
1062+
1063+ // Secrets required by plugin to complete modify volume topology
1064+ // request.
1065+ // This field is OPTIONAL. Refer to the `Secrets Requirements`
1066+ // section on how to use this field.
1067+ map <string , string > secrets = 2 [(csi_secret) = true ];
1068+
1069+ // Plugin specific volume attributes to mutate, passed in as
1070+ // opaque key-value pairs.
1071+ // This field is REQUIRED. The Plugin is responsible for
1072+ // parsing and validating these parameters. COs will treat these
1073+ // as opaque. The CO SHOULD specify the intended values of all mutable
1074+ // parameters it intends to modify. SPs MUST NOT modify volumes based
1075+ // on the absence of keys, only keys that are specified should result
1076+ // in modifications to the volume.
1077+ map <string , string > mutable_parameters = 3 ;
1078+ }
1079+
1080+ message ControllerModifyVolumeTopologyResponse {
1081+ option (alpha_message) = true ;
1082+
1083+ // Specifies where (regions, zones, racks, etc.) the modified
1084+ // volume is accessible from.
1085+ // A plugin that returns this field MUST also set the
1086+ // VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
1087+ // The SP MAY specify multiple topologies to indicate the volume is
1088+ // accessible from multiple locations.
1089+ // COs MAY use this information along with the topology information
1090+ // returned by NodeGetInfo to ensure that a given volume is accessible
1091+ // from a given node when scheduling workloads.
1092+ repeated Topology accessible_topology = 1 ;
1093+
1094+ // Indicates whether the modification is still in progress.
1095+ // SP MAY set in_progress to update the accessible_topology
1096+ // before the modification finishes to reduce possible race
1097+ // conditions.
1098+ // COs SHOULD retry the request if in_progress is set to true,
1099+ // until in_progress is set to false.
1100+ bool in_progress = 2 ;
1101+ }
10501102message GetCapacityRequest {
10511103 // If specified, the Plugin SHALL report the capacity of the storage
10521104 // that can be used to provision volumes that satisfy ALL of the
@@ -1194,6 +1246,10 @@ message ControllerServiceCapability {
11941246 // Indicates the SP supports the GetSnapshot RPC.
11951247 // This enables COs to fetch an existing snapshot.
11961248 GET_SNAPSHOT = 15 [(alpha_enum_value) = true ];
1249+
1250+ // Indicates the SP supports modifying volume topology.
1251+ // See ControllerModifyVolumeTopology for details.
1252+ MODIFY_VOLUME_TOPOLOGY = 16 [(alpha_enum_value) = true ];
11971253 }
11981254
11991255 Type type = 1 ;
0 commit comments