feat: Support AttachedClusters

feat: Add errors output fields for cluster and nodepool resources
feat: Add AWS Autoscaling Group metrics collection for AWS nodepools
feat: Add monitoring config

Clients can now (1) manage Attached Clusters, (2) use managed GMP metrics collection, (3) enable AWS nodepool ASG metrics collection, and (4) get error summary from API resources.

PiperOrigin-RevId: 496709757
pull/763/head
Google APIs 2 years ago committed by Copybara-Service
parent be2d54edde
commit 8e3a5a476e
  1. 11
      google/cloud/gkemulticloud/v1/BUILD.bazel
  2. 230
      google/cloud/gkemulticloud/v1/attached_resources.proto
  3. 432
      google/cloud/gkemulticloud/v1/attached_service.proto
  4. 171
      google/cloud/gkemulticloud/v1/aws_resources.proto
  5. 195
      google/cloud/gkemulticloud/v1/aws_service.proto
  6. 174
      google/cloud/gkemulticloud/v1/azure_resources.proto
  7. 274
      google/cloud/gkemulticloud/v1/azure_service.proto
  8. 39
      google/cloud/gkemulticloud/v1/common_resources.proto
  9. 32
      google/cloud/gkemulticloud/v1/gkemulticloud_grpc_service_config.json
  10. 11
      google/cloud/gkemulticloud/v1/gkemulticloud_v1.yaml

