modules/net-cloudnat/variables.tf (159 lines of code) (raw):

/** * Copyright 2024 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 "addresses" { description = "Optional list of external address self links." type = list(string) default = [] } variable "config_port_allocation" { description = "Configuration for how to assign ports to virtual machines. min_ports_per_vm and max_ports_per_vm have no effect unless enable_dynamic_port_allocation is set to 'true'." type = object({ enable_endpoint_independent_mapping = optional(bool, true) enable_dynamic_port_allocation = optional(bool, false) min_ports_per_vm = optional(number) max_ports_per_vm = optional(number, 65536) }) default = {} nullable = false validation { condition = var.config_port_allocation.enable_dynamic_port_allocation ? var.config_port_allocation.enable_endpoint_independent_mapping == false : true error_message = "You must set enable_endpoint_independent_mapping to false to set enable_dynamic_port_allocation to true." } } variable "config_source_subnetworks" { description = "Subnetwork configuration." type = object({ all = optional(bool, true) primary_ranges_only = optional(bool) subnetworks = optional(list(object({ self_link = string all_ranges = optional(bool, true) primary_range = optional(bool, false) secondary_ranges = optional(list(string)) })), []) }) nullable = false default = {} validation { condition = alltrue([ for s in var.config_source_subnetworks.subnetworks : (s.all_ranges == true) != ((s.primary_range == true) || try(length(s.secondary_ranges), 0) > 0) ]) error_message = "Either config_source_subnetworks.subnetworks.all_ranges is true or one of primary_range or secondary_ranges must be defined." } validation { condition = ( (var.config_source_subnetworks.all == true || var.config_source_subnetworks.primary_ranges_only == true) != (length(try(var.config_source_subnetworks.subnetworks, [])) > 0) ) error_message = "Cannot use config_source_subnetworks.all and config_source_subnetworks.primary_ranges_only together with config_source_subnetworks.subnetworks." } } variable "config_timeouts" { description = "Timeout configurations." type = object({ icmp = optional(number) tcp_established = optional(number) tcp_time_wait = optional(number) tcp_transitory = optional(number) udp = optional(number) }) default = {} nullable = false } variable "endpoint_types" { description = "Specifies the endpoint Types supported by the NAT Gateway. Supported values include: ENDPOINT_TYPE_VM, ENDPOINT_TYPE_SWG, ENDPOINT_TYPE_MANAGED_PROXY_LB." type = list(string) default = null validation { condition = (var.endpoint_types == null ? true : setunion([ "ENDPOINT_TYPE_VM", "ENDPOINT_TYPE_SWG", "ENDPOINT_TYPE_MANAGED_PROXY_LB", ], var.endpoint_types) == toset([ "ENDPOINT_TYPE_VM", "ENDPOINT_TYPE_SWG", "ENDPOINT_TYPE_MANAGED_PROXY_LB", ]) ) error_message = "Provide one of: ENDPOINT_TYPE_VM, ENDPOINT_TYPE_SWG or ENDPOINT_TYPE_MANAGED_PROXY_LB as endpoint_types" } } variable "logging_filter" { description = "Enables logging if not null, value is one of 'ERRORS_ONLY', 'TRANSLATIONS_ONLY', 'ALL'." type = string default = null } variable "name" { description = "Name of the Cloud NAT resource." type = string } variable "project_id" { description = "Project where resources will be created." type = string } variable "region" { description = "Region where resources will be created." type = string } variable "router_asn" { description = "Router ASN used for auto-created router." type = number default = null } variable "router_create" { description = "Create router." type = bool default = true } variable "router_name" { description = "Router name, leave blank if router will be created to use auto generated name." type = string default = null } variable "router_network" { description = "Name of the VPC used for auto-created router." type = string default = null } variable "rules" { description = "List of rules associated with this NAT." type = list(object({ description = optional(string) match = string source_ips = optional(list(string)) source_ranges = optional(list(string)) })) default = [] nullable = false validation { condition = alltrue([ for r in var.rules : r.source_ips != null || r.source_ranges != null ]) error_message = "All rules must specify either source_ips or source_ranges." } } variable "type" { description = "Whether this Cloud NAT is used for public or private IP translation. One of 'PUBLIC' or 'PRIVATE'." type = string default = "PUBLIC" nullable = false validation { condition = var.type == "PUBLIC" || var.type == "PRIVATE" error_message = "Field type must be either PUBLIC or PRIVATE." } }