@@ -111,6 +111,12 @@ service Controller {
111
111
returns (ControllerModifyVolumeResponse ) {
112
112
option (alpha_method) = true ;
113
113
}
114
+
115
+ rpc ControllerModifyVolumeTopology (
116
+ ControllerModifyVolumeTopologyRequest )
117
+ returns (ControllerModifyVolumeTopologyResponse ) {
118
+ option (alpha_method) = true ;
119
+ }
114
120
}
115
121
116
122
service GroupController {
@@ -1047,6 +1053,52 @@ message ControllerModifyVolumeResponse {
1047
1053
option (alpha_message) = true ;
1048
1054
}
1049
1055
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
+ }
1050
1102
message GetCapacityRequest {
1051
1103
// If specified, the Plugin SHALL report the capacity of the storage
1052
1104
// that can be used to provision volumes that satisfy ALL of the
@@ -1194,6 +1246,10 @@ message ControllerServiceCapability {
1194
1246
// Indicates the SP supports the GetSnapshot RPC.
1195
1247
// This enables COs to fetch an existing snapshot.
1196
1248
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 ];
1197
1253
}
1198
1254
1199
1255
Type type = 1 ;
0 commit comments