xref: /aosp_15_r20/external/googleapis/google/cloud/gkemulticloud/v1/azure_service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.gkemulticloud.v1;
18
19import "google/api/annotations.proto";
20import "google/api/client.proto";
21import "google/api/field_behavior.proto";
22import "google/api/resource.proto";
23import "google/cloud/gkemulticloud/v1/azure_resources.proto";
24import "google/cloud/gkemulticloud/v1/common_resources.proto";
25import "google/longrunning/operations.proto";
26import "google/protobuf/empty.proto";
27import "google/protobuf/field_mask.proto";
28import "google/protobuf/timestamp.proto";
29
30option csharp_namespace = "Google.Cloud.GkeMultiCloud.V1";
31option go_package = "cloud.google.com/go/gkemulticloud/apiv1/gkemulticloudpb;gkemulticloudpb";
32option java_multiple_files = true;
33option java_outer_classname = "AzureServiceProto";
34option java_package = "com.google.cloud.gkemulticloud.v1";
35option php_namespace = "Google\\Cloud\\GkeMultiCloud\\V1";
36option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
37
38// The AzureClusters API provides a single centrally managed service
39// to create and manage Anthos clusters that run on Azure infrastructure.
40service AzureClusters {
41  option (google.api.default_host) = "gkemulticloud.googleapis.com";
42  option (google.api.oauth_scopes) =
43      "https://www.googleapis.com/auth/cloud-platform";
44
45  // Creates a new [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
46  // resource on a given Google Cloud project and region.
47  //
48  // `AzureClient` resources hold client authentication
49  // information needed by the Anthos Multicloud API to manage Azure resources
50  // on your Azure subscription on your behalf.
51  //
52  // If successful, the response contains a newly created
53  // [Operation][google.longrunning.Operation] resource that can be
54  // described to track the status of the operation.
55  rpc CreateAzureClient(CreateAzureClientRequest)
56      returns (google.longrunning.Operation) {
57    option (google.api.http) = {
58      post: "/v1/{parent=projects/*/locations/*}/azureClients"
59      body: "azure_client"
60    };
61    option (google.api.method_signature) =
62        "parent,azure_client,azure_client_id";
63    option (google.longrunning.operation_info) = {
64      response_type: "AzureClient"
65      metadata_type: "OperationMetadata"
66    };
67  }
68
69  // Describes a specific
70  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource.
71  rpc GetAzureClient(GetAzureClientRequest) returns (AzureClient) {
72    option (google.api.http) = {
73      get: "/v1/{name=projects/*/locations/*/azureClients/*}"
74    };
75    option (google.api.method_signature) = "name";
76  }
77
78  // Lists all [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
79  // resources on a given Google Cloud project and region.
80  rpc ListAzureClients(ListAzureClientsRequest)
81      returns (ListAzureClientsResponse) {
82    option (google.api.http) = {
83      get: "/v1/{parent=projects/*/locations/*}/azureClients"
84    };
85    option (google.api.method_signature) = "parent";
86  }
87
88  // Deletes a specific [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
89  // resource.
90  //
91  // If the client is used by one or more clusters, deletion will
92  // fail and a `FAILED_PRECONDITION` error will be returned.
93  //
94  // If successful, the response contains a newly created
95  // [Operation][google.longrunning.Operation] resource that can be
96  // described to track the status of the operation.
97  rpc DeleteAzureClient(DeleteAzureClientRequest)
98      returns (google.longrunning.Operation) {
99    option (google.api.http) = {
100      delete: "/v1/{name=projects/*/locations/*/azureClients/*}"
101    };
102    option (google.api.method_signature) = "name";
103    option (google.longrunning.operation_info) = {
104      response_type: "google.protobuf.Empty"
105      metadata_type: "OperationMetadata"
106    };
107  }
108
109  // Creates a new [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
110  // resource on a given Google Cloud Platform project and region.
111  //
112  // If successful, the response contains a newly created
113  // [Operation][google.longrunning.Operation] resource that can be
114  // described to track the status of the operation.
115  rpc CreateAzureCluster(CreateAzureClusterRequest)
116      returns (google.longrunning.Operation) {
117    option (google.api.http) = {
118      post: "/v1/{parent=projects/*/locations/*}/azureClusters"
119      body: "azure_cluster"
120    };
121    option (google.api.method_signature) =
122        "parent,azure_cluster,azure_cluster_id";
123    option (google.longrunning.operation_info) = {
124      response_type: "AzureCluster"
125      metadata_type: "OperationMetadata"
126    };
127  }
128
129  // Updates an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
130  rpc UpdateAzureCluster(UpdateAzureClusterRequest)
131      returns (google.longrunning.Operation) {
132    option (google.api.http) = {
133      patch: "/v1/{azure_cluster.name=projects/*/locations/*/azureClusters/*}"
134      body: "azure_cluster"
135    };
136    option (google.api.method_signature) = "azure_cluster,update_mask";
137    option (google.longrunning.operation_info) = {
138      response_type: "AzureCluster"
139      metadata_type: "OperationMetadata"
140    };
141  }
142
143  // Describes a specific
144  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
145  rpc GetAzureCluster(GetAzureClusterRequest) returns (AzureCluster) {
146    option (google.api.http) = {
147      get: "/v1/{name=projects/*/locations/*/azureClusters/*}"
148    };
149    option (google.api.method_signature) = "name";
150  }
151
152  // Lists all [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
153  // resources on a given Google Cloud project and region.
154  rpc ListAzureClusters(ListAzureClustersRequest)
155      returns (ListAzureClustersResponse) {
156    option (google.api.http) = {
157      get: "/v1/{parent=projects/*/locations/*}/azureClusters"
158    };
159    option (google.api.method_signature) = "parent";
160  }
161
162  // Deletes a specific
163  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
164  //
165  // Fails if the cluster has one or more associated
166  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources.
167  //
168  // If successful, the response contains a newly created
169  // [Operation][google.longrunning.Operation] resource that can be
170  // described to track the status of the operation.
171  rpc DeleteAzureCluster(DeleteAzureClusterRequest)
172      returns (google.longrunning.Operation) {
173    option (google.api.http) = {
174      delete: "/v1/{name=projects/*/locations/*/azureClusters/*}"
175    };
176    option (google.api.method_signature) = "name";
177    option (google.longrunning.operation_info) = {
178      response_type: "google.protobuf.Empty"
179      metadata_type: "OperationMetadata"
180    };
181  }
182
183  // Generates an access token for a cluster agent.
184  rpc GenerateAzureClusterAgentToken(GenerateAzureClusterAgentTokenRequest)
185      returns (GenerateAzureClusterAgentTokenResponse) {
186    option (google.api.http) = {
187      post: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}:generateAzureClusterAgentToken"
188      body: "*"
189    };
190  }
191
192  // Generates a short-lived access token to authenticate to a given
193  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
194  rpc GenerateAzureAccessToken(GenerateAzureAccessTokenRequest)
195      returns (GenerateAzureAccessTokenResponse) {
196    option (google.api.http) = {
197      get: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}:generateAzureAccessToken"
198    };
199  }
200
201  // Creates a new [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool],
202  // attached to a given
203  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
204  //
205  // If successful, the response contains a newly created
206  // [Operation][google.longrunning.Operation] resource that can be
207  // described to track the status of the operation.
208  rpc CreateAzureNodePool(CreateAzureNodePoolRequest)
209      returns (google.longrunning.Operation) {
210    option (google.api.http) = {
211      post: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
212      body: "azure_node_pool"
213    };
214    option (google.api.method_signature) =
215        "parent,azure_node_pool,azure_node_pool_id";
216    option (google.longrunning.operation_info) = {
217      response_type: "AzureNodePool"
218      metadata_type: "OperationMetadata"
219    };
220  }
221
222  // Updates an [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool].
223  rpc UpdateAzureNodePool(UpdateAzureNodePoolRequest)
224      returns (google.longrunning.Operation) {
225    option (google.api.http) = {
226      patch: "/v1/{azure_node_pool.name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
227      body: "azure_node_pool"
228    };
229    option (google.api.method_signature) = "azure_node_pool,update_mask";
230    option (google.longrunning.operation_info) = {
231      response_type: "AzureNodePool"
232      metadata_type: "OperationMetadata"
233    };
234  }
235
236  // Describes a specific
237  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource.
238  rpc GetAzureNodePool(GetAzureNodePoolRequest) returns (AzureNodePool) {
239    option (google.api.http) = {
240      get: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
241    };
242    option (google.api.method_signature) = "name";
243  }
244
245  // Lists all [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
246  // resources on a given
247  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
248  rpc ListAzureNodePools(ListAzureNodePoolsRequest)
249      returns (ListAzureNodePoolsResponse) {
250    option (google.api.http) = {
251      get: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
252    };
253    option (google.api.method_signature) = "parent";
254  }
255
256  // Deletes a specific
257  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource.
258  //
259  // If successful, the response contains a newly created
260  // [Operation][google.longrunning.Operation] resource that can be
261  // described to track the status of the operation.
262  rpc DeleteAzureNodePool(DeleteAzureNodePoolRequest)
263      returns (google.longrunning.Operation) {
264    option (google.api.http) = {
265      delete: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
266    };
267    option (google.api.method_signature) = "name";
268    option (google.longrunning.operation_info) = {
269      response_type: "google.protobuf.Empty"
270      metadata_type: "OperationMetadata"
271    };
272  }
273
274  // Gets the OIDC discovery document for the cluster.
275  // See the
276  // [OpenID Connect Discovery 1.0
277  // specification](https://openid.net/specs/openid-connect-discovery-1_0.html)
278  // for details.
279  rpc GetAzureOpenIdConfig(GetAzureOpenIdConfigRequest)
280      returns (AzureOpenIdConfig) {
281    option (google.api.http) = {
282      get: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}/.well-known/openid-configuration"
283    };
284    option (google.api.method_signature) = "azure_cluster";
285  }
286
287  // Gets the public component of the cluster signing keys in
288  // JSON Web Key format.
289  rpc GetAzureJsonWebKeys(GetAzureJsonWebKeysRequest)
290      returns (AzureJsonWebKeys) {
291    option (google.api.http) = {
292      get: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}/jwks"
293    };
294    option (google.api.method_signature) = "azure_cluster";
295  }
296
297  // Returns information, such as supported Azure regions and Kubernetes
298  // versions, on a given Google Cloud location.
299  rpc GetAzureServerConfig(GetAzureServerConfigRequest)
300      returns (AzureServerConfig) {
301    option (google.api.http) = {
302      get: "/v1/{name=projects/*/locations/*/azureServerConfig}"
303    };
304    option (google.api.method_signature) = "name";
305  }
306}
307
308// Request message for `AzureClusters.CreateAzureCluster` method.
309message CreateAzureClusterRequest {
310  // Required. The parent location where this
311  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource will be
312  // created.
313  //
314  // Location names are formatted as `projects/<project-id>/locations/<region>`.
315  //
316  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
317  // for more details on Google Cloud resource names.
318  string parent = 1 [
319    (google.api.field_behavior) = REQUIRED,
320    (google.api.resource_reference) = {
321      child_type: "gkemulticloud.googleapis.com/AzureCluster"
322    }
323  ];
324
325  // Required. The specification of the
326  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to create.
327  AzureCluster azure_cluster = 2 [(google.api.field_behavior) = REQUIRED];
328
329  // Required. A client provided ID the resource. Must be unique within the
330  // parent resource.
331  //
332  // The provided ID will be part of the
333  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource name
334  // formatted as
335  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
336  //
337  // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
338  string azure_cluster_id = 3 [(google.api.field_behavior) = REQUIRED];
339
340  // If set, only validate the request, but do not actually create the cluster.
341  bool validate_only = 4;
342}
343
344// Request message for `AzureClusters.UpdateAzureCluster` method.
345message UpdateAzureClusterRequest {
346  // Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
347  // resource to update.
348  AzureCluster azure_cluster = 1 [(google.api.field_behavior) = REQUIRED];
349
350  // If set, only validate the request, but do not actually update the cluster.
351  bool validate_only = 2;
352
353  // Required. Mask of fields to update. At least one path must be supplied in
354  // this field. The elements of the repeated paths field can only include these
355  // fields from [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]:
356  //
357  //  *   `description`.
358  //  *   `azureClient`.
359  //  *   `control_plane.version`.
360  //  *   `control_plane.vm_size`.
361  //  *   `annotations`.
362  //  *   `authorization.admin_users`.
363  //  *   `authorization.admin_groups`.
364  //  *   `control_plane.root_volume.size_gib`.
365  //  *   `azure_services_authentication`.
366  //  *   `azure_services_authentication.tenant_id`.
367  //  *   `azure_services_authentication.application_id`.
368  //  *   `control_plane.proxy_config`.
369  //  *   `control_plane.proxy_config.resource_group_id`.
370  //  *   `control_plane.proxy_config.secret_id`.
371  //  *   `control_plane.ssh_config.authorized_key`.
372  //  *   `logging_config.component_config.enable_components`
373  //  *   `monitoring_config.managed_prometheus_config.enabled`.
374  google.protobuf.FieldMask update_mask = 4
375      [(google.api.field_behavior) = REQUIRED];
376}
377
378// Request message for `AzureClusters.GetAzureCluster` method.
379message GetAzureClusterRequest {
380  // Required. The name of the
381  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to
382  // describe.
383  //
384  // `AzureCluster` names are formatted as
385  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
386  //
387  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
388  // for more details on Google Cloud Platform resource names.
389  string name = 1 [
390    (google.api.field_behavior) = REQUIRED,
391    (google.api.resource_reference) = {
392      type: "gkemulticloud.googleapis.com/AzureCluster"
393    }
394  ];
395}
396
397// Request message for `AzureClusters.ListAzureClusters` method.
398message ListAzureClustersRequest {
399  // Required. The parent location which owns this collection of
400  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resources.
401  //
402  // Location names are formatted as `projects/<project-id>/locations/<region>`.
403  //
404  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
405  // for more details on Google Cloud Platform resource names.
406  string parent = 1 [
407    (google.api.field_behavior) = REQUIRED,
408    (google.api.resource_reference) = {
409      child_type: "gkemulticloud.googleapis.com/AzureCluster"
410    }
411  ];
412
413  // The maximum number of items to return.
414  //
415  // If not specified, a default value of 50 will be used by the service.
416  // Regardless of the pageSize value, the response can include a partial list
417  // and a caller should only rely on response's
418  // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClustersResponse.next_page_token]
419  // to determine if there are more instances left to be queried.
420  int32 page_size = 2;
421
422  // The `nextPageToken` value returned from a previous
423  // [azureClusters.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClusters]
424  // request, if any.
425  string page_token = 3;
426}
427
428// Response message for `AzureClusters.ListAzureClusters` method.
429message ListAzureClustersResponse {
430  // A list of [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
431  // resources in the specified Google Cloud Platform project and region region.
432  repeated AzureCluster azure_clusters = 1;
433
434  // Token to retrieve the next page of results, or empty if there are no more
435  // results in the list.
436  string next_page_token = 2;
437}
438
439// Request message for `AzureClusters.DeleteAzureCluster` method.
440message DeleteAzureClusterRequest {
441  // Required. The resource name the
442  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to delete.
443  //
444  // `AzureCluster` names are formatted as
445  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
446  //
447  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
448  // for more details on Google Cloud Platform resource names.
449  string name = 1 [
450    (google.api.field_behavior) = REQUIRED,
451    (google.api.resource_reference) = {
452      type: "gkemulticloud.googleapis.com/AzureCluster"
453    }
454  ];
455
456  // If set to true, and the
457  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource is not
458  // found, the request will succeed but no action will be taken on the server
459  // and a completed [Operation][google.longrunning.Operation] will be returned.
460  //
461  // Useful for idempotent deletion.
462  bool allow_missing = 2;
463
464  // If set, only validate the request, but do not actually delete the resource.
465  bool validate_only = 3;
466
467  // The current etag of the
468  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
469  //
470  // Allows clients to perform deletions through optimistic concurrency control.
471  //
472  // If the provided etag does not match the current etag of the cluster,
473  // the request will fail and an ABORTED error will be returned.
474  string etag = 4;
475}
476
477// Response message for `AzureClusters.CreateAzureNodePool` method.
478message CreateAzureNodePoolRequest {
479  // Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
480  // resource where this node pool will be created.
481  //
482  // `AzureCluster` names are formatted as
483  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
484  //
485  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
486  // for more details on Google Cloud resource names.
487  string parent = 1 [
488    (google.api.field_behavior) = REQUIRED,
489    (google.api.resource_reference) = {
490      child_type: "gkemulticloud.googleapis.com/AzureNodePool"
491    }
492  ];
493
494  // Required. The specification of the
495  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to create.
496  AzureNodePool azure_node_pool = 2 [(google.api.field_behavior) = REQUIRED];
497
498  // Required. A client provided ID the resource. Must be unique within the
499  // parent resource.
500  //
501  // The provided ID will be part of the
502  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource name
503  // formatted as
504  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
505  //
506  // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
507  string azure_node_pool_id = 3 [(google.api.field_behavior) = REQUIRED];
508
509  // If set, only validate the request, but do not actually create the node
510  // pool.
511  bool validate_only = 4;
512}
513
514// Request message for `AzureClusters.UpdateAzureNodePool` method.
515message UpdateAzureNodePoolRequest {
516  // Required. The [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
517  // resource to update.
518  AzureNodePool azure_node_pool = 1 [(google.api.field_behavior) = REQUIRED];
519
520  // If set, only validate the request, but don't actually update the node pool.
521  bool validate_only = 2;
522
523  // Required. Mask of fields to update. At least one path must be supplied in
524  // this field. The elements of the repeated paths field can only include these
525  // fields from [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]:
526  //
527  //  *.  `annotations`.
528  //  *   `version`.
529  //  *   `autoscaling.min_node_count`.
530  //  *   `autoscaling.max_node_count`.
531  //  *   `config.ssh_config.authorized_key`.
532  //  *   `management.auto_repair`.
533  //  *   `management`.
534  google.protobuf.FieldMask update_mask = 3
535      [(google.api.field_behavior) = REQUIRED];
536}
537
538// Request message for `AzureClusters.GetAzureNodePool` method.
539message GetAzureNodePoolRequest {
540  // Required. The name of the
541  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource to
542  // describe.
543  //
544  // `AzureNodePool` names are formatted as
545  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
546  //
547  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
548  // for more details on Google Cloud resource names.
549  string name = 1 [
550    (google.api.field_behavior) = REQUIRED,
551    (google.api.resource_reference) = {
552      type: "gkemulticloud.googleapis.com/AzureNodePool"
553    }
554  ];
555}
556
557// Request message for `AzureClusters.ListAzureNodePools` method.
558message ListAzureNodePoolsRequest {
559  // Required. The parent `AzureCluster` which owns this collection of
560  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources.
561  //
562  // `AzureCluster` names are formatted as
563  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
564  //
565  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
566  // for more details on Google Cloud resource names.
567  string parent = 1 [
568    (google.api.field_behavior) = REQUIRED,
569    (google.api.resource_reference) = {
570      child_type: "gkemulticloud.googleapis.com/AzureNodePool"
571    }
572  ];
573
574  // The maximum number of items to return.
575  //
576  // If not specified, a default value of 50 will be used by the service.
577  // Regardless of the pageSize value, the response can include a partial list
578  // and a caller should only rely on response's
579  // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureNodePoolsResponse.next_page_token]
580  // to determine if there are more instances left to be queried.
581  int32 page_size = 2;
582
583  // The `nextPageToken` value returned from a previous
584  // [azureNodePools.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureNodePools]
585  // request, if any.
586  string page_token = 3;
587}
588
589// Response message for `AzureClusters.ListAzureNodePools` method.
590message ListAzureNodePoolsResponse {
591  // A list of [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
592  // resources in the specified `AzureCluster`.
593  repeated AzureNodePool azure_node_pools = 1;
594
595  // Token to retrieve the next page of results, or empty if there are no more
596  // results in the list.
597  string next_page_token = 2;
598}
599
600// Request message for `AzureClusters.DeleteAzureNodePool` method.
601message DeleteAzureNodePoolRequest {
602  // Required. The resource name the
603  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to delete.
604  //
605  // `AzureNodePool` names are formatted as
606  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
607  //
608  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
609  // for more details on Google Cloud resource names.
610  string name = 1 [
611    (google.api.field_behavior) = REQUIRED,
612    (google.api.resource_reference) = {
613      type: "gkemulticloud.googleapis.com/AzureNodePool"
614    }
615  ];
616
617  // If set, only validate the request, but do not actually delete the node
618  // pool.
619  bool validate_only = 2;
620
621  // If set to true, and the
622  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource is
623  // not found, the request will succeed but no action will be taken on the
624  // server and a completed [Operation][google.longrunning.Operation] will be
625  // returned.
626  //
627  // Useful for idempotent deletion.
628  bool allow_missing = 3;
629
630  // The current ETag of the
631  // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool].
632  //
633  // Allows clients to perform deletions through optimistic concurrency control.
634  //
635  // If the provided ETag does not match the current etag of the node pool,
636  // the request will fail and an ABORTED error will be returned.
637  string etag = 4;
638}
639
640// GetAzureOpenIdConfigRequest gets the OIDC discovery document for the
641// cluster. See the OpenID Connect Discovery 1.0 specification for details.
642message GetAzureOpenIdConfigRequest {
643  // Required. The AzureCluster, which owns the OIDC discovery document.
644  // Format:
645  // projects/<project-id>/locations/<region>/azureClusters/<cluster-id>
646  string azure_cluster = 1 [
647    (google.api.field_behavior) = REQUIRED,
648    (google.api.resource_reference) = {
649      type: "gkemulticloud.googleapis.com/AzureCluster"
650    }
651  ];
652}
653
654// GetAzureJsonWebKeysRequest gets the public component of the keys used by the
655// cluster to sign token requests. This will be the jwks_uri for the discover
656// document returned by getOpenIDConfig. See the OpenID Connect
657// Discovery 1.0 specification for details.
658message GetAzureJsonWebKeysRequest {
659  // Required. The AzureCluster, which owns the JsonWebKeys.
660  // Format:
661  // projects/<project-id>/locations/<region>/azureClusters/<cluster-id>
662  string azure_cluster = 1 [
663    (google.api.field_behavior) = REQUIRED,
664    (google.api.resource_reference) = {
665      type: "gkemulticloud.googleapis.com/AzureCluster"
666    }
667  ];
668}
669
670// GetAzureServerConfigRequest gets the server config of GKE cluster on Azure.
671message GetAzureServerConfigRequest {
672  // Required. The name of the
673  // [AzureServerConfig][google.cloud.gkemulticloud.v1.AzureServerConfig]
674  // resource to describe.
675  //
676  // `AzureServerConfig` names are formatted as
677  // `projects/<project-id>/locations/<region>/azureServerConfig`.
678  //
679  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
680  // for more details on Google Cloud resource names.
681  string name = 1 [
682    (google.api.field_behavior) = REQUIRED,
683    (google.api.resource_reference) = {
684      type: "gkemulticloud.googleapis.com/AzureServerConfig"
685    }
686  ];
687}
688
689// Request message for `AzureClusters.CreateAzureClient` method.
690message CreateAzureClientRequest {
691  // Required. The parent location where this
692  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource will be
693  // created.
694  //
695  // Location names are formatted as `projects/<project-id>/locations/<region>`.
696  //
697  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
698  // for more details on Google Cloud resource names.
699  string parent = 1 [
700    (google.api.field_behavior) = REQUIRED,
701    (google.api.resource_reference) = {
702      child_type: "gkemulticloud.googleapis.com/AzureClient"
703    }
704  ];
705
706  // Required. The specification of the
707  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to create.
708  AzureClient azure_client = 2 [(google.api.field_behavior) = REQUIRED];
709
710  // Required. A client provided ID the resource. Must be unique within the
711  // parent resource.
712  //
713  // The provided ID will be part of the
714  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource name
715  // formatted as
716  // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
717  //
718  // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
719  string azure_client_id = 4 [(google.api.field_behavior) = REQUIRED];
720
721  // If set, only validate the request, but do not actually create the client.
722  bool validate_only = 3;
723}
724
725// Request message for `AzureClusters.GetAzureClient` method.
726message GetAzureClientRequest {
727  // Required. The name of the
728  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource to
729  // describe.
730  //
731  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are
732  // formatted as
733  // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
734  //
735  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
736  // for more details on Google Cloud resource names.
737  string name = 1 [
738    (google.api.field_behavior) = REQUIRED,
739    (google.api.resource_reference) = {
740      type: "gkemulticloud.googleapis.com/AzureClient"
741    }
742  ];
743}
744
745// Request message for `AzureClusters.ListAzureClients` method.
746message ListAzureClientsRequest {
747  // Required. The parent location which owns this collection of
748  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resources.
749  //
750  // Location names are formatted as `projects/<project-id>/locations/<region>`.
751  //
752  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
753  // for more details on Google Cloud Platform resource names.
754  string parent = 1 [
755    (google.api.field_behavior) = REQUIRED,
756    (google.api.resource_reference) = {
757      child_type: "gkemulticloud.googleapis.com/AzureClient"
758    }
759  ];
760
761  // The maximum number of items to return.
762  //
763  // If not specified, a default value of 50 will be used by the service.
764  // Regardless of the pageSize value, the response can include a partial list
765  // and a caller should only rely on response's
766  // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClientsResponse.next_page_token]
767  // to determine if there are more instances left to be queried.
768  int32 page_size = 2;
769
770  // The `nextPageToken` value returned from a previous
771  // [azureClients.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClients]
772  // request, if any.
773  string page_token = 3;
774}
775
776// Response message for `AzureClusters.ListAzureClients` method.
777message ListAzureClientsResponse {
778  // A list of [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
779  // resources in the specified Google Cloud project and region region.
780  repeated AzureClient azure_clients = 1;
781
782  // Token to retrieve the next page of results, or empty if there are no more
783  // results in the list.
784  string next_page_token = 2;
785}
786
787// Request message for `AzureClusters.DeleteAzureClient` method.
788message DeleteAzureClientRequest {
789  // Required. The resource name the
790  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to delete.
791  //
792  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are
793  // formatted as
794  // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
795  //
796  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
797  // for more details on Google Cloud resource names.
798  string name = 1 [
799    (google.api.field_behavior) = REQUIRED,
800    (google.api.resource_reference) = {
801      type: "gkemulticloud.googleapis.com/AzureClient"
802    }
803  ];
804
805  // If set to true, and the
806  // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource is not
807  // found, the request will succeed but no action will be taken on the server
808  // and a completed [Operation][google.longrunning.Operation] will be returned.
809  //
810  // Useful for idempotent deletion.
811  bool allow_missing = 2;
812
813  // If set, only validate the request, but do not actually delete the resource.
814  bool validate_only = 3;
815}
816
817// Request message for `AzureClusters.GenerateAzureAccessToken` method.
818message GenerateAzureAccessTokenRequest {
819  // Required. The name of the
820  // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to
821  // authenticate to.
822  //
823  // `AzureCluster` names are formatted as
824  // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
825  //
826  // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
827  // for more details on Google Cloud resource names.
828  string azure_cluster = 1 [
829    (google.api.field_behavior) = REQUIRED,
830    (google.api.resource_reference) = {
831      type: "gkemulticloud.googleapis.com/AzureCluster"
832    }
833  ];
834}
835
836// Response message for `AzureClusters.GenerateAzureAccessToken` method.
837message GenerateAzureAccessTokenResponse {
838  // Output only. Access token to authenticate to k8s api-server.
839  string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
840
841  // Output only. Timestamp at which the token will expire.
842  google.protobuf.Timestamp expiration_time = 2
843      [(google.api.field_behavior) = OUTPUT_ONLY];
844}
845
846message GenerateAzureClusterAgentTokenRequest {
847  // Required.
848  string azure_cluster = 1 [
849    (google.api.field_behavior) = REQUIRED,
850    (google.api.resource_reference) = {
851      type: "gkemulticloud.googleapis.com/AzureCluster"
852    }
853  ];
854
855  // Required.
856  string subject_token = 2 [(google.api.field_behavior) = REQUIRED];
857
858  // Required.
859  string subject_token_type = 3 [(google.api.field_behavior) = REQUIRED];
860
861  // Required.
862  string version = 4 [(google.api.field_behavior) = REQUIRED];
863
864  // Optional.
865  string node_pool_id = 5 [(google.api.field_behavior) = OPTIONAL];
866
867  // Optional.
868  string grant_type = 6 [(google.api.field_behavior) = OPTIONAL];
869
870  // Optional.
871  string audience = 7 [(google.api.field_behavior) = OPTIONAL];
872
873  // Optional.
874  string scope = 8 [(google.api.field_behavior) = OPTIONAL];
875
876  // Optional.
877  string requested_token_type = 9 [(google.api.field_behavior) = OPTIONAL];
878
879  // Optional.
880  string options = 10 [(google.api.field_behavior) = OPTIONAL];
881}
882
883message GenerateAzureClusterAgentTokenResponse {
884  string access_token = 1;
885
886  int32 expires_in = 2;
887
888  string token_type = 3;
889}
890