azure_resources.proto 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. // Copyright 2022 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. syntax = "proto3";
  15. package google.cloud.gkemulticloud.v1;
  16. import "google/api/field_behavior.proto";
  17. import "google/api/resource.proto";
  18. import "google/cloud/gkemulticloud/v1/common_resources.proto";
  19. import "google/protobuf/timestamp.proto";
  20. option csharp_namespace = "Google.Cloud.GkeMultiCloud.V1";
  21. option go_package = "google.golang.org/genproto/googleapis/cloud/gkemulticloud/v1;gkemulticloud";
  22. option java_multiple_files = true;
  23. option java_outer_classname = "AzureResourcesProto";
  24. option java_package = "com.google.cloud.gkemulticloud.v1";
  25. option php_namespace = "Google\\Cloud\\GkeMultiCloud\\V1";
  26. option ruby_package = "Google::Cloud::GkeMultiCloud::V1";
  27. // An Anthos cluster running on Azure.
  28. message AzureCluster {
  29. option (google.api.resource) = {
  30. type: "gkemulticloud.googleapis.com/AzureCluster"
  31. pattern: "projects/{project}/locations/{location}/azureClusters/{azure_cluster}"
  32. };
  33. // The lifecycle state of the cluster.
  34. enum State {
  35. // Not set.
  36. STATE_UNSPECIFIED = 0;
  37. // The PROVISIONING state indicates the cluster is being created.
  38. PROVISIONING = 1;
  39. // The RUNNING state indicates the cluster has been created and is fully
  40. // usable.
  41. RUNNING = 2;
  42. // The RECONCILING state indicates that some work is actively being done on
  43. // the cluster, such as upgrading the control plane replicas.
  44. RECONCILING = 3;
  45. // The STOPPING state indicates the cluster is being deleted.
  46. STOPPING = 4;
  47. // The ERROR state indicates the cluster is in a broken unrecoverable
  48. // state.
  49. ERROR = 5;
  50. // The DEGRADED state indicates the cluster requires user action to
  51. // restore full functionality.
  52. DEGRADED = 6;
  53. }
  54. // The name of this resource.
  55. //
  56. // Cluster names are formatted as
  57. // `projects/<project-number>/locations/<region>/azureClusters/<cluster-id>`.
  58. //
  59. // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
  60. // for more details on GCP resource names.
  61. string name = 1;
  62. // Optional. A human readable description of this cluster.
  63. // Cannot be longer than 255 UTF-8 encoded bytes.
  64. string description = 2 [(google.api.field_behavior) = OPTIONAL];
  65. // Required. The Azure region where the cluster runs.
  66. //
  67. // Each Google Cloud region supports a subset of nearby Azure regions.
  68. // You can call
  69. // [GetAzureServerConfig][google.cloud.gkemulticloud.v1.AzureClusters.GetAzureServerConfig]
  70. // to list all supported Azure regions within a given Google Cloud region.
  71. string azure_region = 3 [(google.api.field_behavior) = REQUIRED];
  72. // Required. The ARM ID of the resource group where the cluster resources are deployed.
  73. // For example:
  74. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>`
  75. string resource_group_id = 17 [(google.api.field_behavior) = REQUIRED];
  76. // Required. Name of the [AzureClient][google.cloud.gkemulticloud.v1.AzureClient] that contains authentication configuration for
  77. // how the Anthos Multi-Cloud API connects to Azure APIs.
  78. //
  79. // The `AzureClient` resource must reside on the same GCP project and region
  80. // as the `AzureCluster`.
  81. //
  82. // `AzureClient` names are formatted as
  83. // `projects/<project-number>/locations/<region>/azureClients/<client-id>`.
  84. //
  85. // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
  86. // for more details on Google Cloud resource names.
  87. string azure_client = 16 [(google.api.field_behavior) = REQUIRED];
  88. // Required. Cluster-wide networking configuration.
  89. AzureClusterNetworking networking = 4 [(google.api.field_behavior) = REQUIRED];
  90. // Required. Configuration related to the cluster control plane.
  91. AzureControlPlane control_plane = 5 [(google.api.field_behavior) = REQUIRED];
  92. // Required. Configuration related to the cluster RBAC settings.
  93. AzureAuthorization authorization = 6 [(google.api.field_behavior) = REQUIRED];
  94. // Output only. The current state of the cluster.
  95. State state = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
  96. // Output only. The endpoint of the cluster's API server.
  97. string endpoint = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
  98. // Output only. A globally unique identifier for the cluster.
  99. string uid = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
  100. // Output only. If set, there are currently changes in flight to the cluster.
  101. bool reconciling = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
  102. // Output only. The time at which this cluster was created.
  103. google.protobuf.Timestamp create_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
  104. // Output only. The time at which this cluster was last updated.
  105. google.protobuf.Timestamp update_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY];
  106. // Allows clients to perform consistent read-modify-writes
  107. // through optimistic concurrency control.
  108. //
  109. // Can be sent on update and delete requests to ensure the
  110. // client has an up-to-date value before proceeding.
  111. string etag = 13;
  112. // Optional. Annotations on the cluster.
  113. //
  114. // This field has the same restrictions as Kubernetes annotations.
  115. // The total size of all keys and values combined is limited to 256k.
  116. // Keys can have 2 segments: prefix (optional) and name (required),
  117. // separated by a slash (/).
  118. // Prefix must be a DNS subdomain.
  119. // Name must be 63 characters or less, begin and end with alphanumerics,
  120. // with dashes (-), underscores (_), dots (.), and alphanumerics between.
  121. map<string, string> annotations = 14 [(google.api.field_behavior) = OPTIONAL];
  122. // Output only. Workload Identity settings.
  123. WorkloadIdentityConfig workload_identity_config = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
  124. // Output only. PEM encoded x509 certificate of the cluster root of trust.
  125. string cluster_ca_certificate = 19 [(google.api.field_behavior) = OUTPUT_ONLY];
  126. // Optional. Fleet configuration.
  127. Fleet fleet = 20 [(google.api.field_behavior) = OPTIONAL];
  128. // Output only. Mananged Azure resources for this cluster.
  129. AzureClusterResources managed_resources = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
  130. // Optional. Logging configuration for this cluster.
  131. LoggingConfig logging_config = 23 [(google.api.field_behavior) = OPTIONAL];
  132. }
  133. // ClusterNetworking contains cluster-wide networking configuration.
  134. message AzureClusterNetworking {
  135. // Required. The Azure Resource Manager (ARM) ID of the VNet associated with your
  136. // cluster.
  137. //
  138. // All components in the cluster (i.e. control plane and node pools) run on a
  139. // single VNet.
  140. //
  141. // Example:
  142. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.Network/virtualNetworks/<vnet-id>`
  143. //
  144. // This field cannot be changed after creation.
  145. string virtual_network_id = 1 [(google.api.field_behavior) = REQUIRED];
  146. // Required. The IP address range of the pods in this cluster, in CIDR
  147. // notation (e.g. `10.96.0.0/14`).
  148. //
  149. // All pods in the cluster get assigned a unique IPv4 address from these
  150. // ranges. Only a single range is supported.
  151. //
  152. // This field cannot be changed after creation.
  153. repeated string pod_address_cidr_blocks = 2 [(google.api.field_behavior) = REQUIRED];
  154. // Required. The IP address range for services in this cluster, in CIDR
  155. // notation (e.g. `10.96.0.0/14`).
  156. //
  157. // All services in the cluster get assigned a unique IPv4 address from these
  158. // ranges. Only a single range is supported.
  159. //
  160. // This field cannot be changed after creating a cluster.
  161. repeated string service_address_cidr_blocks = 3 [(google.api.field_behavior) = REQUIRED];
  162. // Optional. The ARM ID of the subnet where Kubernetes private service type load
  163. // balancers are deployed. When unspecified, it defaults to
  164. // AzureControlPlane.subnet_id.
  165. //
  166. // Example:
  167. // "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid456"
  168. string service_load_balancer_subnet_id = 5 [(google.api.field_behavior) = OPTIONAL];
  169. }
  170. // AzureControlPlane represents the control plane configurations.
  171. message AzureControlPlane {
  172. // Required. The Kubernetes version to run on control plane replicas
  173. // (e.g. `1.19.10-gke.1000`).
  174. //
  175. // You can list all supported versions on a given Google Cloud region by
  176. // calling
  177. // [GetAzureServerConfig][google.cloud.gkemulticloud.v1.AzureClusters.GetAzureServerConfig].
  178. string version = 1 [(google.api.field_behavior) = REQUIRED];
  179. // Optional. The ARM ID of the default subnet for the control plane. The control plane
  180. // VMs are deployed in this subnet, unless
  181. // `AzureControlPlane.replica_placements` is specified. This subnet will also
  182. // be used as default for `AzureControlPlane.endpoint_subnet_id` if
  183. // `AzureControlPlane.endpoint_subnet_id` is not specified. Similarly it will
  184. // be used as default for
  185. // `AzureClusterNetworking.service_load_balancer_subnet_id`.
  186. //
  187. // Example:
  188. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.Network/virtualNetworks/<vnet-id>/subnets/default`.
  189. string subnet_id = 2 [(google.api.field_behavior) = OPTIONAL];
  190. // Optional. The Azure VM size name. Example: `Standard_DS2_v2`.
  191. //
  192. // For available VM sizes, see
  193. // https://docs.microsoft.com/en-us/azure/virtual-machines/vm-naming-conventions.
  194. //
  195. // When unspecified, it defaults to `Standard_DS2_v2`.
  196. string vm_size = 3 [(google.api.field_behavior) = OPTIONAL];
  197. // Required. SSH configuration for how to access the underlying control plane
  198. // machines.
  199. AzureSshConfig ssh_config = 11 [(google.api.field_behavior) = REQUIRED];
  200. // Optional. Configuration related to the root volume provisioned for each
  201. // control plane replica.
  202. //
  203. // When unspecified, it defaults to 32-GiB Azure Disk.
  204. AzureDiskTemplate root_volume = 4 [(google.api.field_behavior) = OPTIONAL];
  205. // Optional. Configuration related to the main volume provisioned for each
  206. // control plane replica.
  207. // The main volume is in charge of storing all of the cluster's etcd state.
  208. //
  209. // When unspecified, it defaults to a 8-GiB Azure Disk.
  210. AzureDiskTemplate main_volume = 5 [(google.api.field_behavior) = OPTIONAL];
  211. // Optional. Configuration related to application-layer secrets encryption.
  212. AzureDatabaseEncryption database_encryption = 10 [(google.api.field_behavior) = OPTIONAL];
  213. // Optional. Proxy configuration for outbound HTTP(S) traffic.
  214. AzureProxyConfig proxy_config = 12 [(google.api.field_behavior) = OPTIONAL];
  215. // Optional. Configuration related to vm config encryption.
  216. AzureConfigEncryption config_encryption = 14 [(google.api.field_behavior) = OPTIONAL];
  217. // Optional. A set of tags to apply to all underlying control plane Azure resources.
  218. map<string, string> tags = 7 [(google.api.field_behavior) = OPTIONAL];
  219. // Optional. Configuration for where to place the control plane replicas.
  220. //
  221. // Up to three replica placement instances can be specified. If
  222. // replica_placements is set, the replica placement instances will be applied
  223. // to the three control plane replicas as evenly as possible.
  224. repeated ReplicaPlacement replica_placements = 13 [(google.api.field_behavior) = OPTIONAL];
  225. // Optional. The ARM ID of the subnet where the control plane load balancer is deployed.
  226. // When unspecified, it defaults to AzureControlPlane.subnet_id.
  227. //
  228. // Example:
  229. // "/subscriptions/d00494d6-6f3c-4280-bbb2-899e163d1d30/resourceGroups/anthos_cluster_gkeust4/providers/Microsoft.Network/virtualNetworks/gke-vnet-gkeust4/subnets/subnetid123"
  230. string endpoint_subnet_id = 15 [(google.api.field_behavior) = OPTIONAL];
  231. }
  232. // Configuration for the placement of a control plane replica.
  233. message ReplicaPlacement {
  234. // Required. For a given replica, the ARM ID of the subnet where the control plane VM is
  235. // deployed. Make sure it's a subnet under the virtual network in the cluster
  236. // configuration.
  237. string subnet_id = 1 [(google.api.field_behavior) = REQUIRED];
  238. // Required. For a given replica, the Azure availability zone where to provision the
  239. // control plane VM and the ETCD disk.
  240. string azure_availability_zone = 2 [(google.api.field_behavior) = REQUIRED];
  241. }
  242. // Details of a proxy config stored in Azure Key Vault.
  243. message AzureProxyConfig {
  244. // The ARM ID the of the resource group containing proxy keyvault.
  245. //
  246. // Resource group ids are formatted as
  247. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>`.
  248. string resource_group_id = 1;
  249. // The URL the of the proxy setting secret with its version.
  250. //
  251. // Secret ids are formatted as
  252. // `https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>`.
  253. string secret_id = 2;
  254. }
  255. // Configuration related to application-layer secrets encryption.
  256. //
  257. // Anthos clusters on Azure encrypts your Kubernetes data at rest
  258. // in etcd using Azure Key Vault.
  259. message AzureDatabaseEncryption {
  260. // Required. The ARM ID of the Azure Key Vault key to encrypt / decrypt data.
  261. //
  262. // For example:
  263. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.KeyVault/vaults/<key-vault-id>/keys/<key-name>`
  264. // Encryption will always take the latest version of the key and hence
  265. // specific version is not supported.
  266. string key_id = 3 [(google.api.field_behavior) = REQUIRED];
  267. }
  268. // Configuration related to config data encryption.
  269. //
  270. // Azure VM bootstrap secret is envelope encrypted with the provided key vault
  271. // key.
  272. message AzureConfigEncryption {
  273. // Required. The ARM ID of the Azure Key Vault key to encrypt / decrypt config data.
  274. //
  275. // For example:
  276. // `/subscriptions/<subscription-id>/resourceGroups/<resource-group-id>/providers/Microsoft.KeyVault/vaults/<key-vault-id>/keys/<key-name>`
  277. string key_id = 2 [(google.api.field_behavior) = REQUIRED];
  278. // Optional. RSA key of the Azure Key Vault public key to use for encrypting the data.
  279. //
  280. // This key must be formatted as a PEM-encoded SubjectPublicKeyInfo (RFC 5280)
  281. // in ASN.1 DER form. The string must be comprised of a single PEM block of
  282. // type "PUBLIC KEY".
  283. string public_key = 3 [(google.api.field_behavior) = OPTIONAL];
  284. }
  285. // Configuration for Azure Disks.
  286. message AzureDiskTemplate {
  287. // Optional. The size of the disk, in GiBs.
  288. //
  289. // When unspecified, a default value is provided. See the specific reference
  290. // in the parent resource.
  291. int32 size_gib = 1 [(google.api.field_behavior) = OPTIONAL];
  292. }
  293. // `AzureClient` resources hold client authentication information needed by the
  294. // Anthos Multi-Cloud API to manage Azure resources on your Azure subscription.
  295. //
  296. // When an [AzureCluster][google.cloud.gkemulticloud.v1.AzureCluster] is created, an `AzureClient` resource needs to be
  297. // provided and all operations on Azure resources associated to that cluster
  298. // will authenticate to Azure services using the given client.
  299. //
  300. // `AzureClient` resources are immutable and cannot be modified upon creation.
  301. //
  302. // Each `AzureClient` resource is bound to a single Azure Active Directory
  303. // Application and tenant.
  304. message AzureClient {
  305. option (google.api.resource) = {
  306. type: "gkemulticloud.googleapis.com/AzureClient"
  307. pattern: "projects/{project}/locations/{location}/azureClients/{azure_client}"
  308. };
  309. // The name of this resource.
  310. //
  311. // `AzureClient` resource names are formatted as
  312. // `projects/<project-number>/locations/<region>/azureClients/<client-id>`.
  313. //
  314. // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
  315. // for more details on Google Cloud resource names.
  316. string name = 1;
  317. // Required. The Azure Active Directory Tenant ID.
  318. string tenant_id = 2 [(google.api.field_behavior) = REQUIRED];
  319. // Required. The Azure Active Directory Application ID.
  320. string application_id = 3 [(google.api.field_behavior) = REQUIRED];
  321. // Optional. Annotations on the resource.
  322. //
  323. // This field has the same restrictions as Kubernetes annotations.
  324. // The total size of all keys and values combined is limited to 256k.
  325. // Keys can have 2 segments: prefix (optional) and name (required),
  326. // separated by a slash (/).
  327. // Prefix must be a DNS subdomain.
  328. // Name must be 63 characters or less, begin and end with alphanumerics,
  329. // with dashes (-), underscores (_), dots (.), and alphanumerics between.
  330. map<string, string> annotations = 8 [(google.api.field_behavior) = OPTIONAL];
  331. // Output only. The PEM encoded x509 certificate.
  332. string pem_certificate = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
  333. // Output only. A globally unique identifier for the client.
  334. string uid = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
  335. // Output only. The time at which this resource was created.
  336. google.protobuf.Timestamp create_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
  337. }
  338. // Configuration related to the cluster RBAC settings.
  339. message AzureAuthorization {
  340. // Required. Users that can perform operations as a cluster admin. A managed
  341. // ClusterRoleBinding will be created to grant the `cluster-admin` ClusterRole
  342. // to the users. Up to ten admin users can be provided.
  343. //
  344. // For more info on RBAC, see
  345. // https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
  346. repeated AzureClusterUser admin_users = 1 [(google.api.field_behavior) = REQUIRED];
  347. }
  348. // Identities of a user-type subject for Azure clusters.
  349. message AzureClusterUser {
  350. // Required. The name of the user, e.g. `my-gcp-id@gmail.com`.
  351. string username = 1 [(google.api.field_behavior) = REQUIRED];
  352. }
  353. // An Anthos node pool running on Azure.
  354. message AzureNodePool {
  355. option (google.api.resource) = {
  356. type: "gkemulticloud.googleapis.com/AzureNodePool"
  357. pattern: "projects/{project}/locations/{location}/azureClusters/{azure_cluster}/azureNodePools/{azure_node_pool}"
  358. };
  359. // The lifecycle state of the node pool.
  360. enum State {
  361. // Not set.
  362. STATE_UNSPECIFIED = 0;
  363. // The PROVISIONING state indicates the node pool is being created.
  364. PROVISIONING = 1;
  365. // The RUNNING state indicates the node pool has been created and is fully
  366. // usable.
  367. RUNNING = 2;
  368. // The RECONCILING state indicates that the node pool is being reconciled.
  369. RECONCILING = 3;
  370. // The STOPPING state indicates the node pool is being deleted.
  371. STOPPING = 4;
  372. // The ERROR state indicates the node pool is in a broken unrecoverable
  373. // state.
  374. ERROR = 5;
  375. // The DEGRADED state indicates the node pool requires user action to
  376. // restore full functionality.
  377. DEGRADED = 6;
  378. }
  379. // The name of this resource.
  380. //
  381. // Node pool names are formatted as
  382. // `projects/<project-number>/locations/<region>/azureClusters/<cluster-id>/azureNodePools/<node-pool-id>`.
  383. //
  384. // For more details on Google Cloud resource names,
  385. // see [Resource Names](https://cloud.google.com/apis/design/resource_names)
  386. string name = 1;
  387. // Required. The Kubernetes version (e.g. `1.19.10-gke.1000`) running on this node pool.
  388. string version = 2 [(google.api.field_behavior) = REQUIRED];
  389. // Required. The node configuration of the node pool.
  390. AzureNodeConfig config = 22 [(google.api.field_behavior) = REQUIRED];
  391. // Required. The ARM ID of the subnet where the node pool VMs run. Make sure it's a
  392. // subnet under the virtual network in the cluster configuration.
  393. string subnet_id = 3 [(google.api.field_behavior) = REQUIRED];
  394. // Required. Autoscaler configuration for this node pool.
  395. AzureNodePoolAutoscaling autoscaling = 4 [(google.api.field_behavior) = REQUIRED];
  396. // Output only. The current state of the node pool.
  397. State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
  398. // Output only. A globally unique identifier for the node pool.
  399. string uid = 8 [(google.api.field_behavior) = OUTPUT_ONLY];
  400. // Output only. If set, there are currently pending changes to the node
  401. // pool.
  402. bool reconciling = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
  403. // Output only. The time at which this node pool was created.
  404. google.protobuf.Timestamp create_time = 10 [(google.api.field_behavior) = OUTPUT_ONLY];
  405. // Output only. The time at which this node pool was last updated.
  406. google.protobuf.Timestamp update_time = 11 [(google.api.field_behavior) = OUTPUT_ONLY];
  407. // Allows clients to perform consistent read-modify-writes
  408. // through optimistic concurrency control.
  409. //
  410. // Can be sent on update and delete requests to ensure the
  411. // client has an up-to-date value before proceeding.
  412. string etag = 12;
  413. // Optional. Annotations on the node pool.
  414. //
  415. // This field has the same restrictions as Kubernetes annotations.
  416. // The total size of all keys and values combined is limited to 256k.
  417. // Keys can have 2 segments: prefix (optional) and name (required),
  418. // separated by a slash (/).
  419. // Prefix must be a DNS subdomain.
  420. // Name must be 63 characters or less, begin and end with alphanumerics,
  421. // with dashes (-), underscores (_), dots (.), and alphanumerics between.
  422. map<string, string> annotations = 13 [(google.api.field_behavior) = OPTIONAL];
  423. // Required. The constraint on the maximum number of pods that can be run
  424. // simultaneously on a node in the node pool.
  425. MaxPodsConstraint max_pods_constraint = 21 [(google.api.field_behavior) = REQUIRED];
  426. // Optional. The Azure availability zone of the nodes in this nodepool.
  427. //
  428. // When unspecified, it defaults to `1`.
  429. string azure_availability_zone = 23 [(google.api.field_behavior) = OPTIONAL];
  430. }
  431. // Parameters that describe the configuration of all node machines
  432. // on a given node pool.
  433. message AzureNodeConfig {
  434. // Optional. The Azure VM size name. Example: `Standard_DS2_v2`.
  435. //
  436. // See [Supported VM
  437. // sizes](/anthos/clusters/docs/azure/reference/supported-vms) for options.
  438. //
  439. // When unspecified, it defaults to `Standard_DS2_v2`.
  440. string vm_size = 1 [(google.api.field_behavior) = OPTIONAL];
  441. // Optional. Configuration related to the root volume provisioned for each
  442. // node pool machine.
  443. //
  444. // When unspecified, it defaults to a 32-GiB Azure Disk.
  445. AzureDiskTemplate root_volume = 2 [(google.api.field_behavior) = OPTIONAL];
  446. // Optional. A set of tags to apply to all underlying Azure resources for this node
  447. // pool. This currently only includes Virtual Machine Scale Sets.
  448. //
  449. // Specify at most 50 pairs containing alphanumerics, spaces, and symbols
  450. // (.+-=_:@/). Keys can be up to 127 Unicode characters. Values can be up to
  451. // 255 Unicode characters.
  452. map<string, string> tags = 3 [(google.api.field_behavior) = OPTIONAL];
  453. // Optional. The OS image type to use on node pool instances.
  454. // Can have a value of `ubuntu`, or `windows` if the cluster enables
  455. // the Windows node pool preview feature.
  456. //
  457. // When unspecified, it defaults to `ubuntu`.
  458. string image_type = 8 [(google.api.field_behavior) = OPTIONAL];
  459. // Required. SSH configuration for how to access the node pool machines.
  460. AzureSshConfig ssh_config = 7 [(google.api.field_behavior) = REQUIRED];
  461. // Optional. Proxy configuration for outbound HTTP(S) traffic.
  462. AzureProxyConfig proxy_config = 9 [(google.api.field_behavior) = OPTIONAL];
  463. // Optional. Configuration related to vm config encryption.
  464. AzureConfigEncryption config_encryption = 12 [(google.api.field_behavior) = OPTIONAL];
  465. // Optional. The initial taints assigned to nodes of this node pool.
  466. repeated NodeTaint taints = 10 [(google.api.field_behavior) = OPTIONAL];
  467. // Optional. The initial labels assigned to nodes of this node pool. An object
  468. // containing a list of "key": value pairs. Example: { "name": "wrench",
  469. // "mass": "1.3kg", "count": "3" }.
  470. map<string, string> labels = 11 [(google.api.field_behavior) = OPTIONAL];
  471. }
  472. // Configuration related to Kubernetes cluster autoscaler.
  473. //
  474. // The Kubernetes cluster autoscaler will automatically adjust the
  475. // size of the node pool based on the cluster load.
  476. message AzureNodePoolAutoscaling {
  477. // Required. Minimum number of nodes in the node pool. Must be greater than or equal to
  478. // 1 and less than or equal to max_node_count.
  479. int32 min_node_count = 1 [(google.api.field_behavior) = REQUIRED];
  480. // Required. Maximum number of nodes in the node pool. Must be greater than or equal to
  481. // min_node_count and less than or equal to 50.
  482. int32 max_node_count = 2 [(google.api.field_behavior) = REQUIRED];
  483. }
  484. // AzureServerConfig contains information about a Google Cloud location, such as
  485. // supported Azure regions and Kubernetes versions.
  486. message AzureServerConfig {
  487. option (google.api.resource) = {
  488. type: "gkemulticloud.googleapis.com/AzureServerConfig"
  489. pattern: "projects/{project}/locations/{location}/azureServerConfig"
  490. };
  491. // The `AzureServerConfig` resource name.
  492. //
  493. // `AzureServerConfig` names are formatted as
  494. // `projects/<project-number>/locations/<region>/azureServerConfig`.
  495. //
  496. // See [Resource Names](https://cloud.google.com/apis/design/resource_names)
  497. // for more details on GCP resource names.
  498. string name = 1;
  499. // List of valid Kubernetes versions.
  500. repeated AzureK8sVersionInfo valid_versions = 2;
  501. // The list of supported Azure regions.
  502. repeated string supported_azure_regions = 3;
  503. }
  504. // Information about a supported Kubernetes version.
  505. message AzureK8sVersionInfo {
  506. // A supported Kubernetes version (for example, `1.19.10-gke.1000`)
  507. string version = 1;
  508. }
  509. // SSH configuration for Azure resources.
  510. message AzureSshConfig {
  511. // Required. The SSH public key data for VMs managed by Anthos. This accepts the
  512. // authorized_keys file format used in OpenSSH according to the sshd(8) manual
  513. // page.
  514. string authorized_key = 1 [(google.api.field_behavior) = REQUIRED];
  515. }
  516. // Managed Azure resources for the cluster.
  517. //
  518. // The values could change and be empty, depending on the state of the cluster.
  519. message AzureClusterResources {
  520. // Output only. The ARM ID of the cluster network security group.
  521. string network_security_group_id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
  522. // Output only. The ARM ID of the control plane application security group.
  523. string control_plane_application_security_group_id = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  524. }