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(
name = "gkemulticloud_proto",
srcs = [
"attached_resources.proto",
"attached_service.proto",
"aws_resources.proto",
"aws_service.proto",
"azure_resources.proto",
@ -89,6 +91,8 @@ java_gapic_library(
java_gapic_test(
name = "gkemulticloud_java_gapic_test_suite",
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.AwsClustersClientTest",
"com.google.cloud.gkemulticloud.v1.AzureClustersClientHttpJsonTest",
@ -182,13 +186,15 @@ py_gapic_library(
srcs = [":gkemulticloud_proto"],
grpc_service_config = "gkemulticloud_grpc_service_config.json",
opt_args = [
"warehouse-package-name=google-cloud-gke-multicloud",
"python-gapic-namespace=google.cloud",
"python-gapic-name=gke_multicloud",
"python-gapic-namespace=google.cloud",
"warehouse-package-name=google-cloud-gke-multicloud",
],
rest_numeric_enums = False,
service_yaml = "gkemulticloud_v1.yaml",
transport = "grpc",
deps = [
],
)
py_test(
@ -319,6 +325,7 @@ ruby_cloud_gapic_library(
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_title = "Anthos Multi-Cloud V1",
service_yaml = "gkemulticloud_v1.yaml",
deps = [
":gkemulticloud_ruby_grpc",
":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];
// 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.
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
// through optimistic concurrency control.
@ -131,16 +133,26 @@ message AwsCluster {
map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL];
// 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.
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.
Fleet fleet = 18 [(google.api.field_behavior) = OPTIONAL];
// Required. Fleet configuration.
Fleet fleet = 18 [(google.api.field_behavior) = REQUIRED];
// Optional. Logging configuration for this cluster.
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.
@ -171,10 +183,11 @@ message AwsControlPlane {
// Optional. The IDs of additional security groups to add to control plane
// replicas. The Anthos Multi-Cloud API will automatically create and manage
// 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
// plane replica.
// Required. The name or ARN of the AWS IAM instance profile to assign to each
// control plane replica.
string iam_instance_profile = 7 [(google.api.field_behavior) = REQUIRED];
// 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];
// 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
// resources.
// Optional. A set of AWS resource tags to propagate to all underlying managed
// AWS resources.
//
// Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// (.+-=_:@/). 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];
// 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.
AwsProxyConfig proxy_config = 16 [(google.api.field_behavior) = OPTIONAL];
// 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.
// 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.
message AwsServicesAuthentication {
// Required. The Amazon Resource Name (ARN) of the role that the Anthos Multi-Cloud API
// will assume when managing AWS resources on your account.
// Required. The Amazon Resource Name (ARN) of the role that the Anthos
// Multi-Cloud API will assume when managing AWS resources on your account.
string role_arn = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. An identifier for the assumed role session.
@ -241,7 +258,8 @@ message AwsAuthorization {
//
// For more info on RBAC, see
// 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.
@ -284,11 +302,12 @@ message AwsVolumeTemplate {
// When unspecified, it defaults to GP2 volume.
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];
// Optional. The Amazon Resource Name (ARN) of the Customer Managed Key (CMK) used to
// encrypt AWS EBS volumes.
// Optional. The Amazon Resource Name (ARN) of the Customer Managed Key (CMK)
// used to encrypt AWS EBS volumes.
//
// If not specified, the default Amazon managed key associated to
// the AWS region where this cluster runs will be used.
@ -306,15 +325,17 @@ message AwsClusterNetworking {
// This field cannot be changed after creation.
string vpc_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. All pods in the cluster are assigned an IPv4 address from these ranges.
// Only a single range is supported.
// This field cannot be changed after creation.
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.
// This field cannot be changed after creation.
repeated string service_address_cidr_blocks = 3 [(google.api.field_behavior) = REQUIRED];
// Required. All pods in the cluster are assigned an IPv4 address from these
// ranges. Only a single range is supported. This field cannot be changed
// after creation.
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. This field cannot be
// changed after creation.
repeated string service_address_cidr_blocks = 3
[(google.api.field_behavior) = REQUIRED];
}
// An Anthos node pool running on AWS.
@ -360,7 +381,8 @@ message AwsNodePool {
// see [Resource Names](https://cloud.google.com/apis/design/resource_names)
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
// calling
@ -371,7 +393,8 @@ message AwsNodePool {
AwsNodeConfig config = 28 [(google.api.field_behavior) = REQUIRED];
// 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.
string subnet_id = 6 [(google.api.field_behavior) = REQUIRED];
@ -387,10 +410,12 @@ message AwsNodePool {
bool reconciling = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
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
// through optimistic concurrency control.
@ -412,7 +437,12 @@ message AwsNodePool {
// Required. The constraint on the maximum number of pods that can be run
// 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.
@ -437,13 +467,14 @@ message AwsNodeConfig {
// "mass": "1.3kg", "count": "3" }.
map<string, string> labels = 4 [(google.api.field_behavior) = OPTIONAL];
// Optional. Key/value metadata to assign to each underlying AWS resource. Specify at
// most 50 pairs containing alphanumerics, spaces, and symbols (.+-=_:@/).
// Keys can be up to 127 Unicode characters.
// Values can be up to 255 Unicode characters.
// Optional. Key/value metadata to assign to each underlying AWS resource.
// Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to
// 255 Unicode characters.
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];
// Optional. The OS image type to use on node pool instances.
@ -456,31 +487,41 @@ message AwsNodeConfig {
// Optional. The SSH configuration.
AwsSshConfig ssh_config = 9 [(google.api.field_behavior) = OPTIONAL];
// Optional. The IDs of additional security groups to add to nodes in this pool. The
// manager will automatically create security groups with minimum rules
// needed for a functioning cluster.
repeated string security_group_ids = 10 [(google.api.field_behavior) = OPTIONAL];
// Optional. The IDs of additional security groups to add to nodes in this
// pool. The manager will automatically create security groups with minimum
// rules needed for a functioning cluster.
repeated string security_group_ids = 10
[(google.api.field_behavior) = OPTIONAL];
// Optional. Proxy configuration for outbound HTTP(S) traffic.
AwsProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL];
// 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.
// 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
// to adjust the size of the node pool to the current cluster usage.
message AwsNodePoolAutoscaling {
// Required. Minimum number of nodes in the node pool. Must be greater than or equal to
// 1 and less than or equal to max_node_count.
// Required. Minimum number of nodes in the node pool. Must be greater than or
// equal to 1 and less than or equal to max_node_count.
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
// min_node_count and less than or equal to 50.
// Required. Maximum number of nodes in the node pool. Must be greater than or
// equal to min_node_count and less than or equal to 50.
int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED];
}
@ -517,6 +558,10 @@ message AwsSshConfig {
message AwsProxyConfig {
// The ARN of the AWS Secret Manager secret that contains the HTTP(S) proxy
// 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;
// The version string of the AWS Secret Manager secret that contains the
@ -554,3 +599,29 @@ message AwsInstancePlacement {
// Required. The tenancy for instance.
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.
service AwsClusters {
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
post: "/v1/{parent=projects/*/locations/*}/awsClusters"
body: "aws_cluster"
@ -57,7 +60,8 @@ service AwsClusters {
}
// 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) = {
patch: "/v1/{aws_cluster.name=projects/*/locations/*/awsClusters/*}"
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) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/awsClusters/*}"
@ -77,24 +82,27 @@ service AwsClusters {
option (google.api.method_signature) = "name";
}
// Lists all [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources on a given Google Cloud project and
// region.
rpc ListAwsClusters(ListAwsClustersRequest) returns (ListAwsClustersResponse) {
// Lists all [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources
// on a given Google Cloud project and region.
rpc ListAwsClusters(ListAwsClustersRequest)
returns (ListAwsClustersResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/awsClusters"
};
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]
// resources.
// Fails if the cluster has one or more associated
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resources.
//
// 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 DeleteAwsCluster(DeleteAwsClusterRequest) returns (google.longrunning.Operation) {
rpc DeleteAwsCluster(DeleteAwsClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/awsClusters/*}"
};
@ -107,23 +115,27 @@ service AwsClusters {
// Generates a short-lived access token to authenticate to a given
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource.
rpc GenerateAwsAccessToken(GenerateAwsAccessTokenRequest) returns (GenerateAwsAccessTokenResponse) {
rpc GenerateAwsAccessToken(GenerateAwsAccessTokenRequest)
returns (GenerateAwsAccessTokenResponse) {
option (google.api.http) = {
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
post: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools"
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) = {
response_type: "AwsNodePool"
metadata_type: "OperationMetadata"
@ -131,7 +143,8 @@ service AwsClusters {
}
// 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) = {
patch: "/v1/{aws_node_pool.name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
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) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
@ -151,20 +165,25 @@ service AwsClusters {
option (google.api.method_signature) = "name";
}
// Lists all [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resources on a given [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
rpc ListAwsNodePools(ListAwsNodePoolsRequest) returns (ListAwsNodePoolsResponse) {
// Lists all [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
// resources on a given
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster].
rpc ListAwsNodePools(ListAwsNodePoolsRequest)
returns (ListAwsNodePoolsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/awsClusters/*}/awsNodePools"
};
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
delete: "/v1/{name=projects/*/locations/*/awsClusters/*/awsNodePools/*}"
};
@ -187,8 +206,9 @@ service AwsClusters {
// Request message for `AwsClusters.CreateAwsCluster` method.
message CreateAwsClusterRequest {
// Required. The parent location where this [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource
// will be created.
// Required. The parent location where this
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource will be
// created.
//
// 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];
// Required. A client provided ID the resource. Must be unique within the parent
// resource.
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster]
// resource name formatted as
// The provided ID will be part of the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resource name
// formatted as
// `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];
// 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.
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];
// 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.secret_arn`.
// * `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.kms_key_arn`.
// * `control_plane.root_volume.volume_type`.
// * `control_plane.root_volume.size_gib`.
// * `control_plane.ssh_config`.
// * `control_plane.ssh_config.ec2_key_pair`.
// * `control_plane.instance_placement.tenancy`.
// * `logging_config`.
google.protobuf.FieldMask update_mask = 4 [(google.api.field_behavior) = REQUIRED];
// * `control_plane.iam_instance_profile`.
// * `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.
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
// `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.
// 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.ListAwsClustersResponse.next_page_token] to determine if
// there are more instances left to be queried.
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsClustersResponse.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
// [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;
}
// Response message for `AwsClusters.ListAwsClusters` method.
message ListAwsClustersResponse {
// A list of [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources in the specified GCP
// project and region region.
// A list of [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] resources
// in the specified GCP project and region region.
repeated AwsCluster aws_clusters = 1;
// 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.
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
// `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.
bool validate_only = 2;
// If set to true, and the [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] 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.
// If set to true, and the
// [AwsCluster][google.cloud.gkemulticloud.v1.AwsCluster] 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;
// 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.
//
@ -348,7 +381,8 @@ message DeleteAwsClusterRequest {
// Response message for `AwsClusters.CreateAwsNodePool` method.
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
// `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];
// Required. A client provided ID the resource. Must be unique within the parent
// resource.
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool]
// resource name formatted as
// The provided ID will be part of the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] resource name
// formatted as
// `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];
// 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.
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];
// 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.ssh_config`.
// * `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.
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
// `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.
// 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.ListAwsNodePoolsResponse.next_page_token] to determine if
// there are more instances left to be queried.
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAwsNodePoolsResponse.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
// [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;
}
// Response message for `AwsClusters.ListAwsNodePools` method.
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;
// 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;
}
// Request message for `AwsClusters.DeleteNodePool` method.
// Request message for `AwsClusters.DeleteAwsNodePool` method.
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
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>/awsNodePools/<node-pool-id>`.
@ -488,14 +538,16 @@ message DeleteAwsNodePoolRequest {
// pool.
bool validate_only = 2;
// If set to true, and the [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] 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.
// If set to true, and the
// [AwsNodePool][google.cloud.gkemulticloud.v1.AwsNodePool] 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;
// 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.
//
@ -506,7 +558,9 @@ message DeleteAwsNodePoolRequest {
// GetAwsServerConfigRequest gets the server config of GKE cluster on AWS.
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
// `projects/<project-id>/locations/<region>/awsServerConfig`.
@ -523,7 +577,9 @@ message GetAwsServerConfigRequest {
// Request message for `AwsClusters.GenerateAwsAccessToken` method.
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
// `projects/<project-id>/locations/<region>/awsClusters/<cluster-id>`.
@ -544,5 +600,6 @@ message GenerateAwsAccessTokenResponse {
string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
string azure_region = 3 [(google.api.field_behavior) = REQUIRED];
// Required. The ARM ID of the resource group where the cluster resources are deployed.
// For example:
// Required. The ARM ID of the resource group where the cluster resources are
// deployed. For example:
// `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>`
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
// how the Anthos Multi-Cloud API connects to Azure APIs.
// Required. Name of the
// [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
// as the `AzureCluster`.
@ -104,7 +106,8 @@ message AzureCluster {
string azure_client = 16 [(google.api.field_behavior) = REQUIRED];
// 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.
AzureControlPlane control_plane = 5 [(google.api.field_behavior) = REQUIRED];
@ -125,10 +128,12 @@ message AzureCluster {
bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
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
// through optimistic concurrency control.
@ -149,25 +154,36 @@ message AzureCluster {
map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL];
// 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.
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.
Fleet fleet = 20 [(google.api.field_behavior) = OPTIONAL];
// Required. Fleet configuration.
Fleet fleet = 20 [(google.api.field_behavior) = REQUIRED];
// Output only. Mananged Azure resources for this cluster.
AzureClusterResources managed_resources = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Managed Azure resources for this cluster.
AzureClusterResources managed_resources = 21
[(google.api.field_behavior) = OUTPUT_ONLY];
// Optional. Logging configuration for this cluster.
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.
message AzureClusterNetworking {
// Required. The Azure Resource Manager (ARM) ID of the VNet associated with your
// cluster.
// Required. The Azure Resource Manager (ARM) ID of the VNet associated with
// your cluster.
//
// All components in the cluster (i.e. control plane and node pools) run on a
// single VNet.
@ -185,7 +201,8 @@ message AzureClusterNetworking {
// ranges. Only a single range is supported.
//
// 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
// notation (e.g. `10.96.0.0/14`).
@ -194,15 +211,17 @@ message AzureClusterNetworking {
// ranges. Only a single range is supported.
//
// 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
// balancers are deployed. When unspecified, it defaults to
// Optional. The ARM ID of the subnet where Kubernetes private service type
// load balancers are deployed. When unspecified, it defaults to
// AzureControlPlane.subnet_id.
//
// Example:
// "/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.
@ -215,8 +234,8 @@ message AzureControlPlane {
// [GetAzureServerConfig][google.cloud.gkemulticloud.v1.AzureClusters.GetAzureServerConfig].
string version = 1 [(google.api.field_behavior) = REQUIRED];
// Optional. The ARM ID of the default subnet for the control plane. The control plane
// VMs are deployed in this subnet, unless
// Optional. The ARM ID of the default subnet for the control plane. The
// control plane VMs are deployed in this subnet, unless
// `AzureControlPlane.replica_placements` is specified. This subnet will also
// be used as default for `AzureControlPlane.endpoint_subnet_id` if
// `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];
// 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.
AzureProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL];
// 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];
// 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
// replica_placements is set, the replica placement instances will be applied
// 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.
// When unspecified, it defaults to AzureControlPlane.subnet_id.
// Optional. The ARM ID of the subnet where the control plane load balancer is
// deployed. When unspecified, it defaults to AzureControlPlane.subnet_id.
//
// Example:
// "/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.
message ReplicaPlacement {
// Required. For a given replica, the ARM ID of the subnet where the control plane VM is
// deployed. Make sure it's a subnet under the virtual network in the cluster
// configuration.
// Required. For a given replica, the ARM ID of the subnet where the control
// plane VM is deployed. Make sure it's a subnet under the virtual network in
// the cluster configuration.
string subnet_id = 1 [(google.api.field_behavior) = REQUIRED];
// Required. For a given replica, the Azure availability zone where to provision the
// control plane VM and the ETCD disk.
// Required. For a given replica, the Azure availability zone where to
// provision the control plane VM and the ETCD disk.
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 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
// `https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>`.
string secret_id = 2;
@ -325,13 +352,15 @@ message AzureDatabaseEncryption {
// Azure VM bootstrap secret is envelope encrypted with the provided key vault
// key.
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:
// `/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];
// 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)
// 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
// 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
// provided and all operations on Azure resources associated to that cluster
// will authenticate to Azure services using the given client.
// When an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] is
// created, an `AzureClient` resource needs to be provided and all operations on
// 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.
//
@ -398,7 +428,8 @@ message AzureClient {
string uid = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
@ -409,7 +440,8 @@ message AzureAuthorization {
//
// For more info on RBAC, see
// 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.
@ -461,18 +493,20 @@ message AzureNodePool {
// see [Resource Names](https://cloud.google.com/apis/design/resource_names)
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];
// Required. The node configuration of the node pool.
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
// subnet under the virtual network in the cluster configuration.
// Required. The ARM ID of the subnet where the node pool VMs run. Make sure
// it's a subnet under the virtual network in the cluster configuration.
string subnet_id = 3 [(google.api.field_behavior) = REQUIRED];
// 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.
State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
@ -485,10 +519,12 @@ message AzureNodePool {
bool reconciling = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
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
// through optimistic concurrency control.
@ -510,12 +546,17 @@ message AzureNodePool {
// Required. The constraint on the maximum number of pods that can be run
// 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.
//
// When unspecified, it defaults to `1`.
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
@ -535,8 +576,8 @@ message AzureNodeConfig {
// When unspecified, it defaults to a 32-GiB Azure Disk.
AzureDiskTemplate root_volume = 2 [(google.api.field_behavior) = OPTIONAL];
// Optional. A set of tags to apply to all underlying Azure resources for this node
// pool. This currently only includes Virtual Machine Scale Sets.
// Optional. A set of tags to apply to all underlying Azure resources for this
// node pool. This currently only includes Virtual Machine Scale Sets.
//
// Specify at most 50 pairs containing alphanumerics, spaces, and symbols
// (.+-=_:@/). 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];
// 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.
repeated NodeTaint taints = 10 [(google.api.field_behavior) = OPTIONAL];
@ -573,12 +615,12 @@ message AzureNodeConfig {
// The Kubernetes cluster autoscaler will automatically adjust the
// size of the node pool based on the cluster load.
message AzureNodePoolAutoscaling {
// Required. Minimum number of nodes in the node pool. Must be greater than or equal to
// 1 and less than or equal to max_node_count.
// Required. Minimum number of nodes in the node pool. Must be greater than or
// equal to 1 and less than or equal to max_node_count.
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
// min_node_count and less than or equal to 50.
// Required. Maximum number of nodes in the node pool. Must be greater than or
// equal to min_node_count and less than or equal to 50.
int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED];
}
@ -614,9 +656,9 @@ message AzureK8sVersionInfo {
// SSH configuration for Azure resources.
message AzureSshConfig {
// Required. The SSH public key data for VMs managed by Anthos. This accepts the
// authorized_keys file format used in OpenSSH according to the sshd(8) manual
// page.
// Required. The SSH public key data for VMs managed by Anthos. This accepts
// the authorized_keys file format used in OpenSSH according to the sshd(8)
// manual page.
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.
message AzureClusterResources {
// 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.
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.
service AzureClusters {
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
// and region.
// Creates a new [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// resource on a given Google Cloud project and region.
//
// `AzureClient` resources hold client authentication
// 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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
post: "/v1/{parent=projects/*/locations/*}/azureClients"
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) = {
response_type: "AzureClient"
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) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClients/*}"
@ -69,16 +73,18 @@ service AzureClusters {
option (google.api.method_signature) = "name";
}
// Lists all [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resources on a given Google Cloud project and
// region.
rpc ListAzureClients(ListAzureClientsRequest) returns (ListAzureClientsResponse) {
// Lists all [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// resources on a given Google Cloud project and region.
rpc ListAzureClients(ListAzureClientsRequest)
returns (ListAzureClientsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/azureClients"
};
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
// fail and a `FAILED_PRECONDITION` error will be returned.
@ -86,7 +92,8 @@ service AzureClusters {
// 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 DeleteAzureClient(DeleteAzureClientRequest) returns (google.longrunning.Operation) {
rpc DeleteAzureClient(DeleteAzureClientRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
post: "/v1/{parent=projects/*/locations/*}/azureClusters"
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) = {
response_type: "AzureCluster"
metadata_type: "OperationMetadata"
@ -115,7 +125,8 @@ service AzureClusters {
}
// 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) = {
patch: "/v1/{azure_cluster.name=projects/*/locations/*/azureClusters/*}"
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) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClusters/*}"
@ -135,24 +147,27 @@ service AzureClusters {
option (google.api.method_signature) = "name";
}
// Lists all [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resources on a given Google Cloud project and
// region.
rpc ListAzureClusters(ListAzureClustersRequest) returns (ListAzureClustersResponse) {
// Lists all [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resources on a given Google Cloud project and region.
rpc ListAzureClusters(ListAzureClustersRequest)
returns (ListAzureClustersResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*}/azureClusters"
};
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]
// resources.
// Fails if the cluster has one or more associated
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources.
//
// 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 DeleteAzureCluster(DeleteAzureClusterRequest) returns (google.longrunning.Operation) {
rpc DeleteAzureCluster(DeleteAzureClusterRequest)
returns (google.longrunning.Operation) {
option (google.api.http) = {
delete: "/v1/{name=projects/*/locations/*/azureClusters/*}"
};
@ -165,23 +180,28 @@ service AzureClusters {
// Generates a short-lived access token to authenticate to a given
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource.
rpc GenerateAzureAccessToken(GenerateAzureAccessTokenRequest) returns (GenerateAzureAccessTokenResponse) {
rpc GenerateAzureAccessToken(GenerateAzureAccessTokenRequest)
returns (GenerateAzureAccessTokenResponse) {
option (google.api.http) = {
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
post: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
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) = {
response_type: "AzureNodePool"
metadata_type: "OperationMetadata"
@ -189,7 +209,8 @@ service AzureClusters {
}
// 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) = {
patch: "/v1/{azure_node_pool.name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
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) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
@ -209,20 +231,25 @@ service AzureClusters {
option (google.api.method_signature) = "name";
}
// Lists all [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resources on a given [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
rpc ListAzureNodePools(ListAzureNodePoolsRequest) returns (ListAzureNodePoolsResponse) {
// Lists all [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
// resources on a given
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster].
rpc ListAzureNodePools(ListAzureNodePoolsRequest)
returns (ListAzureNodePoolsResponse) {
option (google.api.http) = {
get: "/v1/{parent=projects/*/locations/*/azureClusters/*}/azureNodePools"
};
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
// [Operation][google.longrunning.Operation] resource that can be
// 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) = {
delete: "/v1/{name=projects/*/locations/*/azureClusters/*/azureNodePools/*}"
};
@ -235,7 +262,8 @@ service AzureClusters {
// Returns information, such as supported Azure regions and Kubernetes
// versions, on a given Google Cloud location.
rpc GetAzureServerConfig(GetAzureServerConfigRequest) returns (AzureServerConfig) {
rpc GetAzureServerConfig(GetAzureServerConfigRequest)
returns (AzureServerConfig) {
option (google.api.http) = {
get: "/v1/{name=projects/*/locations/*/azureServerConfig}"
};
@ -245,8 +273,9 @@ service AzureClusters {
// Request message for `AzureClusters.CreateAzureCluster` method.
message CreateAzureClusterRequest {
// Required. The parent location where this [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource
// will be created.
// Required. The parent location where this
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource will be
// created.
//
// 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];
// Required. A client provided ID the resource. Must be unique within the parent
// resource.
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resource name formatted as
// The provided ID will be part of the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resource name
// formatted as
// `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];
// 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.
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];
// 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]:
//
// * `description`.
// * `annotations`.
// * `azureClient`.
// * `control_plane.version`.
// * `control_plane.vm_size`.
// * `annotations`.
// * `authorization.admin_users`.
// * `control_plane.root_volume.size_gib`.
// * `logging_config`
google.protobuf.FieldMask update_mask = 4 [(google.api.field_behavior) = REQUIRED];
// * `control_plane.proxy_config`.
// * `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.
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
// `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.
// 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.ListAzureClustersResponse.next_page_token] to determine if
// there are more instances left to be queried.
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClustersResponse.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
// [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;
}
// Response message for `AzureClusters.ListAzureClusters` method.
message ListAzureClustersResponse {
// A list of [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] resources in the specified GCP
// project and region region.
// A list of [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster]
// resources in the specified GCP project and region region.
repeated AzureCluster azure_clusters = 1;
// 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.
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
// `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,
// the request will succeed but no action will be taken on the server and a
// completed [Operation][google.longrunning.Operation] will be returned.
// If set to true, and the
// [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] 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 = 2;
@ -383,7 +426,8 @@ message DeleteAzureClusterRequest {
// If set, only validate the request, but do not actually delete the resource.
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.
//
@ -394,7 +438,8 @@ message DeleteAzureClusterRequest {
// Response message for `AzureClusters.CreateAzureNodePool` method.
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>`.
//
@ -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];
// Required. A client provided ID the resource. Must be unique within the parent
// resource.
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool]
// resource name formatted as
// The provided ID will be part of the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] resource name
// formatted as
// `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];
// 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.
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];
// If set, only validate the request, but don't actually update the node pool.
@ -441,13 +489,16 @@ message UpdateAzureNodePoolRequest {
// * `version`.
// * `autoscaling.min_node_count`.
// * `autoscaling.max_node_count`.
// * `config.vm_size`.
google.protobuf.FieldMask update_mask = 3 [(google.api.field_behavior) = REQUIRED];
// * `config.ssh_config.authorized_key`.
google.protobuf.FieldMask update_mask = 3
[(google.api.field_behavior) = REQUIRED];
}
// Request message for `AzureClusters.GetAzureNodePool` method.
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
// `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.
// 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.ListAzureNodePoolsResponse.next_page_token] to determine if
// there are more instances left to be queried.
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureNodePoolsResponse.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
// [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;
}
// Response message for `AzureClusters.ListAzureNodePools` method.
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;
// 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;
}
// Delete message for `AzureClusters.DeleteNodePool` method.
// Delete message for `AzureClusters.DeleteAzureNodePool` method.
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
// `projects/<project-id>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
@ -523,14 +577,17 @@ message DeleteAzureNodePoolRequest {
// pool.
bool validate_only = 2;
// If set to true, and the [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] 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.
// If set to true, and the
// [AzureNodePool][google.cloud.gkemulticloud.v1.AzureNodePool] 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;
// 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.
//
@ -541,7 +598,9 @@ message DeleteAzureNodePoolRequest {
// GetAzureServerConfigRequest gets the server config of GKE cluster on Azure.
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
// `projects/<project-id>/locations/<region>/azureServerConfig`.
@ -558,8 +617,9 @@ message GetAzureServerConfigRequest {
// Request message for `AzureClusters.CreateAzureClient` method.
message CreateAzureClientRequest {
// Required. The parent location where this [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource
// will be created.
// Required. The parent location where this
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource will be
// created.
//
// 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];
// Required. A client provided ID the resource. Must be unique within the parent
// resource.
// Required. A client provided ID the resource. Must be unique within the
// parent resource.
//
// The provided ID will be part of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// resource name formatted as
// The provided ID will be part of the
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resource name
// formatted as
// `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];
// 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.
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>`.
//
// 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.
// 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.ListAzureClientsResponse.next_page_token] to determine if
// there are more instances left to be queried.
// [nextPageToken][google.cloud.gkemulticloud.v1.ListAzureClientsResponse.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
// [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;
}
// Response message for `AzureClusters.ListAzureClients` method.
message ListAzureClientsResponse {
// A list of [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] resources in the specified Google Cloud
// project and region region.
// A list of [AzureClient][google.cloud.gkemulticloud.v1.AzureClient]
// resources in the specified Google Cloud project and region region.
repeated AzureClient azure_clients = 1;
// 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.
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>`.
//
// 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,
// the request will succeed but no action will be taken on the server and a
// completed [Operation][google.longrunning.Operation] will be returned.
// If set to true, and the
// [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] 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 = 2;
@ -676,7 +745,9 @@ message DeleteAzureClientRequest {
// Request message for `AzureClusters.GenerateAzureAccessToken` method.
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
// `projects/<project-id>/locations/<region>/AzureClusters/<cluster-id>`.
@ -697,5 +768,6 @@ message GenerateAzureAccessTokenResponse {
string access_token = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// 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.
message OperationMetadata {
// 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.
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.
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.
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];
// 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.
@ -107,13 +121,15 @@ message NodeTaint {
// Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for
// more details on Anthos multi-cluster capabilities using Fleets.
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
// `projects/<project-number>`.
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
// `projects/<project-number>/locations/global/membership/<cluster-id>`.
@ -143,3 +159,16 @@ message LoggingComponentConfig {
// The components to be enabled.
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",
"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",
@ -124,6 +140,22 @@
{
"service": "google.cloud.gkemulticloud.v1.AzureClusters",
"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"

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

Loading…
Cancel
Save