/** * Copyright 2023 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. */ variable "cluster_id" { description = "Cluster id. Optional, but providing cluster_id is recommended to prevent cluster misconfiguration in some of the edge cases." type = string default = null } variable "cluster_name" { description = "Cluster name." type = string } variable "gke_version" { description = "Kubernetes nodes version. Ignored if auto_upgrade is set in management_config." type = string default = null } variable "labels" { description = "Kubernetes labels applied to each node." type = map(string) default = {} nullable = false } variable "location" { description = "Cluster location." type = string } variable "max_pods_per_node" { description = "Maximum number of pods per node." type = number default = null } variable "name" { description = "Optional nodepool name." type = string default = null } variable "node_config" { description = "Node-level configuration." type = object({ boot_disk_kms_key = optional(string) disk_size_gb = optional(number) disk_type = optional(string) ephemeral_ssd_count = optional(number) gcfs = optional(bool, false) guest_accelerator = optional(object({ count = number type = string gpu_partition_size = optional(string) })) gvnic = optional(bool, false) image_type = optional(string) kubelet_config = optional(object({ cpu_manager_policy = string cpu_cfs_quota = optional(bool) cpu_cfs_quota_period = optional(string) })) linux_node_config_sysctls = optional(map(string)) local_ssd_count = optional(number) machine_type = optional(string) metadata = optional(map(string)) min_cpu_platform = optional(string) preemptible = optional(bool) sandbox_config_gvisor = optional(bool) shielded_instance_config = optional(object({ enable_integrity_monitoring = optional(bool) enable_secure_boot = optional(bool) })) spot = optional(bool) workload_metadata_config_mode = optional(string) }) default = { disk_type = "pd-balanced" } } variable "node_count" { description = "Number of nodes per instance group. Initial value can only be changed by recreation, current is ignored when autoscaling is used." type = object({ current = optional(number) initial = number }) default = { initial = 1 } nullable = false } variable "node_locations" { description = "Node locations." type = list(string) default = null } variable "nodepool_config" { description = "Nodepool-level configuration." type = object({ autoscaling = optional(object({ location_policy = optional(string) max_node_count = optional(number) min_node_count = optional(number) use_total_nodes = optional(bool, false) })) management = optional(object({ auto_repair = optional(bool) auto_upgrade = optional(bool) })) # placement_policy = optional(bool) upgrade_settings = optional(object({ max_surge = number max_unavailable = number })) }) default = null } variable "pod_range" { description = "Pod secondary range configuration." type = object({ secondary_pod_range = object({ cidr = optional(string) create = optional(bool) name = string }) }) default = null } variable "project_id" { description = "Cluster project id." type = string } variable "reservation_affinity" { description = "Configuration of the desired reservation which instances could take capacity from." type = object({ consume_reservation_type = string key = optional(string) values = optional(list(string)) }) default = null } variable "service_account" { description = "Nodepool service account. If this variable is set to null, the default GCE service account will be used. If set and email is null, a service account will be created. If scopes are null a default will be used." type = object({ create = optional(bool, false) email = optional(string) oauth_scopes = optional(list(string)) }) default = {} nullable = false } variable "sole_tenant_nodegroup" { description = "Sole tenant node group." type = string default = null } variable "tags" { description = "Network tags applied to nodes." type = list(string) default = null } variable "taints" { description = "Kubernetes taints applied to all nodes." type = list(object({ key = string value = string effect = string })) default = null }