@ -21,6 +21,8 @@ load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info")
proto_library( proto_library(
name = "gkemulticloud_proto", name = "gkemulticloud_proto",
srcs = [ srcs = [
"attached_resources.proto",
"attached_service.proto",
"aws_resources.proto", "aws_resources.proto",
"aws_service.proto", "aws_service.proto",
"azure_resources.proto", "azure_resources.proto",
@ -89,6 +91,8 @@ java_gapic_library(
java_gapic_test( java_gapic_test(
name = "gkemulticloud_java_gapic_test_suite", name = "gkemulticloud_java_gapic_test_suite",
test_classes = [ test_classes = [
"com.google.cloud.gkemulticloud.v1.AttachedClustersClientHttpJsonTest",
"com.google.cloud.gkemulticloud.v1.AttachedClustersClientTest",
"com.google.cloud.gkemulticloud.v1.AwsClustersClientHttpJsonTest", "com.google.cloud.gkemulticloud.v1.AwsClustersClientHttpJsonTest",
"com.google.cloud.gkemulticloud.v1.AwsClustersClientTest", "com.google.cloud.gkemulticloud.v1.AwsClustersClientTest",
"com.google.cloud.gkemulticloud.v1.AzureClustersClientHttpJsonTest", "com.google.cloud.gkemulticloud.v1.AzureClustersClientHttpJsonTest",
@ -182,13 +186,15 @@ py_gapic_library(
srcs = [":gkemulticloud_proto"], srcs = [":gkemulticloud_proto"],
grpc_service_config = "gkemulticloud_grpc_service_config.json", grpc_service_config = "gkemulticloud_grpc_service_config.json",
opt_args = [ opt_args = [
"warehouse-package-name=google-cloud-gke-multicloud",
"python-gapic-namespace=google.cloud",
"python-gapic-name=gke_multicloud", "python-gapic-name=gke_multicloud",
"python-gapic-namespace=google.cloud",
"warehouse-package-name=google-cloud-gke-multicloud",
], ],
rest_numeric_enums = False, rest_numeric_enums = False,
service_yaml = "gkemulticloud_v1.yaml", service_yaml = "gkemulticloud_v1.yaml",
transport = "grpc", transport = "grpc",
deps = [
],
) )
py_test( py_test(
@ -319,6 +325,7 @@ ruby_cloud_gapic_library(
rest_numeric_enums = False, rest_numeric_enums = False,
ruby_cloud_description = "Anthos Multi-Cloud provides a way to manage Kubernetes clusters that run on AWS and Azure infrastructure using the Anthos Multi-Cloud API. Combined with Connect, you can manage Kubernetes clusters on Google Cloud, AWS, and Azure from the Google Cloud Console.", ruby_cloud_description = "Anthos Multi-Cloud provides a way to manage Kubernetes clusters that run on AWS and Azure infrastructure using the Anthos Multi-Cloud API. Combined with Connect, you can manage Kubernetes clusters on Google Cloud, AWS, and Azure from the Google Cloud Console.",
ruby_cloud_title = "Anthos Multi-Cloud V1", ruby_cloud_title = "Anthos Multi-Cloud V1",
service_yaml = "gkemulticloud_v1.yaml",
deps = [ deps = [
":gkemulticloud_ruby_grpc", ":gkemulticloud_ruby_grpc",
":gkemulticloud_ruby_proto", ":gkemulticloud_ruby_proto",

@ -0,0 +1,230 @@
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.gkemulticloud.v1;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/gkemulticloud/v1/common_resources.proto";
import "google/protobuf/timestamp.proto";
option csharp_namespace = "Google.Cloud.GkeMultiCloud.V1";
option go_package = "google.golang.org/genproto/googleapis/cloud/gkemulticloud/v1;gkemulticloud";
option java_multiple_files = true;
option java_outer_classname = "AttachedResourcesProto";
option java_package = "com.google.cloud.gkemulticloud.v1";
option php_namespace = "Google\\Cloud\\GkeMultiCloud\\V1";
option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
// An Anthos cluster running on customer own infrastructure.
message AttachedCluster {
option (google.api.resource) = {
type: "gkemulticloud.googleapis.com/AttachedCluster"
pattern: "projects/{project}/locations/{location}/attachedClusters/{attached_cluster}"
};
// The lifecycle state of the cluster.
enum State {
// Not set.
STATE_UNSPECIFIED = 0;
// The PROVISIONING state indicates the cluster is being registered.
PROVISIONING = 1;
// The RUNNING state indicates the cluster has been register and is fully
// usable.
RUNNING = 2;
// The RECONCILING state indicates that some work is actively being done on
// the cluster, such as upgrading software components.
RECONCILING = 3;
// The STOPPING state indicates the cluster is being de-registered.
STOPPING = 4;
// The ERROR state indicates the cluster is in a broken unrecoverable
// state.
ERROR = 5;
// The DEGRADED state indicates the cluster requires user action to
// restore full functionality.
DEGRADED = 6;
}
// The name of this resource.
//
// Cluster names are formatted as
// `projects/<project-number>/locations/<region>/attachedClusters/<cluster-id>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on GCP resource names.
string name = 1;
// Optional. A human readable description of this cluster.
// Cannot be longer than 255 UTF-8 encoded bytes.
string description = 2 [(google.api.field_behavior) = OPTIONAL];
// Required. OpenID Connect (OIDC) configuration for the cluster.
AttachedOidcConfig oidc_config = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The platform version for the cluster (e.g. `1.19.0-gke.1000`).
//
// You can list all supported versions on a given Google Cloud region by
// calling
// [GetAttachedServerConfig][google.cloud.gkemulticloud.v1.AttachedClusters.GetAttachedServerConfig].
string platform_version = 4 [(google.api.field_behavior) = REQUIRED];
// Required. The Kubernetes distribution of the underlying attached cluster.
//
// Supported values: ["eks", "aks"].
string distribution = 16 [(google.api.field_behavior) = REQUIRED];
// Output only. The region where this cluster runs.
//
// For EKS clusters, this is a AWS region. For AKS clusters,
// this is an Azure region.
string cluster_region = 22 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. Fleet configuration.
Fleet fleet = 5 [(google.api.field_behavior) = REQUIRED];
// Output only. The current state of the cluster.
State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. A globally unique identifier for the cluster.
string uid = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. If set, there are currently changes in flight to the cluster.
bool reconciling = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was registered.
google.protobuf.Timestamp create_time = 9
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was last updated.
google.protobuf.Timestamp update_time = 10
[(google.api.field_behavior) = OUTPUT_ONLY];
// Allows clients to perform consistent read-modify-writes
// through optimistic concurrency control.
//
// Can be sent on update and delete requests to ensure the
// client has an up-to-date value before proceeding.
string etag = 11;
// Output only. The Kubernetes version of the cluster.
string kubernetes_version = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Annotations on the cluster.
//
// This field has the same restrictions as Kubernetes annotations.
// The total size of all keys and values combined is limited to 256k.
// Key can have 2 segments: prefix (optional) and name (required),
// separated by a slash (/).
// Prefix must be a DNS subdomain.
// Name must be 63 characters or less, begin and end with alphanumerics,
// with dashes (-), underscores (_), dots (.), and alphanumerics between.
map<string, string> annotations = 13 [(google.api.field_behavior) = OPTIONAL];
// Output only. Workload Identity settings.
WorkloadIdentityConfig workload_identity_config = 14
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Logging configuration for this cluster.
LoggingConfig logging_config = 15 [(google.api.field_behavior) = OPTIONAL];
// Output only. A set of errors found in the cluster.
repeated AttachedClusterError errors = 20
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Configuration related to the cluster RBAC settings.
AttachedClustersAuthorization authorization = 21
[(google.api.field_behavior) = OPTIONAL];
// Optional. Monitoring configuration for this cluster.
MonitoringConfig monitoring_config = 23
[(google.api.field_behavior) = OPTIONAL];
}
// Configuration related to the cluster RBAC settings.
message AttachedClustersAuthorization {
// Required. Users that can perform operations as a cluster admin. A managed
// ClusterRoleBinding will be created to grant the `cluster-admin` ClusterRole
// to the users. Up to ten admin users can be provided.
//
// For more info on RBAC, see
// https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
repeated AttachedClusterUser admin_users = 1
[(google.api.field_behavior) = REQUIRED];
}
// Identities of a user-type subject for Attached clusters.
message AttachedClusterUser {
// Required. The name of the user, e.g. `my-gcp-id@gmail.com`.
string username = 1 [(google.api.field_behavior) = REQUIRED];
}
// OIDC discovery information of the target cluster.
//
// Kubernetes Service Account (KSA) tokens are JWT tokens signed by the cluster
// API server. This fields indicates how GCP services
// validate KSA tokens in order to allow system workloads (such as GKE Connect
// and telemetry agents) to authenticate back to GCP.
//
// Both clusters with public and private issuer URLs are supported.
// Clusters with public issuers only need to specify the `issuer_url` field
// while clusters with private issuers need to provide both
// `issuer_url` and `oidc_jwks`.
message AttachedOidcConfig {
// A JSON Web Token (JWT) issuer URI. `issuer` must start with `https://`.
string issuer_url = 1;
// Optional. OIDC verification keys in JWKS format (RFC 7517).
// It contains a list of OIDC verification keys that can be used to verify
// OIDC JWTs.
//
// This field is required for cluster that doesn't have a publicly available
// discovery endpoint. When provided, it will be directly used
// to verify the OIDC JWT asserted by the IDP.
bytes jwks = 2 [(google.api.field_behavior) = OPTIONAL];
}
// AttachedServerConfig provides information about supported
// Kubernetes versions
message AttachedServerConfig {
option (google.api.resource) = {
type: "gkemulticloud.googleapis.com/AttachedServerConfig"
pattern: "projects/{project}/locations/{location}/attachedServerConfig"
};
// The resource name of the config.
string name = 1;
// List of valid platform versions.
repeated AttachedPlatformVersionInfo valid_versions = 2;
}
// Information about a supported Attached Clusters platform version.
message AttachedPlatformVersionInfo {
// Platform version name.
string version = 1;
}
// AttachedClusterError describes errors found on attached clusters.
message AttachedClusterError {
// Human-friendly description of the error.
string message = 1;
}

@ -0,0 +1,432 @@
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package google.cloud.gkemulticloud.v1;
import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/gkemulticloud/v1/attached_resources.proto";
import "google/longrunning/operations.proto";
import "google/protobuf/field_mask.proto";
option csharp_namespace = "Google.Cloud.GkeMultiCloud.V1";
option go_package = "google.golang.org/genproto/googleapis/cloud/gkemulticloud/v1;gkemulticloud";
option java_multiple_files = true;
option java_outer_classname = "AttachedServiceProto";
option java_package = "com.google.cloud.gkemulticloud.v1";
option php_namespace = "Google\\Cloud\\GkeMultiCloud\\V1";
option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
// The AttachedClusters API provides a single centrally managed service
// to register and manage Anthos attached clusters that run on customer's owned
// infrastructure.
service AttachedClusters {
option (google.api.default_host) = "gkemulticloud.googleapis.com";
option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates a new
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// on a given GCP project and region.
//
// If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation.
rpc CreateAttachedCluster(CreateAttachedClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*}/attachedClusters"
body: "attached_cluster"
};
option (google.api.method_signature) =
"parent,attached_cluster,attached_cluster_id";
option (google.longrunning.operation_info) = {
response_type: "AttachedCluster"
metadata_type: "OperationMetadata"
};
}
// Updates an
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster].
rpc UpdateAttachedCluster(UpdateAttachedClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
patch: "/v1/{attached_cluster.name=projects/*/locations/*/attachedClusters/*}"
body: "attached_cluster"
};
option (google.api.method_signature) = "attached_cluster,update_mask";
option (google.longrunning.operation_info) = {
response_type: "AttachedCluster"
metadata_type: "OperationMetadata"
};
}
// Imports creates a new
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// by importing an existing Fleet Membership resource.
//
// Attached Clusters created before the introduction of the Anthos Multi-Cloud
// API can be imported through this method.
//
// If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation.
rpc ImportAttachedCluster(ImportAttachedClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*}/attachedClusters:import"
body: "*"
};
option (google.api.method_signature) = "parent,fleet_membership";
option (google.longrunning.operation_info) = {
response_type: "AttachedCluster"
metadata_type: "OperationMetadata"
};
}
// Describes a specific
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource.
rpc GetAttachedCluster(GetAttachedClusterRequest) returns (AttachedCluster) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/attachedClusters/*}"
};
option (google.api.method_signature) = "name";
}
// Lists all [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster]
// resources on a given Google Cloud project and region.
rpc ListAttachedClusters(ListAttachedClustersRequest)
returns (ListAttachedClustersResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/attachedClusters"
};
option (google.api.method_signature) = "parent";
}
// Deletes a specific
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource.
//
// If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation.
rpc DeleteAttachedCluster(DeleteAttachedClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/attachedClusters/*}"
};
option (google.api.method_signature) = "name";
option (google.longrunning.operation_info) = {
response_type: "google.protobuf.Empty"
metadata_type: "OperationMetadata"
};
}
// Returns information, such as supported Kubernetes versions, on a given
// Google Cloud location.
rpc GetAttachedServerConfig(GetAttachedServerConfigRequest)
returns (AttachedServerConfig) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/attachedServerConfig}"
};
option (google.api.method_signature) = "name";
}
// Generates the install manifest to be installed on the target cluster.
rpc GenerateAttachedClusterInstallManifest(
GenerateAttachedClusterInstallManifestRequest)
returns (GenerateAttachedClusterInstallManifestResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}:generateAttachedClusterInstallManifest"
};
option (google.api.method_signature) = "parent,attached_cluster_id";
}
}
// Request message for `AttachedClusters.GenerateAttachedClusterInstallManifest`
// method.
message GenerateAttachedClusterInstallManifestRequest {
// Required. The parent location where this
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// will be created.
//
// Location names are formatted as `projects/<project-id>/locations/<region>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on Google Cloud resource names.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// name formatted as
// `projects/<project-id>/locations/<region>/attachedClusters/<cluster-id>`.
//
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
//
// When generating an install manifest for importing an existing Membership
// resource, the attached_cluster_id field must be the Membership id.
//
// Membership names are formatted as `resource name formatted as
// `projects/<project-id>/locations/<region>/memberships/<membership-id>`.
string attached_cluster_id = 2 [(google.api.field_behavior) = REQUIRED];
// Required. The platform version for the cluster (e.g. `1.19.0-gke.1000`).
//
// You can list all supported versions on a given Google Cloud region by
// calling
// [GetAttachedServerConfig][google.cloud.gkemulticloud.v1.AttachedClusters.GetAttachedServerConfig].
string platform_version = 3 [(google.api.field_behavior) = REQUIRED];
}
// Response message for
// `AttachedClusters.GenerateAttachedClusterInstallManifest` method.
message GenerateAttachedClusterInstallManifestResponse {
// A set of Kubernetes resources (in YAML format) to be applied
// to the cluster to be attached.
string manifest = 1;
}
// Request message for `AttachedClusters.CreateAttachedCluster` method.
message CreateAttachedClusterRequest {
// Required. The parent location where this
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// will be created.
//
// Location names are formatted as `projects/<project-id>/locations/<region>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on Google Cloud resource names.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
// Required. The specification of the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] to create.
AttachedCluster attached_cluster = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// name formatted as
// `projects/<project-id>/locations/<region>/attachedClusters/<cluster-id>`.
//
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string attached_cluster_id = 3 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the cluster.
bool validate_only = 4;
}
// Request message for `AttachedClusters.ImportAttachedCluster` method.
message ImportAttachedClusterRequest {
// Required. The parent location where this
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// will be created.
//
// Location names are formatted as `projects/<project-id>/locations/<region>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on Google Cloud resource names.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
// If set, only validate the request, but do not actually import the cluster.
bool validate_only = 2;
// Required. The name of the fleet membership resource to import.
string fleet_membership = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The platform version for the cluster (e.g. `1.19.0-gke.1000`).
//
// You can list all supported versions on a given Google Cloud region by
// calling
// [GetAttachedServerConfig][google.cloud.gkemulticloud.v1.AttachedClusters.GetAttachedServerConfig].
string platform_version = 4 [(google.api.field_behavior) = REQUIRED];
// Required. The Kubernetes distribution of the underlying attached cluster.
//
// Supported values: ["eks", "aks"].
string distribution = 5 [(google.api.field_behavior) = REQUIRED];
}
// Request message for `AttachedClusters.UpdateAttachedCluster` method.
message UpdateAttachedClusterRequest {
// Required. The
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// to update.
AttachedCluster attached_cluster = 1 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually update the cluster.
bool validate_only = 2;
// Required. Mask of fields to update. At least one path must be supplied in
// this field. The elements of the repeated paths field can only include these
// fields from
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster]:
//
// * `description`.
// * `annotations`.
// * `platform_version`.
// * `authorization.admin_users`.
// * `logging_config.component_config.enable_components`.
// * `monitoring_config.managed_prometheus_config.enabled`.
google.protobuf.FieldMask update_mask = 3
[(google.api.field_behavior) = REQUIRED];
}
// Request message for `AttachedClusters.GetAttachedCluster` method.
message GetAttachedClusterRequest {
// Required. The name of the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// to describe.
//
// `AttachedCluster` names are formatted as
// `projects/<project-id>/locations/<region>/attachedClusters/<cluster-id>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on GCP resource names.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
}
// Request message for `AttachedClusters.ListAttachedClusters` method.
message ListAttachedClustersRequest {
// Required. The parent location which owns this collection of
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resources.
//
// Location names are formatted as `projects/<project-id>/locations/<region>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on GCP resource names.
string parent = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
child_type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
// The maximum number of items to return.
//
// If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAttachedClustersResponse.next_page_token]
// to determine if there are more instances left to be queried.
int32 page_size = 2;
// The `nextPageToken` value returned from a previous
// [attachedClusters.list][google.cloud.gkemulticloud.v1.AttachedClusters.ListAttachedClusters]
// request, if any.
string page_token = 3;
}
// Response message for `AttachedClusters.ListAttachedClusters` method.
message ListAttachedClustersResponse {
// A list of [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster]
// resources in the specified GCP project and region region.
repeated AttachedCluster attached_clusters = 1;
// Token to retrieve the next page of results, or empty if there are no more
// results in the list.
string next_page_token = 2;
}
// Request message for `AttachedClusters.DeleteAttachedCluster` method.
message DeleteAttachedClusterRequest {
// Required. The resource name the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] to delete.
//
// `AttachedCluster` names are formatted as
// `projects/<project-id>/locations/<region>/attachedClusters/<cluster-id>`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on GCP resource names.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "gkemulticloud.googleapis.com/AttachedCluster"
}
];
// If set, only validate the request, but do not actually delete the resource.
bool validate_only = 2;
// If set to true, and the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// is not found, the request will succeed but no action will be taken on the
// server and a completed [Operation][google.longrunning.Operation] will be
// returned.
//
// Useful for idempotent deletion.
bool allow_missing = 3;
// If set to true, the deletion of
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster] resource
// will succeed even if errors occur during deleting in cluster resources.
// Using this parameter may result in orphaned resources in the cluster.
bool ignore_errors = 5;
// The current etag of the
// [AttachedCluster][google.cloud.gkemulticloud.v1.AttachedCluster].
//
// Allows clients to perform deletions through optimistic concurrency control.
//
// If the provided etag does not match the current etag of the cluster,
// the request will fail and an ABORTED error will be returned.
string etag = 4;
}
// GetAttachedServerConfigRequest gets the server config for attached
// clusters.
message GetAttachedServerConfigRequest {
// Required. The name of the
// [AttachedServerConfig][google.cloud.gkemulticloud.v1.AttachedServerConfig]
// resource to describe.
//
// `AttachedServerConfig` names are formatted as
// `projects/<project-id>/locations/<region>/attachedServerConfig`.
//
// See [Resource Names](https://cloud.google.com/apis/design/resource_names)
// for more details on Google Cloud resource names.
string name = 1 [
(google.api.field_behavior) = REQUIRED,
(google.api.resource_reference) = {
type: "gkemulticloud.googleapis.com/AttachedServerConfig"
}
];
}

@ -107,10 +107,12 @@ message AwsCluster {
bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was created. // Output only. The time at which this cluster was created.
google.protobuf.Timestamp create_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 11
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was last updated. // Output only. The time at which this cluster was last updated.
google.protobuf.Timestamp update_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp update_time = 12
[(google.api.field_behavior) = OUTPUT_ONLY];
// Allows clients to perform consistent read-modify-writes // Allows clients to perform consistent read-modify-writes
// through optimistic concurrency control. // through optimistic concurrency control.
@ -131,16 +133,26 @@ message AwsCluster {
map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL]; map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL];
// Output only. Workload Identity settings. // Output only. Workload Identity settings.
WorkloadIdentityConfig workload_identity_config = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; WorkloadIdentityConfig workload_identity_config = 16
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. PEM encoded x509 certificate of the cluster root of trust. // Output only. PEM encoded x509 certificate of the cluster root of trust.
string cluster_ca_certificate = 17 [(google.api.field_behavior) = OUTPUT_ONLY]; string cluster_ca_certificate = 17
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Fleet configuration. // Required. Fleet configuration.
Fleet fleet = 18 [(google.api.field_behavior) = OPTIONAL]; Fleet fleet = 18 [(google.api.field_behavior) = REQUIRED];
// Optional. Logging configuration for this cluster. // Optional. Logging configuration for this cluster.
LoggingConfig logging_config = 19 [(google.api.field_behavior) = OPTIONAL]; LoggingConfig logging_config = 19 [(google.api.field_behavior) = OPTIONAL];
// Output only. A set of errors found in the cluster.
repeated AwsClusterError errors = 20
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Monitoring configuration for this cluster.
MonitoringConfig monitoring_config = 21
[(google.api.field_behavior) = OPTIONAL];
} }
// ControlPlane defines common parameters between control plane nodes. // ControlPlane defines common parameters between control plane nodes.
@ -171,10 +183,11 @@ message AwsControlPlane {
// Optional. The IDs of additional security groups to add to control plane // Optional. The IDs of additional security groups to add to control plane
// replicas. The Anthos Multi-Cloud API will automatically create and manage // replicas. The Anthos Multi-Cloud API will automatically create and manage
// security groups with the minimum rules needed for a functioning cluster. // security groups with the minimum rules needed for a functioning cluster.
repeated string security_group_ids = 5 [(google.api.field_behavior) = OPTIONAL]; repeated string security_group_ids = 5
[(google.api.field_behavior) = OPTIONAL];
// Required. The name or ARN of the AWS IAM instance profile to assign to each control // Required. The name or ARN of the AWS IAM instance profile to assign to each
// plane replica. // control plane replica.
string iam_instance_profile = 7 [(google.api.field_behavior) = REQUIRED]; string iam_instance_profile = 7 [(google.api.field_behavior) = REQUIRED];
// Optional. Configuration related to the root volume provisioned for each // Optional. Configuration related to the root volume provisioned for each
@ -197,10 +210,11 @@ message AwsControlPlane {
AwsVolumeTemplate main_volume = 9 [(google.api.field_behavior) = OPTIONAL]; AwsVolumeTemplate main_volume = 9 [(google.api.field_behavior) = OPTIONAL];
// Required. The ARN of the AWS KMS key used to encrypt cluster secrets. // Required. The ARN of the AWS KMS key used to encrypt cluster secrets.
AwsDatabaseEncryption database_encryption = 10 [(google.api.field_behavior) = REQUIRED]; AwsDatabaseEncryption database_encryption = 10
[(google.api.field_behavior) = REQUIRED];
// Optional. A set of AWS resource tags to propagate to all underlying managed AWS // Optional. A set of AWS resource tags to propagate to all underlying managed
// resources. // AWS resources.
// //
// Specify at most 50 pairs containing alphanumerics, spaces, and symbols // Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to // (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to
@ -208,23 +222,26 @@ message AwsControlPlane {
map<string, string> tags = 11 [(google.api.field_behavior) = OPTIONAL]; map<string, string> tags = 11 [(google.api.field_behavior) = OPTIONAL];
// Required. Authentication configuration for management of AWS resources. // Required. Authentication configuration for management of AWS resources.
AwsServicesAuthentication aws_services_authentication = 12 [(google.api.field_behavior) = REQUIRED]; AwsServicesAuthentication aws_services_authentication = 12
[(google.api.field_behavior) = REQUIRED];
// Optional. Proxy configuration for outbound HTTP(S) traffic. // Optional. Proxy configuration for outbound HTTP(S) traffic.
AwsProxyConfig proxy_config = 16 [(google.api.field_behavior) = OPTIONAL]; AwsProxyConfig proxy_config = 16 [(google.api.field_behavior) = OPTIONAL];
// Required. Config encryption for user data. // Required. Config encryption for user data.
AwsConfigEncryption config_encryption = 17 [(google.api.field_behavior) = REQUIRED]; AwsConfigEncryption config_encryption = 17
[(google.api.field_behavior) = REQUIRED];
// Optional. The placement to use on control plane instances. // Optional. The placement to use on control plane instances.
// When unspecified, the VPC's default tenancy will be used. // When unspecified, the VPC's default tenancy will be used.
AwsInstancePlacement instance_placement = 18 [(google.api.field_behavior) = OPTIONAL]; AwsInstancePlacement instance_placement = 18
[(google.api.field_behavior) = OPTIONAL];
} }
// Authentication configuration for the management of AWS resources. // Authentication configuration for the management of AWS resources.
message AwsServicesAuthentication { message AwsServicesAuthentication {
// Required. The Amazon Resource Name (ARN) of the role that the Anthos Multi-Cloud API // Required. The Amazon Resource Name (ARN) of the role that the Anthos
// will assume when managing AWS resources on your account. // Multi-Cloud API will assume when managing AWS resources on your account.
string role_arn = 1 [(google.api.field_behavior) = REQUIRED]; string role_arn = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. An identifier for the assumed role session. // Optional. An identifier for the assumed role session.
@ -241,7 +258,8 @@ message AwsAuthorization {
// //
// For more info on RBAC, see // For more info on RBAC, see
// https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles // https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
repeated AwsClusterUser admin_users = 1 [(google.api.field_behavior) = REQUIRED]; repeated AwsClusterUser admin_users = 1
[(google.api.field_behavior) = REQUIRED];
} }
// Identities of a user-type subject for AWS clusters. // Identities of a user-type subject for AWS clusters.
@ -284,11 +302,12 @@ message AwsVolumeTemplate {
// When unspecified, it defaults to GP2 volume. // When unspecified, it defaults to GP2 volume.
VolumeType volume_type = 2 [(google.api.field_behavior) = OPTIONAL]; VolumeType volume_type = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. The number of I/O operations per second (IOPS) to provision for GP3 volume. // Optional. The number of I/O operations per second (IOPS) to provision for
// GP3 volume.
int32 iops = 3 [(google.api.field_behavior) = OPTIONAL]; int32 iops = 3 [(google.api.field_behavior) = OPTIONAL];
// Optional. The Amazon Resource Name (ARN) of the Customer Managed Key (CMK) used to // Optional. The Amazon Resource Name (ARN) of the Customer Managed Key (CMK)
// encrypt AWS EBS volumes. // used to encrypt AWS EBS volumes.
// //
// If not specified, the default Amazon managed key associated to // If not specified, the default Amazon managed key associated to
// the AWS region where this cluster runs will be used. // the AWS region where this cluster runs will be used.
@ -306,15 +325,17 @@ message AwsClusterNetworking {
// This field cannot be changed after creation. // This field cannot be changed after creation.
string vpc_id = 1 [(google.api.field_behavior) = REQUIRED]; string vpc_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. All pods in the cluster are assigned an IPv4 address from these ranges. // Required. All pods in the cluster are assigned an IPv4 address from these
// Only a single range is supported. // ranges. Only a single range is supported. This field cannot be changed
// This field cannot be changed after creation. // after creation.
repeated string pod_address_cidr_blocks = 2 [(google.api.field_behavior) = REQUIRED]; repeated string pod_address_cidr_blocks = 2
[(google.api.field_behavior) = REQUIRED];
// Required. All services in the cluster are assigned an IPv4 address from these ranges.
// Only a single range is supported. // Required. All services in the cluster are assigned an IPv4 address from
// This field cannot be changed after creation. // these ranges. Only a single range is supported. This field cannot be
repeated string service_address_cidr_blocks = 3 [(google.api.field_behavior) = REQUIRED]; // changed after creation.
repeated string service_address_cidr_blocks = 3
[(google.api.field_behavior) = REQUIRED];
} }
// An Anthos node pool running on AWS. // An Anthos node pool running on AWS.
@ -360,7 +381,8 @@ message AwsNodePool {
// see [Resource Names](https://cloud.google.com/apis/design/resource_names) // see [Resource Names](https://cloud.google.com/apis/design/resource_names)
string name = 1; string name = 1;
// Required. The Kubernetes version to run on this node pool (e.g. `1.19.10-gke.1000`). // Required. The Kubernetes version to run on this node pool (e.g.
// `1.19.10-gke.1000`).
// //
// You can list all supported versions on a given Google Cloud region by // You can list all supported versions on a given Google Cloud region by
// calling // calling
@ -371,7 +393,8 @@ message AwsNodePool {
AwsNodeConfig config = 28 [(google.api.field_behavior) = REQUIRED]; AwsNodeConfig config = 28 [(google.api.field_behavior) = REQUIRED];
// Required. Autoscaler configuration for this node pool. // Required. Autoscaler configuration for this node pool.
AwsNodePoolAutoscaling autoscaling = 25 [(google.api.field_behavior) = REQUIRED]; AwsNodePoolAutoscaling autoscaling = 25
[(google.api.field_behavior) = REQUIRED];
// Required. The subnet where the node pool node run. // Required. The subnet where the node pool node run.
string subnet_id = 6 [(google.api.field_behavior) = REQUIRED]; string subnet_id = 6 [(google.api.field_behavior) = REQUIRED];
@ -387,10 +410,12 @@ message AwsNodePool {
bool reconciling = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; bool reconciling = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this node pool was created. // Output only. The time at which this node pool was created.
google.protobuf.Timestamp create_time = 19 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 19
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this node pool was last updated. // Output only. The time at which this node pool was last updated.
google.protobuf.Timestamp update_time = 20 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp update_time = 20
[(google.api.field_behavior) = OUTPUT_ONLY];
// Allows clients to perform consistent read-modify-writes // Allows clients to perform consistent read-modify-writes
// through optimistic concurrency control. // through optimistic concurrency control.
@ -412,7 +437,12 @@ message AwsNodePool {
// Required. The constraint on the maximum number of pods that can be run // Required. The constraint on the maximum number of pods that can be run
// simultaneously on a node in the node pool. // simultaneously on a node in the node pool.
MaxPodsConstraint max_pods_constraint = 27 [(google.api.field_behavior) = REQUIRED]; MaxPodsConstraint max_pods_constraint = 27
[(google.api.field_behavior) = REQUIRED];
// Output only. A set of errors found in the node pool.
repeated AwsNodePoolError errors = 29
[(google.api.field_behavior) = OUTPUT_ONLY];
} }
// Parameters that describe the nodes in a cluster. // Parameters that describe the nodes in a cluster.
@ -437,13 +467,14 @@ message AwsNodeConfig {
// "mass": "1.3kg", "count": "3" }. // "mass": "1.3kg", "count": "3" }.
map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL]; map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. Key/value metadata to assign to each underlying AWS resource. Specify at // Optional. Key/value metadata to assign to each underlying AWS resource.
// most 50 pairs containing alphanumerics, spaces, and symbols (.+-=_:@/). // Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// Keys can be up to 127 Unicode characters. // (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to
// Values can be up to 255 Unicode characters. // 255 Unicode characters.
map<string, string> tags = 5 [(google.api.field_behavior) = OPTIONAL]; map<string, string> tags = 5 [(google.api.field_behavior) = OPTIONAL];
// Required. The name or ARN of the AWS IAM role assigned to nodes in the pool. // Required. The name or ARN of the AWS IAM role assigned to nodes in the
// pool.
string iam_instance_profile = 6 [(google.api.field_behavior) = REQUIRED]; string iam_instance_profile = 6 [(google.api.field_behavior) = REQUIRED];
// Optional. The OS image type to use on node pool instances. // Optional. The OS image type to use on node pool instances.
@ -456,31 +487,41 @@ message AwsNodeConfig {
// Optional. The SSH configuration. // Optional. The SSH configuration.
AwsSshConfig ssh_config = 9 [(google.api.field_behavior) = OPTIONAL]; AwsSshConfig ssh_config = 9 [(google.api.field_behavior) = OPTIONAL];
// Optional. The IDs of additional security groups to add to nodes in this pool. The // Optional. The IDs of additional security groups to add to nodes in this
// manager will automatically create security groups with minimum rules // pool. The manager will automatically create security groups with minimum
// needed for a functioning cluster. // rules needed for a functioning cluster.
repeated string security_group_ids = 10 [(google.api.field_behavior) = OPTIONAL]; repeated string security_group_ids = 10
[(google.api.field_behavior) = OPTIONAL];
// Optional. Proxy configuration for outbound HTTP(S) traffic. // Optional. Proxy configuration for outbound HTTP(S) traffic.
AwsProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL]; AwsProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL];
// Required. Config encryption for user data. // Required. Config encryption for user data.
AwsConfigEncryption config_encryption = 13 [(google.api.field_behavior) = REQUIRED]; AwsConfigEncryption config_encryption = 13
[(google.api.field_behavior) = REQUIRED];
// Optional. Placement related info for this node. // Optional. Placement related info for this node.
// When unspecified, the VPC's default tenancy will be used. // When unspecified, the VPC's default tenancy will be used.
AwsInstancePlacement instance_placement = 14 [(google.api.field_behavior) = OPTIONAL]; AwsInstancePlacement instance_placement = 14
[(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration related to CloudWatch metrics collection on the
// Auto Scaling group of the node pool.
//
// When unspecified, metrics collection is disabled.
AwsAutoscalingGroupMetricsCollection autoscaling_metrics_collection = 15
[(google.api.field_behavior) = OPTIONAL];
} }
// AwsNodePoolAutoscaling contains information required by cluster autoscaler // AwsNodePoolAutoscaling contains information required by cluster autoscaler
// to adjust the size of the node pool to the current cluster usage. // to adjust the size of the node pool to the current cluster usage.
message AwsNodePoolAutoscaling { message AwsNodePoolAutoscaling {
// Required. Minimum number of nodes in the node pool. Must be greater than or equal to // Required. Minimum number of nodes in the node pool. Must be greater than or
// 1 and less than or equal to max_node_count. // equal to 1 and less than or equal to max_node_count.
int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED]; int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Maximum number of nodes in the node pool. Must be greater than or equal to // Required. Maximum number of nodes in the node pool. Must be greater than or
// min_node_count and less than or equal to 50. // equal to min_node_count and less than or equal to 50.
int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED]; int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED];
} }
@ -517,6 +558,10 @@ message AwsSshConfig {
message AwsProxyConfig { message AwsProxyConfig {
// The ARN of the AWS Secret Manager secret that contains the HTTP(S) proxy // The ARN of the AWS Secret Manager secret that contains the HTTP(S) proxy
// configuration. // configuration.
//
// The secret must be a JSON encoded proxy configuration
// as described in
// https://cloud.google.com/anthos/clusters/docs/multi-cloud/aws/how-to/use-a-proxy#create_a_proxy_configuration_file
string secret_arn = 1; string secret_arn = 1;
// The version string of the AWS Secret Manager secret that contains the // The version string of the AWS Secret Manager secret that contains the
@ -554,3 +599,29 @@ message AwsInstancePlacement {
// Required. The tenancy for instance. // Required. The tenancy for instance.
Tenancy tenancy = 1 [(google.api.field_behavior) = REQUIRED]; Tenancy tenancy = 1 [(google.api.field_behavior) = REQUIRED];
} }
// Configuration related to CloudWatch metrics collection in an AWS
// Auto Scaling group.
message AwsAutoscalingGroupMetricsCollection {
// Required. The frequency at which EC2 Auto Scaling sends aggregated data to
// AWS CloudWatch. The only valid value is "1Minute".
string granularity = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The metrics to enable. For a list of valid metrics, see
// https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_EnableMetricsCollection.html.
// If you specify Granularity and don't specify any metrics, all metrics are
// enabled.
repeated string metrics = 2 [(google.api.field_behavior) = OPTIONAL];
}
// AwsClusterError describes errors found on AWS clusters.
message AwsClusterError {
// Human-friendly description of the error.
string message = 1;
}
// AwsNodePoolError describes errors found on AWS node pools.
message AwsNodePoolError {
// Human-friendly description of the error.
string message = 1;
}

@ -37,14 +37,17 @@ option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
// to create and manage Anthos clusters that run on AWS infrastructure. // to create and manage Anthos clusters that run on AWS infrastructure.
service AwsClusters { service AwsClusters {
option (google.api.default_host) = "gkemulticloud.googleapis.com"; option (google.api.default_host) = "gkemulticloud.googleapis.com";
option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates a new [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource on a given GCP project and region. // Creates a new [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource on a given GCP project and region.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc CreateAwsCluster(CreateAwsClusterRequest) returns (google.longrunning.Operation) { rpc CreateAwsCluster(CreateAwsClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*}/awsClusters" post: "/v1/{parent=projects/*/locations/*}/awsClusters"
body: "aws_cluster" body: "aws_cluster"
@ -57,7 +60,8 @@ service AwsClusters {
} }
// Updates an [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]. // Updates an [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
rpc UpdateAwsCluster(UpdateAwsClusterRequest) returns (google.longrunning.Operation) { rpc UpdateAwsCluster(UpdateAwsClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
patch: "/v1/{aws_cluster.name=projects/*/locations/*/awsClusters/*}" patch: "/v1/{aws_cluster.name=projects/*/locations/*/awsClusters/*}"
body: "aws_cluster" body: "aws_cluster"
@ -69,7 +73,8 @@ service AwsClusters {
}; };
} }
// Describes a specific [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource. // Describes a specific [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource.
rpc GetAwsCluster(GetAwsClusterRequest) returns (AwsCluster) { rpc GetAwsCluster(GetAwsClusterRequest) returns (AwsCluster) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/awsClusters/*}" get: "/v1/{name=projects/*/locations/*/awsClusters/*}"
@ -77,24 +82,27 @@ service AwsClusters {
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
// Lists all [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources on a given Google Cloud project and // Lists all [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources
// region. // on a given Google Cloud project and region.
rpc ListAwsClusters(ListAwsClustersRequest) returns (ListAwsClustersResponse) { rpc ListAwsClusters(ListAwsClustersRequest)
returns (ListAwsClustersResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/awsClusters" get: "/v1/{parent=projects/*/locations/*}/awsClusters"
}; };
option (google.api.method_signature) = "parent"; option (google.api.method_signature) = "parent";
} }
// Deletes a specific [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource. // Deletes a specific [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource.
// //
// Fails if the cluster has one or more associated [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] // Fails if the cluster has one or more associated
// resources. // [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resources.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc DeleteAwsCluster(DeleteAwsClusterRequest) returns (google.longrunning.Operation) { rpc DeleteAwsCluster(DeleteAwsClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/awsClusters/*}" delete: "/v1/{name=projects/*/locations/*/awsClusters/*}"
}; };
@ -107,23 +115,27 @@ service AwsClusters {
// Generates a short-lived access token to authenticate to a given // Generates a short-lived access token to authenticate to a given
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource. // [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource.
rpc GenerateAwsAccessToken(GenerateAwsAccessTokenRequest) returns (GenerateAwsAccessTokenResponse) { rpc GenerateAwsAccessToken(GenerateAwsAccessTokenRequest)
returns (GenerateAwsAccessTokenResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{aws_cluster=projects/*/locations/*/awsClusters/*}:generateAwsAccessToken" get: "/v1/{aws_cluster=projects/*/locations/*/awsClusters/*}:generateAwsAccessToken"
}; };
} }
// Creates a new [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool], attached to a given [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]. // Creates a new [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool],
// attached to a given [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc CreateAwsNodePool(CreateAwsNodePoolRequest) returns (google.longrunning.Operation) { rpc CreateAwsNodePool(CreateAwsNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools" post: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools"
body: "aws_node_pool" body: "aws_node_pool"
}; };
option (google.api.method_signature) = "parent,aws_node_pool,aws_node_pool_id"; option (google.api.method_signature) =
"parent,aws_node_pool,aws_node_pool_id";
option (google.longrunning.operation_info) = { option (google.longrunning.operation_info) = {
response_type: "AwsNodePool" response_type: "AwsNodePool"
metadata_type: "OperationMetadata" metadata_type: "OperationMetadata"
@ -131,7 +143,8 @@ service AwsClusters {
} }
// Updates an [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]. // Updates an [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool].
rpc UpdateAwsNodePool(UpdateAwsNodePoolRequest) returns (google.longrunning.Operation) { rpc UpdateAwsNodePool(UpdateAwsNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
patch: "/v1/{aws_node_pool.name=projects/*/locations/*/awsClusters/*/awsNodePools/*}" patch: "/v1/{aws_node_pool.name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
body: "aws_node_pool" body: "aws_node_pool"
@ -143,7 +156,8 @@ service AwsClusters {
}; };
} }
// Describes a specific [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource. // Describes a specific
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource.
rpc GetAwsNodePool(GetAwsNodePoolRequest) returns (AwsNodePool) { rpc GetAwsNodePool(GetAwsNodePoolRequest) returns (AwsNodePool) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}" get: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
@ -151,20 +165,25 @@ service AwsClusters {
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
// Lists all [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resources on a given [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]. // Lists all [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
rpc ListAwsNodePools(ListAwsNodePoolsRequest) returns (ListAwsNodePoolsResponse) { // resources on a given
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
rpc ListAwsNodePools(ListAwsNodePoolsRequest)
returns (ListAwsNodePoolsResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools" get: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools"
}; };
option (google.api.method_signature) = "parent"; option (google.api.method_signature) = "parent";
} }
// Deletes a specific [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource. // Deletes a specific [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
// resource.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc DeleteAwsNodePool(DeleteAwsNodePoolRequest) returns (google.longrunning.Operation) { rpc DeleteAwsNodePool(DeleteAwsNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}" delete: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
}; };
@ -187,8 +206,9 @@ service AwsClusters {
// Request message for `AwsClusters.CreateAwsCluster` method. // Request message for `AwsClusters.CreateAwsCluster` method.
message CreateAwsClusterRequest { message CreateAwsClusterRequest {
// Required. The parent location where this [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource // Required. The parent location where this
// will be created. // [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource will be
// created.
// //
// Location names are formatted as `projects/<project-id>/locations/<region>`. // Location names are formatted as `projects/<project-id>/locations/<region>`.
// //
@ -201,17 +221,19 @@ message CreateAwsClusterRequest {
} }
]; ];
// Required. The specification of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] to create. // Required. The specification of the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] to create.
AwsCluster aws_cluster = 2 [(google.api.field_behavior) = REQUIRED]; AwsCluster aws_cluster = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the parent // Required. A client provided ID the resource. Must be unique within the
// resource. // parent resource.
// //
// The provided ID will be part of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] // The provided ID will be part of the
// resource name formatted as // [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource name
// formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
// //
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 40 characters. // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string aws_cluster_id = 3 [(google.api.field_behavior) = REQUIRED]; string aws_cluster_id = 3 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the cluster. // If set, only validate the request, but do not actually create the cluster.
@ -220,7 +242,8 @@ message CreateAwsClusterRequest {
// Request message for `AwsClusters.UpdateAwsCluster` method. // Request message for `AwsClusters.UpdateAwsCluster` method.
message UpdateAwsClusterRequest { message UpdateAwsClusterRequest {
// Required. The [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource to update. // Required. The [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource to update.
AwsCluster aws_cluster = 1 [(google.api.field_behavior) = REQUIRED]; AwsCluster aws_cluster = 1 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually update the cluster. // If set, only validate the request, but do not actually update the cluster.
@ -242,20 +265,26 @@ message UpdateAwsClusterRequest {
// * `control_plane.proxy_config`. // * `control_plane.proxy_config`.
// * `control_plane.proxy_config.secret_arn`. // * `control_plane.proxy_config.secret_arn`.
// * `control_plane.proxy_config.secret_version`. // * `control_plane.proxy_config.secret_version`.
// * `control_plane.root_volume.size_gib`.
// * `control_plane.root_volume.volume_type`.
// * `control_plane.root_volume.iops`. // * `control_plane.root_volume.iops`.
// * `control_plane.root_volume.kms_key_arn`. // * `control_plane.root_volume.kms_key_arn`.
// * `control_plane.root_volume.volume_type`.
// * `control_plane.root_volume.size_gib`.
// * `control_plane.ssh_config`. // * `control_plane.ssh_config`.
// * `control_plane.ssh_config.ec2_key_pair`. // * `control_plane.ssh_config.ec2_key_pair`.
// * `control_plane.instance_placement.tenancy`. // * `control_plane.instance_placement.tenancy`.
// * `logging_config`. // * `control_plane.iam_instance_profile`.
google.protobuf.FieldMask update_mask = 4 [(google.api.field_behavior) = REQUIRED]; // * `logging_config.component_config.enable_components`.
// * `control_plane.tags`.
// * `monitoring_config.managed_prometheus_config.enabled`.
google.protobuf.FieldMask update_mask = 4
[(google.api.field_behavior) = REQUIRED];
} }
// Request message for `AwsClusters.GetAwsCluster` method. // Request message for `AwsClusters.GetAwsCluster` method.
message GetAwsClusterRequest { message GetAwsClusterRequest {
// Required. The name of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource to describe. // Required. The name of the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource to
// describe.
// //
// `AwsCluster` names are formatted as // `AwsCluster` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
@ -291,19 +320,20 @@ message ListAwsClustersRequest {
// If not specified, a default value of 50 will be used by the service. // If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list // Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's // and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsClustersResponse.next_page_token] to determine if // [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsClustersResponse.next_page_token]
// there are more instances left to be queried. // to determine if there are more instances left to be queried.
int32 page_size = 2; int32 page_size = 2;
// The `nextPageToken` value returned from a previous // The `nextPageToken` value returned from a previous
// [awsClusters.list][google.cloud.gkemulticloud.v1.AwsClusters.ListAwsClusters] request, if any. // [awsClusters.list][google.cloud.gkemulticloud.v1.AwsClusters.ListAwsClusters]
// request, if any.
string page_token = 3; string page_token = 3;
} }
// Response message for `AwsClusters.ListAwsClusters` method. // Response message for `AwsClusters.ListAwsClusters` method.
message ListAwsClustersResponse { message ListAwsClustersResponse {
// A list of [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources in the specified GCP // A list of [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources
// project and region region. // in the specified GCP project and region region.
repeated AwsCluster aws_clusters = 1; repeated AwsCluster aws_clusters = 1;
// Token to retrieve the next page of results, or empty if there are no more // Token to retrieve the next page of results, or empty if there are no more
@ -313,7 +343,8 @@ message ListAwsClustersResponse {
// Request message for `AwsClusters.DeleteAwsCluster` method. // Request message for `AwsClusters.DeleteAwsCluster` method.
message DeleteAwsClusterRequest { message DeleteAwsClusterRequest {
// Required. The resource name the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] to delete. // Required. The resource name the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] to delete.
// //
// `AwsCluster` names are formatted as // `AwsCluster` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
@ -330,14 +361,16 @@ message DeleteAwsClusterRequest {
// If set, only validate the request, but do not actually delete the resource. // If set, only validate the request, but do not actually delete the resource.
bool validate_only = 2; bool validate_only = 2;
// If set to true, and the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource is not found, // If set to true, and the
// the request will succeed but no action will be taken on the server and a // [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource is not
// completed [Operation][google.longrunning.Operation] will be returned. // found, the request will succeed but no action will be taken on the server
// and a completed [Operation][google.longrunning.Operation] will be returned.
// //
// Useful for idempotent deletion. // Useful for idempotent deletion.
bool allow_missing = 3; bool allow_missing = 3;
// The current etag of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]. // The current etag of the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
// //
// Allows clients to perform deletions through optimistic concurrency control. // Allows clients to perform deletions through optimistic concurrency control.
// //
@ -348,7 +381,8 @@ message DeleteAwsClusterRequest {
// Response message for `AwsClusters.CreateAwsNodePool` method. // Response message for `AwsClusters.CreateAwsNodePool` method.
message CreateAwsNodePoolRequest { message CreateAwsNodePoolRequest {
// Required. The [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource where this node pool will be created. // Required. The [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource where this node pool will be created.
// //
// `AwsCluster` names are formatted as // `AwsCluster` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
@ -362,17 +396,19 @@ message CreateAwsNodePoolRequest {
} }
]; ];
// Required. The specification of the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] to create. // Required. The specification of the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] to create.
AwsNodePool aws_node_pool = 2 [(google.api.field_behavior) = REQUIRED]; AwsNodePool aws_node_pool = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the parent // Required. A client provided ID the resource. Must be unique within the
// resource. // parent resource.
// //
// The provided ID will be part of the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] // The provided ID will be part of the
// resource name formatted as // [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource name
// formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`.
// //
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 40 characters. // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string aws_node_pool_id = 3 [(google.api.field_behavior) = REQUIRED]; string aws_node_pool_id = 3 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the node // If set, only validate the request, but do not actually create the node
@ -382,7 +418,8 @@ message CreateAwsNodePoolRequest {
// Request message for `AwsClusters.UpdateAwsNodePool` method. // Request message for `AwsClusters.UpdateAwsNodePool` method.
message UpdateAwsNodePoolRequest { message UpdateAwsNodePoolRequest {
// Required. The [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource to update. // Required. The [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
// resource to update.
AwsNodePool aws_node_pool = 1 [(google.api.field_behavior) = REQUIRED]; AwsNodePool aws_node_pool = 1 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but don't actually update the node pool. // If set, only validate the request, but don't actually update the node pool.
@ -407,12 +444,22 @@ message UpdateAwsNodePoolRequest {
// * `config.proxy_config.secret_version`. // * `config.proxy_config.secret_version`.
// * `config.ssh_config`. // * `config.ssh_config`.
// * `config.ssh_config.ec2_key_pair`. // * `config.ssh_config.ec2_key_pair`.
google.protobuf.FieldMask update_mask = 3 [(google.api.field_behavior) = REQUIRED]; // * `config.instance_placement.tenancy`.
// * `config.iam_instance_profile`.
// * `config.labels`.
// * `config.tags`.
// * `config.autoscaling_metrics_collection`.
// * `config.autoscaling_metrics_collection.granularity`.
// * `config.autoscaling_metrics_collection.metrics`.
google.protobuf.FieldMask update_mask = 3
[(google.api.field_behavior) = REQUIRED];
} }
// Request message for `AwsClusters.GetAwsNodePool` method. // Request message for `AwsClusters.GetAwsNodePool` method.
message GetAwsNodePoolRequest { message GetAwsNodePoolRequest {
// Required. The name of the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource to describe. // Required. The name of the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource to
// describe.
// //
// `AwsNodePool` names are formatted as // `AwsNodePool` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`.
@ -449,18 +496,20 @@ message ListAwsNodePoolsRequest {
// If not specified, a default value of 50 will be used by the service. // If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list // Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's // and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsNodePoolsResponse.next_page_token] to determine if // [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsNodePoolsResponse.next_page_token]
// there are more instances left to be queried. // to determine if there are more instances left to be queried.
int32 page_size = 2; int32 page_size = 2;
// The `nextPageToken` value returned from a previous // The `nextPageToken` value returned from a previous
// [awsNodePools.list][google.cloud.gkemulticloud.v1.AwsClusters.ListAwsNodePools] request, if any. // [awsNodePools.list][google.cloud.gkemulticloud.v1.AwsClusters.ListAwsNodePools]
// request, if any.
string page_token = 3; string page_token = 3;
} }
// Response message for `AwsClusters.ListAwsNodePools` method. // Response message for `AwsClusters.ListAwsNodePools` method.
message ListAwsNodePoolsResponse { message ListAwsNodePoolsResponse {
// A list of [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resources in the specified `AwsCluster`. // A list of [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
// resources in the specified `AwsCluster`.
repeated AwsNodePool aws_node_pools = 1; repeated AwsNodePool aws_node_pools = 1;
// Token to retrieve the next page of results, or empty if there are no more // Token to retrieve the next page of results, or empty if there are no more
@ -468,9 +517,10 @@ message ListAwsNodePoolsResponse {
string next_page_token = 2; string next_page_token = 2;
} }
// Request message for `AwsClusters.DeleteNodePool` method. // Request message for `AwsClusters.DeleteAwsNodePool` method.
message DeleteAwsNodePoolRequest { message DeleteAwsNodePoolRequest {
// Required. The resource name the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] to delete. // Required. The resource name the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] to delete.
// //
// `AwsNodePool` names are formatted as // `AwsNodePool` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`.
@ -488,14 +538,16 @@ message DeleteAwsNodePoolRequest {
// pool. // pool.
bool validate_only = 2; bool validate_only = 2;
// If set to true, and the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource is not found, // If set to true, and the
// the request will succeed but no action will be taken on the server and a // [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource is not
// completed [Operation][google.longrunning.Operation] will be returned. // found, the request will succeed but no action will be taken on the server
// and a completed [Operation][google.longrunning.Operation] will be returned.
// //
// Useful for idempotent deletion. // Useful for idempotent deletion.
bool allow_missing = 3; bool allow_missing = 3;
// The current ETag of the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]. // The current ETag of the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool].
// //
// Allows clients to perform deletions through optimistic concurrency control. // Allows clients to perform deletions through optimistic concurrency control.
// //
@ -506,7 +558,9 @@ message DeleteAwsNodePoolRequest {
// GetAwsServerConfigRequest gets the server config of GKE cluster on AWS. // GetAwsServerConfigRequest gets the server config of GKE cluster on AWS.
message GetAwsServerConfigRequest { message GetAwsServerConfigRequest {
// Required. The name of the [AwsServerConfig][google.cloud.gkemulticloud.v1.AwsServerConfig] resource to describe. // Required. The name of the
// [AwsServerConfig][google.cloud.gkemulticloud.v1.AwsServerConfig] resource
// to describe.
// //
// `AwsServerConfig` names are formatted as // `AwsServerConfig` names are formatted as
// `projects/<project-id>/locations/<region>/awsServerConfig`. // `projects/<project-id>/locations/<region>/awsServerConfig`.
@ -523,7 +577,9 @@ message GetAwsServerConfigRequest {
// Request message for `AwsClusters.GenerateAwsAccessToken` method. // Request message for `AwsClusters.GenerateAwsAccessToken` method.
message GenerateAwsAccessTokenRequest { message GenerateAwsAccessTokenRequest {
// Required. The name of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource to authenticate to. // Required. The name of the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource to
// authenticate to.
// //
// `AwsCluster` names are formatted as // `AwsCluster` names are formatted as
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
@ -544,5 +600,6 @@ message GenerateAwsAccessTokenResponse {
string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Timestamp at which the token will expire. // Output only. Timestamp at which the token will expire.
google.protobuf.Timestamp expiration_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp expiration_time = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
} }

@ -85,13 +85,15 @@ message AzureCluster {
// to list all supported Azure regions within a given Google Cloud region. // to list all supported Azure regions within a given Google Cloud region.
string azure_region = 3 [(google.api.field_behavior) = REQUIRED]; string azure_region = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The ARM ID of the resource group where the cluster resources are deployed. // Required. The ARM ID of the resource group where the cluster resources are
// For example: // deployed. For example:
// `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>` // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>`
string resource_group_id = 17 [(google.api.field_behavior) = REQUIRED]; string resource_group_id = 17 [(google.api.field_behavior) = REQUIRED];
// Required. Name of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] that contains authentication configuration for // Required. Name of the
// how the Anthos Multi-Cloud API connects to Azure APIs. // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] that contains
// authentication configuration for how the Anthos Multi-Cloud API connects to
// Azure APIs.
// //
// The `AzureClient` resource must reside on the same GCP project and region // The `AzureClient` resource must reside on the same GCP project and region
// as the `AzureCluster`. // as the `AzureCluster`.
@ -104,7 +106,8 @@ message AzureCluster {
string azure_client = 16 [(google.api.field_behavior) = REQUIRED]; string azure_client = 16 [(google.api.field_behavior) = REQUIRED];
// Required. Cluster-wide networking configuration. // Required. Cluster-wide networking configuration.
AzureClusterNetworking networking = 4 [(google.api.field_behavior) = REQUIRED]; AzureClusterNetworking networking = 4
[(google.api.field_behavior) = REQUIRED];
// Required. Configuration related to the cluster control plane. // Required. Configuration related to the cluster control plane.
AzureControlPlane control_plane = 5 [(google.api.field_behavior) = REQUIRED]; AzureControlPlane control_plane = 5 [(google.api.field_behavior) = REQUIRED];
@ -125,10 +128,12 @@ message AzureCluster {
bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was created. // Output only. The time at which this cluster was created.
google.protobuf.Timestamp create_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 11
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this cluster was last updated. // Output only. The time at which this cluster was last updated.
google.protobuf.Timestamp update_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp update_time = 12
[(google.api.field_behavior) = OUTPUT_ONLY];
// Allows clients to perform consistent read-modify-writes // Allows clients to perform consistent read-modify-writes
// through optimistic concurrency control. // through optimistic concurrency control.
@ -149,25 +154,36 @@ message AzureCluster {
map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL]; map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL];
// Output only. Workload Identity settings. // Output only. Workload Identity settings.
WorkloadIdentityConfig workload_identity_config = 18 [(google.api.field_behavior) = OUTPUT_ONLY]; WorkloadIdentityConfig workload_identity_config = 18
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. PEM encoded x509 certificate of the cluster root of trust. // Output only. PEM encoded x509 certificate of the cluster root of trust.
string cluster_ca_certificate = 19 [(google.api.field_behavior) = OUTPUT_ONLY]; string cluster_ca_certificate = 19
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Fleet configuration. // Required. Fleet configuration.
Fleet fleet = 20 [(google.api.field_behavior) = OPTIONAL]; Fleet fleet = 20 [(google.api.field_behavior) = REQUIRED];
// Output only. Mananged Azure resources for this cluster. // Output only. Managed Azure resources for this cluster.
AzureClusterResources managed_resources = 21 [(google.api.field_behavior) = OUTPUT_ONLY]; AzureClusterResources managed_resources = 21
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Logging configuration for this cluster. // Optional. Logging configuration for this cluster.
LoggingConfig logging_config = 23 [(google.api.field_behavior) = OPTIONAL]; LoggingConfig logging_config = 23 [(google.api.field_behavior) = OPTIONAL];
// Output only. A set of errors found in the cluster.
repeated AzureClusterError errors = 24
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Monitoring configuration for this cluster.
MonitoringConfig monitoring_config = 25
[(google.api.field_behavior) = OPTIONAL];
} }
// ClusterNetworking contains cluster-wide networking configuration. // ClusterNetworking contains cluster-wide networking configuration.
message AzureClusterNetworking { message AzureClusterNetworking {
// Required. The Azure Resource Manager (ARM) ID of the VNet associated with your // Required. The Azure Resource Manager (ARM) ID of the VNet associated with
// cluster. // your cluster.
// //
// All components in the cluster (i.e. control plane and node pools) run on a // All components in the cluster (i.e. control plane and node pools) run on a
// single VNet. // single VNet.
@ -185,7 +201,8 @@ message AzureClusterNetworking {
// ranges. Only a single range is supported. // ranges. Only a single range is supported.
// //
// This field cannot be changed after creation. // This field cannot be changed after creation.
repeated string pod_address_cidr_blocks = 2 [(google.api.field_behavior) = REQUIRED]; repeated string pod_address_cidr_blocks = 2
[(google.api.field_behavior) = REQUIRED];
// Required. The IP address range for services in this cluster, in CIDR // Required. The IP address range for services in this cluster, in CIDR
// notation (e.g. `10.96.0.0/14`). // notation (e.g. `10.96.0.0/14`).
@ -194,15 +211,17 @@ message AzureClusterNetworking {
// ranges. Only a single range is supported. // ranges. Only a single range is supported.
// //
// This field cannot be changed after creating a cluster. // This field cannot be changed after creating a cluster.
repeated string service_address_cidr_blocks = 3 [(google.api.field_behavior) = REQUIRED]; repeated string service_address_cidr_blocks = 3
[(google.api.field_behavior) = REQUIRED];
// Optional. The ARM ID of the subnet where Kubernetes private service type load // Optional. The ARM ID of the subnet where Kubernetes private service type
// balancers are deployed. When unspecified, it defaults to // load balancers are deployed. When unspecified, it defaults to
// AzureControlPlane.subnet_id. // AzureControlPlane.subnet_id.
// //
// Example: // Example:
// "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid456" // "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid456"
string service_load_balancer_subnet_id = 5 [(google.api.field_behavior) = OPTIONAL]; string service_load_balancer_subnet_id = 5
[(google.api.field_behavior) = OPTIONAL];
} }
// AzureControlPlane represents the control plane configurations. // AzureControlPlane represents the control plane configurations.
@ -215,8 +234,8 @@ message AzureControlPlane {
// [GetAzureServerConfig][google.cloud.gkemulticloud.v1.AzureClusters.GetAzureServerConfig]. // [GetAzureServerConfig][google.cloud.gkemulticloud.v1.AzureClusters.GetAzureServerConfig].
string version = 1 [(google.api.field_behavior) = REQUIRED]; string version = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The ARM ID of the default subnet for the control plane. The control plane // Optional. The ARM ID of the default subnet for the control plane. The
// VMs are deployed in this subnet, unless // control plane VMs are deployed in this subnet, unless
// `AzureControlPlane.replica_placements` is specified. This subnet will also // `AzureControlPlane.replica_placements` is specified. This subnet will also
// be used as default for `AzureControlPlane.endpoint_subnet_id` if // be used as default for `AzureControlPlane.endpoint_subnet_id` if
// `AzureControlPlane.endpoint_subnet_id` is not specified. Similarly it will // `AzureControlPlane.endpoint_subnet_id` is not specified. Similarly it will
@ -253,15 +272,18 @@ message AzureControlPlane {
AzureDiskTemplate main_volume = 5 [(google.api.field_behavior) = OPTIONAL]; AzureDiskTemplate main_volume = 5 [(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration related to application-layer secrets encryption. // Optional. Configuration related to application-layer secrets encryption.
AzureDatabaseEncryption database_encryption = 10 [(google.api.field_behavior) = OPTIONAL]; AzureDatabaseEncryption database_encryption = 10
[(google.api.field_behavior) = OPTIONAL];
// Optional. Proxy configuration for outbound HTTP(S) traffic. // Optional. Proxy configuration for outbound HTTP(S) traffic.
AzureProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL]; AzureProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration related to vm config encryption. // Optional. Configuration related to vm config encryption.
AzureConfigEncryption config_encryption = 14 [(google.api.field_behavior) = OPTIONAL]; AzureConfigEncryption config_encryption = 14
[(google.api.field_behavior) = OPTIONAL];
// Optional. A set of tags to apply to all underlying control plane Azure resources. // Optional. A set of tags to apply to all underlying control plane Azure
// resources.
map<string, string> tags = 7 [(google.api.field_behavior) = OPTIONAL]; map<string, string> tags = 7 [(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration for where to place the control plane replicas. // Optional. Configuration for where to place the control plane replicas.
@ -269,10 +291,11 @@ message AzureControlPlane {
// Up to three replica placement instances can be specified. If // Up to three replica placement instances can be specified. If
// replica_placements is set, the replica placement instances will be applied // replica_placements is set, the replica placement instances will be applied
// to the three control plane replicas as evenly as possible. // to the three control plane replicas as evenly as possible.
repeated ReplicaPlacement replica_placements = 13 [(google.api.field_behavior) = OPTIONAL]; repeated ReplicaPlacement replica_placements = 13
[(google.api.field_behavior) = OPTIONAL];
// Optional. The ARM ID of the subnet where the control plane load balancer is deployed. // Optional. The ARM ID of the subnet where the control plane load balancer is
// When unspecified, it defaults to AzureControlPlane.subnet_id. // deployed. When unspecified, it defaults to AzureControlPlane.subnet_id.
// //
// Example: // Example:
// "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid123" // "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid123"
@ -281,13 +304,13 @@ message AzureControlPlane {
// Configuration for the placement of a control plane replica. // Configuration for the placement of a control plane replica.
message ReplicaPlacement { message ReplicaPlacement {
// Required. For a given replica, the ARM ID of the subnet where the control plane VM is // Required. For a given replica, the ARM ID of the subnet where the control
// deployed. Make sure it's a subnet under the virtual network in the cluster // plane VM is deployed. Make sure it's a subnet under the virtual network in
// configuration. // the cluster configuration.
string subnet_id = 1 [(google.api.field_behavior) = REQUIRED]; string subnet_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. For a given replica, the Azure availability zone where to provision the // Required. For a given replica, the Azure availability zone where to
// control plane VM and the ETCD disk. // provision the control plane VM and the ETCD disk.
string azure_availability_zone = 2 [(google.api.field_behavior) = REQUIRED]; string azure_availability_zone = 2 [(google.api.field_behavior) = REQUIRED];
} }
@ -301,6 +324,10 @@ message AzureProxyConfig {
// The URL the of the proxy setting secret with its version. // The URL the of the proxy setting secret with its version.
// //
// The secret must be a JSON encoded proxy configuration
// as described in
// https://cloud.google.com/anthos/clusters/docs/multi-cloud/azure/how-to/use-a-proxy#create_a_proxy_configuration_file
//
// Secret ids are formatted as // Secret ids are formatted as
// `https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>`. // `https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>`.
string secret_id = 2; string secret_id = 2;
@ -325,13 +352,15 @@ message AzureDatabaseEncryption {
// Azure VM bootstrap secret is envelope encrypted with the provided key vault // Azure VM bootstrap secret is envelope encrypted with the provided key vault
// key. // key.
message AzureConfigEncryption { message AzureConfigEncryption {
// Required. The ARM ID of the Azure Key Vault key to encrypt / decrypt config data. // Required. The ARM ID of the Azure Key Vault key to encrypt / decrypt config
// data.
// //
// For example: // For example:
// `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.KeyVault/vaults/<key-vault-id>/keys/<key-name>` // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.KeyVault/vaults/<key-vault-id>/keys/<key-name>`
string key_id = 2 [(google.api.field_behavior) = REQUIRED]; string key_id = 2 [(google.api.field_behavior) = REQUIRED];
// Optional. RSA key of the Azure Key Vault public key to use for encrypting the data. // Optional. RSA key of the Azure Key Vault public key to use for encrypting
// the data.
// //
// This key must be formatted as a PEM-encoded SubjectPublicKeyInfo (RFC 5280) // This key must be formatted as a PEM-encoded SubjectPublicKeyInfo (RFC 5280)
// in ASN.1 DER form. The string must be comprised of a single PEM block of // in ASN.1 DER form. The string must be comprised of a single PEM block of
@ -351,9 +380,10 @@ message AzureDiskTemplate {
// `AzureClient` resources hold client authentication information needed by the // `AzureClient` resources hold client authentication information needed by the
// Anthos Multi-Cloud API to manage Azure resources on your Azure subscription. // Anthos Multi-Cloud API to manage Azure resources on your Azure subscription.
// //
// When an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] is created, an `AzureClient` resource needs to be // When an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] is
// provided and all operations on Azure resources associated to that cluster // created, an `AzureClient` resource needs to be provided and all operations on
// will authenticate to Azure services using the given client. // Azure resources associated to that cluster will authenticate to Azure
// services using the given client.
// //
// `AzureClient` resources are immutable and cannot be modified upon creation. // `AzureClient` resources are immutable and cannot be modified upon creation.
// //
@ -398,7 +428,8 @@ message AzureClient {
string uid = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; string uid = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this resource was created. // Output only. The time at which this resource was created.
google.protobuf.Timestamp create_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 6
[(google.api.field_behavior) = OUTPUT_ONLY];
} }
// Configuration related to the cluster RBAC settings. // Configuration related to the cluster RBAC settings.
@ -409,7 +440,8 @@ message AzureAuthorization {
// //
// For more info on RBAC, see // For more info on RBAC, see
// https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles // https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
repeated AzureClusterUser admin_users = 1 [(google.api.field_behavior) = REQUIRED]; repeated AzureClusterUser admin_users = 1
[(google.api.field_behavior) = REQUIRED];
} }
// Identities of a user-type subject for Azure clusters. // Identities of a user-type subject for Azure clusters.
@ -461,18 +493,20 @@ message AzureNodePool {
// see [Resource Names](https://cloud.google.com/apis/design/resource_names) // see [Resource Names](https://cloud.google.com/apis/design/resource_names)
string name = 1; string name = 1;
// Required. The Kubernetes version (e.g. `1.19.10-gke.1000`) running on this node pool. // Required. The Kubernetes version (e.g. `1.19.10-gke.1000`) running on this
// node pool.
string version = 2 [(google.api.field_behavior) = REQUIRED]; string version = 2 [(google.api.field_behavior) = REQUIRED];
// Required. The node configuration of the node pool. // Required. The node configuration of the node pool.
AzureNodeConfig config = 22 [(google.api.field_behavior) = REQUIRED]; AzureNodeConfig config = 22 [(google.api.field_behavior) = REQUIRED];
// Required. The ARM ID of the subnet where the node pool VMs run. Make sure it's a // Required. The ARM ID of the subnet where the node pool VMs run. Make sure
// subnet under the virtual network in the cluster configuration. // it's a subnet under the virtual network in the cluster configuration.
string subnet_id = 3 [(google.api.field_behavior) = REQUIRED]; string subnet_id = 3 [(google.api.field_behavior) = REQUIRED];
// Required. Autoscaler configuration for this node pool. // Required. Autoscaler configuration for this node pool.
AzureNodePoolAutoscaling autoscaling = 4 [(google.api.field_behavior) = REQUIRED]; AzureNodePoolAutoscaling autoscaling = 4
[(google.api.field_behavior) = REQUIRED];
// Output only. The current state of the node pool. // Output only. The current state of the node pool.
State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
@ -485,10 +519,12 @@ message AzureNodePool {
bool reconciling = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; bool reconciling = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this node pool was created. // Output only. The time at which this node pool was created.
google.protobuf.Timestamp create_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 10
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this node pool was last updated. // Output only. The time at which this node pool was last updated.
google.protobuf.Timestamp update_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp update_time = 11
[(google.api.field_behavior) = OUTPUT_ONLY];
// Allows clients to perform consistent read-modify-writes // Allows clients to perform consistent read-modify-writes
// through optimistic concurrency control. // through optimistic concurrency control.
@ -510,12 +546,17 @@ message AzureNodePool {
// Required. The constraint on the maximum number of pods that can be run // Required. The constraint on the maximum number of pods that can be run
// simultaneously on a node in the node pool. // simultaneously on a node in the node pool.
MaxPodsConstraint max_pods_constraint = 21 [(google.api.field_behavior) = REQUIRED]; MaxPodsConstraint max_pods_constraint = 21
[(google.api.field_behavior) = REQUIRED];
// Optional. The Azure availability zone of the nodes in this nodepool. // Optional. The Azure availability zone of the nodes in this nodepool.
// //
// When unspecified, it defaults to `1`. // When unspecified, it defaults to `1`.
string azure_availability_zone = 23 [(google.api.field_behavior) = OPTIONAL]; string azure_availability_zone = 23 [(google.api.field_behavior) = OPTIONAL];
// Output only. A set of errors found in the node pool.
repeated AzureNodePoolError errors = 29
[(google.api.field_behavior) = OUTPUT_ONLY];
} }
// Parameters that describe the configuration of all node machines // Parameters that describe the configuration of all node machines
@ -535,8 +576,8 @@ message AzureNodeConfig {
// When unspecified, it defaults to a 32-GiB Azure Disk. // When unspecified, it defaults to a 32-GiB Azure Disk.
AzureDiskTemplate root_volume = 2 [(google.api.field_behavior) = OPTIONAL]; AzureDiskTemplate root_volume = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A set of tags to apply to all underlying Azure resources for this node // Optional. A set of tags to apply to all underlying Azure resources for this
// pool. This currently only includes Virtual Machine Scale Sets. // node pool. This currently only includes Virtual Machine Scale Sets.
// //
// Specify at most 50 pairs containing alphanumerics, spaces, and symbols // Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to // (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to
@ -557,7 +598,8 @@ message AzureNodeConfig {
AzureProxyConfig proxy_config = 9 [(google.api.field_behavior) = OPTIONAL]; AzureProxyConfig proxy_config = 9 [(google.api.field_behavior) = OPTIONAL];
// Optional. Configuration related to vm config encryption. // Optional. Configuration related to vm config encryption.
AzureConfigEncryption config_encryption = 12 [(google.api.field_behavior) = OPTIONAL]; AzureConfigEncryption config_encryption = 12
[(google.api.field_behavior) = OPTIONAL];
// Optional. The initial taints assigned to nodes of this node pool. // Optional. The initial taints assigned to nodes of this node pool.
repeated NodeTaint taints = 10 [(google.api.field_behavior) = OPTIONAL]; repeated NodeTaint taints = 10 [(google.api.field_behavior) = OPTIONAL];
@ -573,12 +615,12 @@ message AzureNodeConfig {
// The Kubernetes cluster autoscaler will automatically adjust the // The Kubernetes cluster autoscaler will automatically adjust the
// size of the node pool based on the cluster load. // size of the node pool based on the cluster load.
message AzureNodePoolAutoscaling { message AzureNodePoolAutoscaling {
// Required. Minimum number of nodes in the node pool. Must be greater than or equal to // Required. Minimum number of nodes in the node pool. Must be greater than or
// 1 and less than or equal to max_node_count. // equal to 1 and less than or equal to max_node_count.
int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED]; int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED];
// Required. Maximum number of nodes in the node pool. Must be greater than or equal to // Required. Maximum number of nodes in the node pool. Must be greater than or
// min_node_count and less than or equal to 50. // equal to min_node_count and less than or equal to 50.
int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED]; int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED];
} }
@ -614,9 +656,9 @@ message AzureK8sVersionInfo {
// SSH configuration for Azure resources. // SSH configuration for Azure resources.
message AzureSshConfig { message AzureSshConfig {
// Required. The SSH public key data for VMs managed by Anthos. This accepts the // Required. The SSH public key data for VMs managed by Anthos. This accepts
// authorized_keys file format used in OpenSSH according to the sshd(8) manual // the authorized_keys file format used in OpenSSH according to the sshd(8)
// page. // manual page.
string authorized_key = 1 [(google.api.field_behavior) = REQUIRED]; string authorized_key = 1 [(google.api.field_behavior) = REQUIRED];
} }
@ -625,8 +667,22 @@ message AzureSshConfig {
// The values could change and be empty, depending on the state of the cluster. // The values could change and be empty, depending on the state of the cluster.
message AzureClusterResources { message AzureClusterResources {
// Output only. The ARM ID of the cluster network security group. // Output only. The ARM ID of the cluster network security group.
string network_security_group_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; string network_security_group_id = 1
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The ARM ID of the control plane application security group. // Output only. The ARM ID of the control plane application security group.
string control_plane_application_security_group_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; string control_plane_application_security_group_id = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// AzureClusterError describes errors found on Azure clusters.
message AzureClusterError {
// Human-friendly description of the error.
string message = 1;
}
// AzureNodePoolError describes errors found on Azure node pools.
message AzureNodePoolError {
// Human-friendly description of the error.
string message = 1;
} }

@ -37,10 +37,11 @@ option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
// to create and manage Anthos clusters that run on Azure infrastructure. // to create and manage Anthos clusters that run on Azure infrastructure.
service AzureClusters { service AzureClusters {
option (google.api.default_host) = "gkemulticloud.googleapis.com"; option (google.api.default_host) = "gkemulticloud.googleapis.com";
option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; option (google.api.oauth_scopes) =
"https://www.googleapis.com/auth/cloud-platform";
// Creates a new [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource on a given Google Cloud project // Creates a new [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// and region. // resource on a given Google Cloud project and region.
// //
// `AzureClient` resources hold client authentication // `AzureClient` resources hold client authentication
// information needed by the Anthos Multicloud API to manage Azure resources // information needed by the Anthos Multicloud API to manage Azure resources
@ -49,19 +50,22 @@ service AzureClusters {
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc CreateAzureClient(CreateAzureClientRequest) returns (google.longrunning.Operation) { rpc CreateAzureClient(CreateAzureClientRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*}/azureClients" post: "/v1/{parent=projects/*/locations/*}/azureClients"
body: "azure_client" body: "azure_client"
}; };
option (google.api.method_signature) = "parent,azure_client,azure_client_id"; option (google.api.method_signature) =
"parent,azure_client,azure_client_id";
option (google.longrunning.operation_info) = { option (google.longrunning.operation_info) = {
response_type: "AzureClient" response_type: "AzureClient"
metadata_type: "OperationMetadata" metadata_type: "OperationMetadata"
}; };
} }
// Describes a specific [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource. // Describes a specific
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource.
rpc GetAzureClient(GetAzureClientRequest) returns (AzureClient) { rpc GetAzureClient(GetAzureClientRequest) returns (AzureClient) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClients/*}" get: "/v1/{name=projects/*/locations/*/azureClients/*}"
@ -69,16 +73,18 @@ service AzureClusters {
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
// Lists all [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resources on a given Google Cloud project and // Lists all [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// region. // resources on a given Google Cloud project and region.
rpc ListAzureClients(ListAzureClientsRequest) returns (ListAzureClientsResponse) { rpc ListAzureClients(ListAzureClientsRequest)
returns (ListAzureClientsResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/azureClients" get: "/v1/{parent=projects/*/locations/*}/azureClients"
}; };
option (google.api.method_signature) = "parent"; option (google.api.method_signature) = "parent";
} }
// Deletes a specific [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource. // Deletes a specific [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// resource.
// //
// If the client is used by one or more clusters, deletion will // If the client is used by one or more clusters, deletion will
// fail and a `FAILED_PRECONDITION` error will be returned. // fail and a `FAILED_PRECONDITION` error will be returned.
@ -86,7 +92,8 @@ service AzureClusters {
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc DeleteAzureClient(DeleteAzureClientRequest) returns (google.longrunning.Operation) { rpc DeleteAzureClient(DeleteAzureClientRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/azureClients/*}" delete: "/v1/{name=projects/*/locations/*/azureClients/*}"
}; };
@ -97,17 +104,20 @@ service AzureClusters {
}; };
} }
// Creates a new [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource on a given GCP project and region. // Creates a new [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resource on a given GCP project and region.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc CreateAzureCluster(CreateAzureClusterRequest) returns (google.longrunning.Operation) { rpc CreateAzureCluster(CreateAzureClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*}/azureClusters" post: "/v1/{parent=projects/*/locations/*}/azureClusters"
body: "azure_cluster" body: "azure_cluster"
}; };
option (google.api.method_signature) = "parent,azure_cluster,azure_cluster_id"; option (google.api.method_signature) =
"parent,azure_cluster,azure_cluster_id";
option (google.longrunning.operation_info) = { option (google.longrunning.operation_info) = {
response_type: "AzureCluster" response_type: "AzureCluster"
metadata_type: "OperationMetadata" metadata_type: "OperationMetadata"
@ -115,7 +125,8 @@ service AzureClusters {
} }
// Updates an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]. // Updates an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
rpc UpdateAzureCluster(UpdateAzureClusterRequest) returns (google.longrunning.Operation) { rpc UpdateAzureCluster(UpdateAzureClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
patch: "/v1/{azure_cluster.name=projects/*/locations/*/azureClusters/*}" patch: "/v1/{azure_cluster.name=projects/*/locations/*/azureClusters/*}"
body: "azure_cluster" body: "azure_cluster"
@ -127,7 +138,8 @@ service AzureClusters {
}; };
} }
// Describes a specific [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource. // Describes a specific
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
rpc GetAzureCluster(GetAzureClusterRequest) returns (AzureCluster) { rpc GetAzureCluster(GetAzureClusterRequest) returns (AzureCluster) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClusters/*}" get: "/v1/{name=projects/*/locations/*/azureClusters/*}"
@ -135,24 +147,27 @@ service AzureClusters {
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
// Lists all [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resources on a given Google Cloud project and // Lists all [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// region. // resources on a given Google Cloud project and region.
rpc ListAzureClusters(ListAzureClustersRequest) returns (ListAzureClustersResponse) { rpc ListAzureClusters(ListAzureClustersRequest)
returns (ListAzureClustersResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/azureClusters" get: "/v1/{parent=projects/*/locations/*}/azureClusters"
}; };
option (google.api.method_signature) = "parent"; option (google.api.method_signature) = "parent";
} }
// Deletes a specific [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource. // Deletes a specific
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
// //
// Fails if the cluster has one or more associated [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] // Fails if the cluster has one or more associated
// resources. // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc DeleteAzureCluster(DeleteAzureClusterRequest) returns (google.longrunning.Operation) { rpc DeleteAzureCluster(DeleteAzureClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/azureClusters/*}" delete: "/v1/{name=projects/*/locations/*/azureClusters/*}"
}; };
@ -165,23 +180,28 @@ service AzureClusters {
// Generates a short-lived access token to authenticate to a given // Generates a short-lived access token to authenticate to a given
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource. // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
rpc GenerateAzureAccessToken(GenerateAzureAccessTokenRequest) returns (GenerateAzureAccessTokenResponse) { rpc GenerateAzureAccessToken(GenerateAzureAccessTokenRequest)
returns (GenerateAzureAccessTokenResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}:generateAzureAccessToken" get: "/v1/{azure_cluster=projects/*/locations/*/azureClusters/*}:generateAzureAccessToken"
}; };
} }
// Creates a new [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool], attached to a given [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]. // Creates a new [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool],
// attached to a given
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc CreateAzureNodePool(CreateAzureNodePoolRequest) returns (google.longrunning.Operation) { rpc CreateAzureNodePool(CreateAzureNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
post: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools" post: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
body: "azure_node_pool" body: "azure_node_pool"
}; };
option (google.api.method_signature) = "parent,azure_node_pool,azure_node_pool_id"; option (google.api.method_signature) =
"parent,azure_node_pool,azure_node_pool_id";
option (google.longrunning.operation_info) = { option (google.longrunning.operation_info) = {
response_type: "AzureNodePool" response_type: "AzureNodePool"
metadata_type: "OperationMetadata" metadata_type: "OperationMetadata"
@ -189,7 +209,8 @@ service AzureClusters {
} }
// Updates an [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]. // Updates an [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool].
rpc UpdateAzureNodePool(UpdateAzureNodePoolRequest) returns (google.longrunning.Operation) { rpc UpdateAzureNodePool(UpdateAzureNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
patch: "/v1/{azure_node_pool.name=projects/*/locations/*/azureClusters/*/azureNodePools/*}" patch: "/v1/{azure_node_pool.name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
body: "azure_node_pool" body: "azure_node_pool"
@ -201,7 +222,8 @@ service AzureClusters {
}; };
} }
// Describes a specific [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource. // Describes a specific
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource.
rpc GetAzureNodePool(GetAzureNodePoolRequest) returns (AzureNodePool) { rpc GetAzureNodePool(GetAzureNodePoolRequest) returns (AzureNodePool) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}" get: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
@ -209,20 +231,25 @@ service AzureClusters {
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
// Lists all [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources on a given [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]. // Lists all [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
rpc ListAzureNodePools(ListAzureNodePoolsRequest) returns (ListAzureNodePoolsResponse) { // resources on a given
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
rpc ListAzureNodePools(ListAzureNodePoolsRequest)
returns (ListAzureNodePoolsResponse) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools" get: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
}; };
option (google.api.method_signature) = "parent"; option (google.api.method_signature) = "parent";
} }
// Deletes a specific [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource. // Deletes a specific
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource.
// //
// If successful, the response contains a newly created // If successful, the response contains a newly created
// [Operation][google.longrunning.Operation] resource that can be // [Operation][google.longrunning.Operation] resource that can be
// described to track the status of the operation. // described to track the status of the operation.
rpc DeleteAzureNodePool(DeleteAzureNodePoolRequest) returns (google.longrunning.Operation) { rpc DeleteAzureNodePool(DeleteAzureNodePoolRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = { option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}" delete: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
}; };
@ -235,7 +262,8 @@ service AzureClusters {
// Returns information, such as supported Azure regions and Kubernetes // Returns information, such as supported Azure regions and Kubernetes
// versions, on a given Google Cloud location. // versions, on a given Google Cloud location.
rpc GetAzureServerConfig(GetAzureServerConfigRequest) returns (AzureServerConfig) { rpc GetAzureServerConfig(GetAzureServerConfigRequest)
returns (AzureServerConfig) {
option (google.api.http) = { option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureServerConfig}" get: "/v1/{name=projects/*/locations/*/azureServerConfig}"
}; };
@ -245,8 +273,9 @@ service AzureClusters {
// Request message for `AzureClusters.CreateAzureCluster` method. // Request message for `AzureClusters.CreateAzureCluster` method.
message CreateAzureClusterRequest { message CreateAzureClusterRequest {
// Required. The parent location where this [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource // Required. The parent location where this
// will be created. // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource will be
// created.
// //
// Location names are formatted as `projects/<project-id>/locations/<region>`. // Location names are formatted as `projects/<project-id>/locations/<region>`.
// //
@ -259,17 +288,19 @@ message CreateAzureClusterRequest {
} }
]; ];
// Required. The specification of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to create. // Required. The specification of the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to create.
AzureCluster azure_cluster = 2 [(google.api.field_behavior) = REQUIRED]; AzureCluster azure_cluster = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the parent // Required. A client provided ID the resource. Must be unique within the
// resource. // parent resource.
// //
// The provided ID will be part of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] // The provided ID will be part of the
// resource name formatted as // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource name
// formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
// //
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 40 characters. // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string azure_cluster_id = 3 [(google.api.field_behavior) = REQUIRED]; string azure_cluster_id = 3 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the cluster. // If set, only validate the request, but do not actually create the cluster.
@ -278,7 +309,8 @@ message CreateAzureClusterRequest {
// Request message for `AzureClusters.UpdateAzureCluster` method. // Request message for `AzureClusters.UpdateAzureCluster` method.
message UpdateAzureClusterRequest { message UpdateAzureClusterRequest {
// Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to update. // Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resource to update.
AzureCluster azure_cluster = 1 [(google.api.field_behavior) = REQUIRED]; AzureCluster azure_cluster = 1 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually update the cluster. // If set, only validate the request, but do not actually update the cluster.
@ -289,19 +321,27 @@ message UpdateAzureClusterRequest {
// fields from [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]: // fields from [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]:
// //
// * `description`. // * `description`.
// * `annotations`.
// * `azureClient`. // * `azureClient`.
// * `control_plane.version`. // * `control_plane.version`.
// * `control_plane.vm_size`. // * `control_plane.vm_size`.
// * `annotations`.
// * `authorization.admin_users`. // * `authorization.admin_users`.
// * `control_plane.root_volume.size_gib`. // * `control_plane.root_volume.size_gib`.
// * `logging_config` // * `control_plane.proxy_config`.
google.protobuf.FieldMask update_mask = 4 [(google.api.field_behavior) = REQUIRED]; // * `control_plane.proxy_config.resource_group_id`.
// * `control_plane.proxy_config.secret_id`.
// * `control_plane.ssh_config.authorized_key`.
// * `logging_config.component_config.enable_components`
// * `monitoring_config.managed_prometheus_config.enabled`.
google.protobuf.FieldMask update_mask = 4
[(google.api.field_behavior) = REQUIRED];
} }
// Request message for `AzureClusters.GetAzureCluster` method. // Request message for `AzureClusters.GetAzureCluster` method.
message GetAzureClusterRequest { message GetAzureClusterRequest {
// Required. The name of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to describe. // Required. The name of the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to
// describe.
// //
// `AzureCluster` names are formatted as // `AzureCluster` names are formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
@ -337,19 +377,20 @@ message ListAzureClustersRequest {
// If not specified, a default value of 50 will be used by the service. // If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list // Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's // and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClustersResponse.next_page_token] to determine if // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClustersResponse.next_page_token]
// there are more instances left to be queried. // to determine if there are more instances left to be queried.
int32 page_size = 2; int32 page_size = 2;
// The `nextPageToken` value returned from a previous // The `nextPageToken` value returned from a previous
// [azureClusters.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClusters] request, if any. // [azureClusters.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClusters]
// request, if any.
string page_token = 3; string page_token = 3;
} }
// Response message for `AzureClusters.ListAzureClusters` method. // Response message for `AzureClusters.ListAzureClusters` method.
message ListAzureClustersResponse { message ListAzureClustersResponse {
// A list of [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resources in the specified GCP // A list of [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// project and region region. // resources in the specified GCP project and region region.
repeated AzureCluster azure_clusters = 1; repeated AzureCluster azure_clusters = 1;
// Token to retrieve the next page of results, or empty if there are no more // Token to retrieve the next page of results, or empty if there are no more
@ -359,7 +400,8 @@ message ListAzureClustersResponse {
// Request message for `Clusters.DeleteAzureCluster` method. // Request message for `Clusters.DeleteAzureCluster` method.
message DeleteAzureClusterRequest { message DeleteAzureClusterRequest {
// Required. The resource name the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to delete. // Required. The resource name the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] to delete.
// //
// `AzureCluster` names are formatted as // `AzureCluster` names are formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>`.
@ -373,9 +415,10 @@ message DeleteAzureClusterRequest {
} }
]; ];
// If set to true, and the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource is not found, // If set to true, and the
// the request will succeed but no action will be taken on the server and a // [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource is not
// completed [Operation][google.longrunning.Operation] will be returned. // found, the request will succeed but no action will be taken on the server
// and a completed [Operation][google.longrunning.Operation] will be returned.
// //
// Useful for idempotent deletion. // Useful for idempotent deletion.
bool allow_missing = 2; bool allow_missing = 2;
@ -383,7 +426,8 @@ message DeleteAzureClusterRequest {
// If set, only validate the request, but do not actually delete the resource. // If set, only validate the request, but do not actually delete the resource.
bool validate_only = 3; bool validate_only = 3;
// The current etag of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]. // The current etag of the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
// //
// Allows clients to perform deletions through optimistic concurrency control. // Allows clients to perform deletions through optimistic concurrency control.
// //
@ -394,7 +438,8 @@ message DeleteAzureClusterRequest {
// Response message for `AzureClusters.CreateAzureNodePool` method. // Response message for `AzureClusters.CreateAzureNodePool` method.
message CreateAzureNodePoolRequest { message CreateAzureNodePoolRequest {
// Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource where this node pool will be created. // Required. The [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resource where this node pool will be created.
// //
// Location names are formatted as `projects/<project-id>/locations/<region>`. // Location names are formatted as `projects/<project-id>/locations/<region>`.
// //
@ -407,17 +452,19 @@ message CreateAzureNodePoolRequest {
} }
]; ];
// Required. The specification of the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to create. // Required. The specification of the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to create.
AzureNodePool azure_node_pool = 2 [(google.api.field_behavior) = REQUIRED]; AzureNodePool azure_node_pool = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the parent // Required. A client provided ID the resource. Must be unique within the
// resource. // parent resource.
// //
// The provided ID will be part of the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] // The provided ID will be part of the
// resource name formatted as // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource name
// formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
// //
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 40 characters. // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string azure_node_pool_id = 3 [(google.api.field_behavior) = REQUIRED]; string azure_node_pool_id = 3 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the node // If set, only validate the request, but do not actually create the node
@ -427,7 +474,8 @@ message CreateAzureNodePoolRequest {
// Request message for `AzureClusters.UpdateAzureNodePool` method. // Request message for `AzureClusters.UpdateAzureNodePool` method.
message UpdateAzureNodePoolRequest { message UpdateAzureNodePoolRequest {
// Required. The [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource to update. // Required. The [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
// resource to update.
AzureNodePool azure_node_pool = 1 [(google.api.field_behavior) = REQUIRED]; AzureNodePool azure_node_pool = 1 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but don't actually update the node pool. // If set, only validate the request, but don't actually update the node pool.
@ -441,13 +489,16 @@ message UpdateAzureNodePoolRequest {
// * `version`. // * `version`.
// * `autoscaling.min_node_count`. // * `autoscaling.min_node_count`.
// * `autoscaling.max_node_count`. // * `autoscaling.max_node_count`.
// * `config.vm_size`. // * `config.ssh_config.authorized_key`.
google.protobuf.FieldMask update_mask = 3 [(google.api.field_behavior) = REQUIRED]; google.protobuf.FieldMask update_mask = 3
[(google.api.field_behavior) = REQUIRED];
} }
// Request message for `AzureClusters.GetAzureNodePool` method. // Request message for `AzureClusters.GetAzureNodePool` method.
message GetAzureNodePoolRequest { message GetAzureNodePoolRequest {
// Required. The name of the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource to describe. // Required. The name of the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource to
// describe.
// //
// `AzureNodePool` names are formatted as // `AzureNodePool` names are formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
@ -484,18 +535,20 @@ message ListAzureNodePoolsRequest {
// If not specified, a default value of 50 will be used by the service. // If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list // Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's // and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureNodePoolsResponse.next_page_token] to determine if // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureNodePoolsResponse.next_page_token]
// there are more instances left to be queried. // to determine if there are more instances left to be queried.
int32 page_size = 2; int32 page_size = 2;
// The `nextPageToken` value returned from a previous // The `nextPageToken` value returned from a previous
// [azureNodePools.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureNodePools] request, if any. // [azureNodePools.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureNodePools]
// request, if any.
string page_token = 3; string page_token = 3;
} }
// Response message for `AzureClusters.ListAzureNodePools` method. // Response message for `AzureClusters.ListAzureNodePools` method.
message ListAzureNodePoolsResponse { message ListAzureNodePoolsResponse {
// A list of [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources in the specified `AzureCluster`. // A list of [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
// resources in the specified `AzureCluster`.
repeated AzureNodePool azure_node_pools = 1; repeated AzureNodePool azure_node_pools = 1;
// Token to retrieve the next page of results, or empty if there are no more // Token to retrieve the next page of results, or empty if there are no more
@ -503,9 +556,10 @@ message ListAzureNodePoolsResponse {
string next_page_token = 2; string next_page_token = 2;
} }
// Delete message for `AzureClusters.DeleteNodePool` method. // Delete message for `AzureClusters.DeleteAzureNodePool` method.
message DeleteAzureNodePoolRequest { message DeleteAzureNodePoolRequest {
// Required. The resource name the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to delete. // Required. The resource name the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] to delete.
// //
// `AzureNodePool` names are formatted as // `AzureNodePool` names are formatted as
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`. // `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
@ -523,14 +577,17 @@ message DeleteAzureNodePoolRequest {
// pool. // pool.
bool validate_only = 2; bool validate_only = 2;
// If set to true, and the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource is not found, // If set to true, and the
// the request will succeed but no action will be taken on the server and a // [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource is
// completed [Operation][google.longrunning.Operation] will be returned. // not found, the request will succeed but no action will be taken on the
// server and a completed [Operation][google.longrunning.Operation] will be
// returned.
// //
// Useful for idempotent deletion. // Useful for idempotent deletion.
bool allow_missing = 3; bool allow_missing = 3;
// The current ETag of the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]. // The current ETag of the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool].
// //
// Allows clients to perform deletions through optimistic concurrency control. // Allows clients to perform deletions through optimistic concurrency control.
// //
@ -541,7 +598,9 @@ message DeleteAzureNodePoolRequest {
// GetAzureServerConfigRequest gets the server config of GKE cluster on Azure. // GetAzureServerConfigRequest gets the server config of GKE cluster on Azure.
message GetAzureServerConfigRequest { message GetAzureServerConfigRequest {
// Required. The name of the [AzureServerConfig][google.cloud.gkemulticloud.v1.AzureServerConfig] resource to describe. // Required. The name of the
// [AzureServerConfig][google.cloud.gkemulticloud.v1.AzureServerConfig]
// resource to describe.
// //
// `AzureServerConfig` names are formatted as // `AzureServerConfig` names are formatted as
// `projects/<project-id>/locations/<region>/azureServerConfig`. // `projects/<project-id>/locations/<region>/azureServerConfig`.
@ -558,8 +617,9 @@ message GetAzureServerConfigRequest {
// Request message for `AzureClusters.CreateAzureClient` method. // Request message for `AzureClusters.CreateAzureClient` method.
message CreateAzureClientRequest { message CreateAzureClientRequest {
// Required. The parent location where this [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource // Required. The parent location where this
// will be created. // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource will be
// created.
// //
// Location names are formatted as `projects/<project-id>/locations/<region>`. // Location names are formatted as `projects/<project-id>/locations/<region>`.
// //
@ -572,17 +632,19 @@ message CreateAzureClientRequest {
} }
]; ];
// Required. The specification of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to create. // Required. The specification of the
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to create.
AzureClient azure_client = 2 [(google.api.field_behavior) = REQUIRED]; AzureClient azure_client = 2 [(google.api.field_behavior) = REQUIRED];
// Required. A client provided ID the resource. Must be unique within the parent // Required. A client provided ID the resource. Must be unique within the
// resource. // parent resource.
// //
// The provided ID will be part of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] // The provided ID will be part of the
// resource name formatted as // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource name
// formatted as
// `projects/<project-id>/locations/<region>/azureClients/<client-id>`. // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
// //
// Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 40 characters. // Valid characters are `/[a-z][0-9]-/`. Cannot be longer than 63 characters.
string azure_client_id = 4 [(google.api.field_behavior) = REQUIRED]; string azure_client_id = 4 [(google.api.field_behavior) = REQUIRED];
// If set, only validate the request, but do not actually create the client. // If set, only validate the request, but do not actually create the client.
@ -591,9 +653,12 @@ message CreateAzureClientRequest {
// Request message for `AzureClusters.GetAzureClient` method. // Request message for `AzureClusters.GetAzureClient` method.
message GetAzureClientRequest { message GetAzureClientRequest {
// Required. The name of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource to describe. // Required. The name of the
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource to
// describe.
// //
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are formatted as // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are
// formatted as
// `projects/<project-id>/locations/<region>/azureClients/<client-id>`. // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
// //
// See [Resource Names](https://cloud.google.com/apis/design/resource_names) // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
@ -627,19 +692,20 @@ message ListAzureClientsRequest {
// If not specified, a default value of 50 will be used by the service. // If not specified, a default value of 50 will be used by the service.
// Regardless of the pageSize value, the response can include a partial list // Regardless of the pageSize value, the response can include a partial list
// and a caller should only rely on response's // and a caller should only rely on response's
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClientsResponse.next_page_token] to determine if // [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClientsResponse.next_page_token]
// there are more instances left to be queried. // to determine if there are more instances left to be queried.
int32 page_size = 2; int32 page_size = 2;
// The `nextPageToken` value returned from a previous // The `nextPageToken` value returned from a previous
// [azureClients.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClients] request, if any. // [azureClients.list][google.cloud.gkemulticloud.v1.AzureClusters.ListAzureClients]
// request, if any.
string page_token = 3; string page_token = 3;
} }
// Response message for `AzureClusters.ListAzureClients` method. // Response message for `AzureClusters.ListAzureClients` method.
message ListAzureClientsResponse { message ListAzureClientsResponse {
// A list of [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resources in the specified Google Cloud // A list of [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// project and region region. // resources in the specified Google Cloud project and region region.
repeated AzureClient azure_clients = 1; repeated AzureClient azure_clients = 1;
// Token to retrieve the next page of results, or empty if there are no more // Token to retrieve the next page of results, or empty if there are no more
@ -649,9 +715,11 @@ message ListAzureClientsResponse {
// Request message for `AzureClusters.DeleteAzureClient` method. // Request message for `AzureClusters.DeleteAzureClient` method.
message DeleteAzureClientRequest { message DeleteAzureClientRequest {
// Required. The resource name the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to delete. // Required. The resource name the
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] to delete.
// //
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are formatted as // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] names are
// formatted as
// `projects/<project-id>/locations/<region>/azureClients/<client-id>`. // `projects/<project-id>/locations/<region>/azureClients/<client-id>`.
// //
// See [Resource Names](https://cloud.google.com/apis/design/resource_names) // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
@ -663,9 +731,10 @@ message DeleteAzureClientRequest {
} }
]; ];
// If set to true, and the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource is not found, // If set to true, and the
// the request will succeed but no action will be taken on the server and a // [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource is not
// completed [Operation][google.longrunning.Operation] will be returned. // found, the request will succeed but no action will be taken on the server
// and a completed [Operation][google.longrunning.Operation] will be returned.
// //
// Useful for idempotent deletion. // Useful for idempotent deletion.
bool allow_missing = 2; bool allow_missing = 2;
@ -676,7 +745,9 @@ message DeleteAzureClientRequest {
// Request message for `AzureClusters.GenerateAzureAccessToken` method. // Request message for `AzureClusters.GenerateAzureAccessToken` method.
message GenerateAzureAccessTokenRequest { message GenerateAzureAccessTokenRequest {
// Required. The name of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to authenticate to. // Required. The name of the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource to
// authenticate to.
// //
// `AzureCluster` names are formatted as // `AzureCluster` names are formatted as
// `projects/<project-id>/locations/<region>/AzureClusters/<cluster-id>`. // `projects/<project-id>/locations/<region>/AzureClusters/<cluster-id>`.
@ -697,5 +768,6 @@ message GenerateAzureAccessTokenResponse {
string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Timestamp at which the token will expire. // Output only. Timestamp at which the token will expire.
google.protobuf.Timestamp expiration_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp expiration_time = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
} }

@ -49,10 +49,12 @@ message MaxPodsConstraint {
// Metadata about a long-running operation. // Metadata about a long-running operation.
message OperationMetadata { message OperationMetadata {
// Output only. The time at which this operation was created. // Output only. The time at which this operation was created.
google.protobuf.Timestamp create_time = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp create_time = 1
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this operation was completed. // Output only. The time at which this operation was completed.
google.protobuf.Timestamp end_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; google.protobuf.Timestamp end_time = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The name of the resource associated to this operation. // Output only. The name of the resource associated to this operation.
string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
@ -60,8 +62,20 @@ message OperationMetadata {
// Output only. Human-readable status of the operation, if any. // Output only. Human-readable status of the operation, if any.
string status_detail = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; string status_detail = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Human-readable status of any error that occurred during the operation. // Output only. Human-readable status of any error that occurred during the
// operation.
string error_detail = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; string error_detail = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The verb associated with the API method which triggered this
// operation. Possible values are "create", "delete", "update" and "import".
string verb = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Identifies whether it has been requested cancellation
// for the operation. Operations that have successfully been cancelled
// have [Operation.error][] value with a
// [google.rpc.Status.code][google.rpc.Status.code] of 1, corresponding to
// `Code.CANCELLED`.
bool requested_cancellation = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
} }
// The taint content for the node taint. // The taint content for the node taint.
@ -107,13 +121,15 @@ message NodeTaint {
// Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for // Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
// more details on Anthos multi-cluster capabilities using Fleets. // more details on Anthos multi-cluster capabilities using Fleets.
message Fleet { message Fleet {
// Required. The name of the Fleet host project where this cluster will be registered. // Required. The name of the Fleet host project where this cluster will be
// registered.
// //
// Project names are formatted as // Project names are formatted as
// `projects/<project-number>`. // `projects/<project-number>`.
string project = 1 [(google.api.field_behavior) = REQUIRED]; string project = 1 [(google.api.field_behavior) = REQUIRED];
// Output only. The name of the managed Hub Membership resource associated to this cluster. // Output only. The name of the managed Hub Membership resource associated to
// this cluster.
// //
// Membership names are formatted as // Membership names are formatted as
// `projects/<project-number>/locations/global/membership/<cluster-id>`. // `projects/<project-number>/locations/global/membership/<cluster-id>`.
@ -143,3 +159,16 @@ message LoggingComponentConfig {
// The components to be enabled. // The components to be enabled.
repeated Component enable_components = 1; repeated Component enable_components = 1;
} }
// Parameters that describe the Monitoring configuration in a cluster.
message MonitoringConfig {
// Enable Google Cloud Managed Service for Prometheus in the cluster.
ManagedPrometheusConfig managed_prometheus_config = 2;
}
// ManagedPrometheusConfig defines the configuration for
// Google Cloud Managed Service for Prometheus.
message ManagedPrometheusConfig {
// Enable Managed Collection.
bool enabled = 1;
}

@ -56,6 +56,22 @@
{ {
"service": "google.cloud.gkemulticloud.v1.AzureClusters", "service": "google.cloud.gkemulticloud.v1.AzureClusters",
"method": "GetAzureServerConfig" "method": "GetAzureServerConfig"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "GetAttachedCluster"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "ListAttachedClusters"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "GetAttachedServerConfig"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "GenerateAttachedClusterInstallManifest"
} }
], ],
"timeout": "60s", "timeout": "60s",
@ -124,6 +140,22 @@
{ {
"service": "google.cloud.gkemulticloud.v1.AzureClusters", "service": "google.cloud.gkemulticloud.v1.AzureClusters",
"method": "UpdateAzureNodePool" "method": "UpdateAzureNodePool"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "CreateAttachedCluster"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "ImportAttachedCluster"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "UpdateAttachedCluster"
},
{
"service": "google.cloud.gkemulticloud.v1.AttachedClusters",
"method": "DeleteAttachedCluster"
} }
], ],
"timeout": "60s" "timeout": "60s"

@ -4,8 +4,10 @@ name: gkemulticloud.googleapis.com
title: Anthos Multi-Cloud API title: Anthos Multi-Cloud API
apis: apis:
- name: google.cloud.gkemulticloud.v1.AttachedClusters
- name: google.cloud.gkemulticloud.v1.AwsClusters - name: google.cloud.gkemulticloud.v1.AwsClusters
- name: google.cloud.gkemulticloud.v1.AzureClusters - name: google.cloud.gkemulticloud.v1.AzureClusters
- name: google.longrunning.Operations
types: types:
- name: google.cloud.gkemulticloud.v1.OperationMetadata - name: google.cloud.gkemulticloud.v1.OperationMetadata
@ -24,6 +26,8 @@ documentation:
backend: backend:
rules: rules:
- selector: 'google.cloud.gkemulticloud.v1.AttachedClusters.*'
deadline: 10.0
- selector: 'google.cloud.gkemulticloud.v1.AwsClusters.*' - selector: 'google.cloud.gkemulticloud.v1.AwsClusters.*'
deadline: 10.0 deadline: 10.0
- selector: 'google.cloud.gkemulticloud.v1.AzureClusters.*' - selector: 'google.cloud.gkemulticloud.v1.AzureClusters.*'
@ -45,6 +49,10 @@ http:
authentication: authentication:
rules: rules:
- selector: 'google.cloud.gkemulticloud.v1.AttachedClusters.*'
oauth:
canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform
- selector: 'google.cloud.gkemulticloud.v1.AwsClusters.*' - selector: 'google.cloud.gkemulticloud.v1.AwsClusters.*'
oauth: oauth:
canonical_scopes: |- canonical_scopes: |-
@ -57,3 +65,6 @@ authentication:
oauth: oauth:
canonical_scopes: |- canonical_scopes: |-
https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/cloud-platform
publishing:
organization: CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED

Loading…
Cancel
Save