Skip to content

Commit 1498a8c

Browse files
authored
fix: Fix type for NAT subnetwork attributes (#85)
1 parent 57f991b commit 1498a8c

File tree

4 files changed

+42
-20
lines changed

4 files changed

+42
-20
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Functional examples are included in the [examples](./examples/) directory. By de
4545
| bgp | BGP information specific to this router. | <pre>object({<br> asn = string<br> advertise_mode = optional(string, "CUSTOM")<br> advertised_groups = optional(list(string))<br> advertised_ip_ranges = optional(list(object({<br> range = string<br> description = optional(string)<br> })), [])<br> keepalive_interval = optional(number)<br> })</pre> | `null` | no |
4646
| description | An optional description of this resource | `string` | `null` | no |
4747
| name | Name of the router | `string` | n/a | yes |
48-
| nats | NATs to deploy on this router. | <pre>list(object({<br> name = string<br> nat_ip_allocate_option = optional(string)<br> source_subnetwork_ip_ranges_to_nat = optional(string)<br> nat_ips = optional(list(string), [])<br> min_ports_per_vm = optional(number)<br> max_ports_per_vm = optional(number)<br> udp_idle_timeout_sec = optional(number)<br> icmp_idle_timeout_sec = optional(number)<br> tcp_established_idle_timeout_sec = optional(number)<br> tcp_transitory_idle_timeout_sec = optional(number)<br> tcp_time_wait_timeout_sec = optional(number)<br> enable_endpoint_independent_mapping = optional(bool)<br> enable_dynamic_port_allocation = optional(bool)<br><br> log_config = optional(object({<br> enable = optional(bool, true)<br> filter = optional(string, "ALL")<br> }), {})<br><br> subnetworks = optional(list(object({<br> name = string<br> source_ip_ranges_to_nat = string<br> secondary_ip_range_names = optional(string)<br> })), [])<br><br> }))</pre> | `[]` | no |
48+
| nats | NATs to deploy on this router. | <pre>list(object({<br> name = string<br> nat_ip_allocate_option = optional(string)<br> source_subnetwork_ip_ranges_to_nat = optional(string)<br> nat_ips = optional(list(string), [])<br> min_ports_per_vm = optional(number)<br> max_ports_per_vm = optional(number)<br> udp_idle_timeout_sec = optional(number)<br> icmp_idle_timeout_sec = optional(number)<br> tcp_established_idle_timeout_sec = optional(number)<br> tcp_transitory_idle_timeout_sec = optional(number)<br> tcp_time_wait_timeout_sec = optional(number)<br> enable_endpoint_independent_mapping = optional(bool)<br> enable_dynamic_port_allocation = optional(bool)<br><br> log_config = optional(object({<br> enable = optional(bool, true)<br> filter = optional(string, "ALL")<br> }), {})<br><br> subnetworks = optional(list(object({<br> name = string<br> source_ip_ranges_to_nat = list(string)<br> secondary_ip_range_names = optional(list(string))<br> })), [])<br><br> }))</pre> | `[]` | no |
4949
| network | A reference to the network to which this router belongs | `string` | n/a | yes |
5050
| project | The project ID to deploy to | `string` | n/a | yes |
5151
| region | Region where the router resides | `string` | n/a | yes |

examples/nat/main.tf

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,21 @@ module "vpc" {
2121
project_id = var.project_id
2222
network_name = "test-network"
2323
routing_mode = "GLOBAL"
24-
subnets = []
24+
subnets = [
25+
{
26+
subnet_name = "test-subnet-01"
27+
subnet_ip = "10.10.10.0/24"
28+
subnet_region = "us-central1"
29+
}
30+
]
31+
secondary_ranges = {
32+
test-subnet-01 = [
33+
{
34+
range_name = "test-subnet-01-secondary-01"
35+
ip_cidr_range = "192.168.64.0/24"
36+
},
37+
]
38+
}
2539
}
2640

2741

@@ -35,7 +49,15 @@ module "cloud_router" {
3549
region = "us-central1"
3650

3751
nats = [{
38-
name = "my-nat-gateway"
52+
name = "my-nat-gateway"
53+
source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
54+
subnetworks = [
55+
{
56+
name = module.vpc.subnets["us-central1/test-subnet-01"].id
57+
source_ip_ranges_to_nat = ["PRIMARY_IP_RANGE", "LIST_OF_SECONDARY_IP_RANGES"]
58+
secondary_ip_range_names = module.vpc.subnets["us-central1/test-subnet-01"].secondary_ip_range[*].range_name
59+
}
60+
]
3961
}]
4062
}
4163
# [END cloudnat_simple_create]

nat.tf

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,30 @@ resource "google_compute_router_nat" "nats" {
2424
project = google_compute_router.router.project
2525
router = google_compute_router.router.name
2626
region = google_compute_router.router.region
27-
nat_ip_allocate_option = coalesce(each.value.nat_ip_allocate_option, length(lookup(each.value, "nat_ips", [])) > 0 ? "MANUAL_ONLY" : "AUTO_ONLY")
27+
nat_ip_allocate_option = coalesce(each.value.nat_ip_allocate_option, length(each.value.nat_ips) > 0 ? "MANUAL_ONLY" : "AUTO_ONLY")
2828
source_subnetwork_ip_ranges_to_nat = coalesce(each.value.source_subnetwork_ip_ranges_to_nat, "ALL_SUBNETWORKS_ALL_IP_RANGES")
29-
nat_ips = lookup(each.value, "nat_ips")
30-
min_ports_per_vm = lookup(each.value, "min_ports_per_vm")
31-
max_ports_per_vm = lookup(each.value, "max_ports_per_vm")
32-
udp_idle_timeout_sec = lookup(each.value, "udp_idle_timeout_sec")
33-
icmp_idle_timeout_sec = lookup(each.value, "icmp_idle_timeout_sec")
34-
tcp_established_idle_timeout_sec = lookup(each.value, "tcp_established_idle_timeout_sec")
35-
tcp_transitory_idle_timeout_sec = lookup(each.value, "tcp_transitory_idle_timeout_sec")
36-
tcp_time_wait_timeout_sec = lookup(each.value, "tcp_time_wait_timeout_sec")
37-
enable_endpoint_independent_mapping = lookup(each.value, "enable_endpoint_independent_mapping")
38-
enable_dynamic_port_allocation = lookup(each.value, "enable_dynamic_port_allocation")
29+
nat_ips = each.value.nat_ips
30+
min_ports_per_vm = each.value.min_ports_per_vm
31+
max_ports_per_vm = each.value.max_ports_per_vm
32+
udp_idle_timeout_sec = each.value.udp_idle_timeout_sec
33+
icmp_idle_timeout_sec = each.value.icmp_idle_timeout_sec
34+
tcp_established_idle_timeout_sec = each.value.tcp_established_idle_timeout_sec
35+
tcp_transitory_idle_timeout_sec = each.value.tcp_transitory_idle_timeout_sec
36+
tcp_time_wait_timeout_sec = each.value.tcp_time_wait_timeout_sec
37+
enable_endpoint_independent_mapping = each.value.enable_endpoint_independent_mapping
38+
enable_dynamic_port_allocation = each.value.enable_dynamic_port_allocation
3939

4040
log_config {
41-
enable = lookup(lookup(each.value, "log_config", {}), "enable", true)
42-
filter = lookup(lookup(each.value, "log_config", {}), "filter", "ALL")
41+
enable = each.value.log_config.enable
42+
filter = each.value.log_config.filter
4343
}
4444

4545
dynamic "subnetwork" {
46-
for_each = lookup(each.value, "subnetworks", [])
46+
for_each = each.value.subnetworks
4747
content {
4848
name = subnetwork.value.name
4949
source_ip_ranges_to_nat = subnetwork.value.source_ip_ranges_to_nat
50-
secondary_ip_range_names = lookup(subnetwork.value, "secondary_ip_range_names", null)
50+
secondary_ip_range_names = subnetwork.value.secondary_ip_range_names
5151
}
5252
}
5353
}

variables.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ variable "nats" {
104104

105105
subnetworks = optional(list(object({
106106
name = string
107-
source_ip_ranges_to_nat = string
108-
secondary_ip_range_names = optional(string)
107+
source_ip_ranges_to_nat = list(string)
108+
secondary_ip_range_names = optional(list(string))
109109
})), [])
110110

111111
}))

0 commit comments

Comments
 (0)