From 6b6e9f1c55ae152cebb31e6ba137726871616e87 Mon Sep 17 00:00:00 2001 From: Benoit Garcia Date: Tue, 28 Nov 2023 06:48:49 +0100 Subject: [PATCH 1/5] fix: Set type on instance IP. --- main.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/main.tf b/main.tf index 809640c..f4c06fe 100644 --- a/main.tf +++ b/main.tf @@ -13,6 +13,7 @@ resource "scaleway_instance_ip" "this" { count = var.enable_public_ipv4 ? 1 : 0 project_id = var.project_id + type = var.routed_ip_enabled ? "routed_ipv4" : "nat" zone = var.zone } From 40aaa45f7f2ee768453d9ffc42a7f71de936eb9a Mon Sep 17 00:00:00 2001 From: Benoit Garcia Date: Tue, 28 Nov 2023 06:53:27 +0100 Subject: [PATCH 2/5] fix: Provision routed ipv6 address. --- README.md | 2 ++ main.tf | 26 +++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 96cd158..09d5e99 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,9 @@ module "my_instance" { |------|------| | [scaleway_domain_record.ip4](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | | [scaleway_domain_record.ip6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | +| [scaleway_instance_ip.ipv6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource | | [scaleway_instance_ip.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource | +| [scaleway_instance_ip_reverse_dns.ipv6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | resource | | [scaleway_instance_ip_reverse_dns.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | resource | | [scaleway_instance_server.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_server) | resource | diff --git a/main.tf b/main.tf index f4c06fe..5716076 100644 --- a/main.tf +++ b/main.tf @@ -29,6 +29,22 @@ resource "scaleway_instance_ip_reverse_dns" "this" { ] } +resource "scaleway_instance_ip" "ipv6" { + count = var.enable_ipv6 && var.routed_ip_enabled ? 1 : 0 + + project_id = var.project_id + type = "routed_ipv6" + zone = var.zone +} + +resource "scaleway_instance_ip_reverse_dns" "ipv6" { + count = var.enable_ipv6 && var.routed_ip_enabled && (var.domainname != null) ? 1 : 0 + + ip_id = scaleway_instance_ip.ipv6[count.index].id + reverse = local.effective_fqdn + zone = var.zone +} + resource "scaleway_instance_server" "this" { image = var.image type = var.instance_type @@ -51,10 +67,14 @@ resource "scaleway_instance_server" "this" { } enable_dynamic_ip = var.enable_public_ipv4 - enable_ipv6 = var.enable_ipv6 - ip_id = var.enable_public_ipv4 == true ? scaleway_instance_ip.this[0].id : null + enable_ipv6 = var.routed_ip_enabled ? null : var.enable_ipv6 routed_ip_enabled = var.routed_ip_enabled + ip_ids = tolist([ + var.enable_public_ipv4 ? scaleway_instance_ip.this[0].id : null, + var.enable_ipv6 && var.routed_ip_enabled ? scaleway_instance_ip.ipv6[0].id : null, + ]) + dynamic "private_network" { for_each = toset(var.private_networks) content { @@ -83,7 +103,7 @@ resource "scaleway_domain_record" "ip4" { resource "scaleway_domain_record" "ip6" { count = var.domainname != null && var.enable_ipv6 && var.state != "stopped" ? 1 : 0 - data = scaleway_instance_server.this.ipv6_address + data = var.routed_ip_enabled ? one([for item in scaleway_instance_server.this.public_ips[*].address : item if can(regex(":", item))]) : scaleway_instance_server.this.ipv6_address dns_zone = var.domainname name = local.effective_hostname type = "AAAA" From 8fcc184dfb6312c48155ca7b1d4c74a992a61f06 Mon Sep 17 00:00:00 2001 From: Benoit Garcia Date: Tue, 28 Nov 2023 06:56:58 +0100 Subject: [PATCH 3/5] chore: Harmonize resource names. --- README.md | 8 ++++---- main.tf | 35 +++++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 09d5e99..701f1e4 100644 --- a/README.md +++ b/README.md @@ -37,12 +37,12 @@ module "my_instance" { | Name | Type | |------|------| -| [scaleway_domain_record.ip4](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | -| [scaleway_domain_record.ip6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | +| [scaleway_domain_record.ipv4](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | +| [scaleway_domain_record.ipv6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/domain_record) | resource | | [scaleway_instance_ip.ipv6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource | -| [scaleway_instance_ip.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource | +| [scaleway_instance_ip.public_ipv4](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource | | [scaleway_instance_ip_reverse_dns.ipv6](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | resource | -| [scaleway_instance_ip_reverse_dns.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | resource | +| [scaleway_instance_ip_reverse_dns.public_ipv4](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | resource | | [scaleway_instance_server.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_server) | resource | ## Inputs diff --git a/main.tf b/main.tf index 5716076..eb861c9 100644 --- a/main.tf +++ b/main.tf @@ -1,6 +1,21 @@ moved { - from = scaleway_instance_ip.public_ipv4 - to = scaleway_instance_ip.this + from = scaleway_instance_ip.this + to = scaleway_instance_ip.public_ipv4 +} + +moved { + from = scaleway_instance_ip_reverse_dns.this + to = scaleway_instance_ip_reverse_dns.public_ipv4 +} + +moved { + from = scaleway_domain_record.ip4 + to = scaleway_domain_record.ipv4 +} + +moved { + from = scaleway_domain_record.ip6 + to = scaleway_domain_record.ipv6 } locals { @@ -9,7 +24,7 @@ locals { effective_fqdn = var.domainname != null ? format("%s.%s", local.effective_hostname, var.domainname) : local.effective_hostname } -resource "scaleway_instance_ip" "this" { +resource "scaleway_instance_ip" "public_ipv4" { count = var.enable_public_ipv4 ? 1 : 0 project_id = var.project_id @@ -17,16 +32,12 @@ resource "scaleway_instance_ip" "this" { zone = var.zone } -resource "scaleway_instance_ip_reverse_dns" "this" { +resource "scaleway_instance_ip_reverse_dns" "public_ipv4" { count = var.enable_public_ipv4 && (var.domainname != null) ? 1 : 0 - ip_id = scaleway_instance_ip.this[count.index].id + ip_id = scaleway_instance_ip.public_ipv4[count.index].id reverse = local.effective_fqdn zone = var.zone - - depends_on = [ - scaleway_domain_record.ip4, - ] } resource "scaleway_instance_ip" "ipv6" { @@ -71,7 +82,7 @@ resource "scaleway_instance_server" "this" { routed_ip_enabled = var.routed_ip_enabled ip_ids = tolist([ - var.enable_public_ipv4 ? scaleway_instance_ip.this[0].id : null, + var.enable_public_ipv4 ? scaleway_instance_ip.public_ipv4[0].id : null, var.enable_ipv6 && var.routed_ip_enabled ? scaleway_instance_ip.ipv6[0].id : null, ]) @@ -91,7 +102,7 @@ resource "scaleway_instance_server" "this" { zone = var.zone } -resource "scaleway_domain_record" "ip4" { +resource "scaleway_domain_record" "ipv4" { count = var.domainname != null ? 1 : 0 data = var.enable_public_ipv4 ? scaleway_instance_server.this.public_ip : scaleway_instance_server.this.private_ip @@ -100,7 +111,7 @@ resource "scaleway_domain_record" "ip4" { type = "A" } -resource "scaleway_domain_record" "ip6" { +resource "scaleway_domain_record" "ipv6" { count = var.domainname != null && var.enable_ipv6 && var.state != "stopped" ? 1 : 0 data = var.routed_ip_enabled ? one([for item in scaleway_instance_server.this.public_ips[*].address : item if can(regex(":", item))]) : scaleway_instance_server.this.ipv6_address From eabb80e03160ac990249bb6b2570388398dbedbd Mon Sep 17 00:00:00 2001 From: Benoit Garcia Date: Tue, 28 Nov 2023 07:00:35 +0100 Subject: [PATCH 4/5] chore: Split module in several files. --- ipv4.tf | 39 ++++++++++++++++++++++++++++ ipv6.tf | 29 +++++++++++++++++++++ locals.tf | 5 ++++ main.tf | 76 ------------------------------------------------------- 4 files changed, 73 insertions(+), 76 deletions(-) create mode 100644 ipv4.tf create mode 100644 ipv6.tf create mode 100644 locals.tf diff --git a/ipv4.tf b/ipv4.tf new file mode 100644 index 0000000..7c231e4 --- /dev/null +++ b/ipv4.tf @@ -0,0 +1,39 @@ +moved { + from = scaleway_instance_ip.this + to = scaleway_instance_ip.public_ipv4 +} + +moved { + from = scaleway_instance_ip_reverse_dns.this + to = scaleway_instance_ip_reverse_dns.public_ipv4 +} + +moved { + from = scaleway_domain_record.ip4 + to = scaleway_domain_record.ipv4 +} + +resource "scaleway_instance_ip" "public_ipv4" { + count = var.enable_public_ipv4 ? 1 : 0 + + project_id = var.project_id + type = var.routed_ip_enabled ? "routed_ipv4" : "nat" + zone = var.zone +} + +resource "scaleway_instance_ip_reverse_dns" "public_ipv4" { + count = var.enable_public_ipv4 && (var.domainname != null) ? 1 : 0 + + ip_id = scaleway_instance_ip.public_ipv4[count.index].id + reverse = local.effective_fqdn + zone = var.zone +} + +resource "scaleway_domain_record" "ipv4" { + count = var.domainname != null ? 1 : 0 + + data = var.enable_public_ipv4 ? scaleway_instance_server.this.public_ip : scaleway_instance_server.this.private_ip + dns_zone = var.domainname + name = local.effective_hostname + type = "A" +} diff --git a/ipv6.tf b/ipv6.tf new file mode 100644 index 0000000..d5eadfc --- /dev/null +++ b/ipv6.tf @@ -0,0 +1,29 @@ +moved { + from = scaleway_domain_record.ip6 + to = scaleway_domain_record.ipv6 +} + +resource "scaleway_instance_ip" "ipv6" { + count = var.enable_ipv6 && var.routed_ip_enabled ? 1 : 0 + + project_id = var.project_id + type = "routed_ipv6" + zone = var.zone +} + +resource "scaleway_instance_ip_reverse_dns" "ipv6" { + count = var.enable_ipv6 && var.routed_ip_enabled && (var.domainname != null) ? 1 : 0 + + ip_id = scaleway_instance_ip.ipv6[count.index].id + reverse = local.effective_fqdn + zone = var.zone +} + +resource "scaleway_domain_record" "ipv6" { + count = var.domainname != null && var.enable_ipv6 && var.state != "stopped" ? 1 : 0 + + data = var.routed_ip_enabled ? one([for item in scaleway_instance_server.this.public_ips[*].address : item if can(regex(":", item))]) : scaleway_instance_server.this.ipv6_address + dns_zone = var.domainname + name = local.effective_hostname + type = "AAAA" +} diff --git a/locals.tf b/locals.tf new file mode 100644 index 0000000..2253777 --- /dev/null +++ b/locals.tf @@ -0,0 +1,5 @@ +locals { + requested_fqdn = (var.hostname != null && var.domainname != null) ? format("%s.%s", var.hostname, var.domainname) : var.hostname + effective_hostname = var.domainname != null ? trimsuffix(trimsuffix(scaleway_instance_server.this.name, var.domainname), ".") : scaleway_instance_server.this.name + effective_fqdn = var.domainname != null ? format("%s.%s", local.effective_hostname, var.domainname) : local.effective_hostname +} diff --git a/main.tf b/main.tf index eb861c9..32c4433 100644 --- a/main.tf +++ b/main.tf @@ -1,61 +1,3 @@ -moved { - from = scaleway_instance_ip.this - to = scaleway_instance_ip.public_ipv4 -} - -moved { - from = scaleway_instance_ip_reverse_dns.this - to = scaleway_instance_ip_reverse_dns.public_ipv4 -} - -moved { - from = scaleway_domain_record.ip4 - to = scaleway_domain_record.ipv4 -} - -moved { - from = scaleway_domain_record.ip6 - to = scaleway_domain_record.ipv6 -} - -locals { - requested_fqdn = (var.hostname != null && var.domainname != null) ? format("%s.%s", var.hostname, var.domainname) : var.hostname - effective_hostname = var.domainname != null ? trimsuffix(trimsuffix(scaleway_instance_server.this.name, var.domainname), ".") : scaleway_instance_server.this.name - effective_fqdn = var.domainname != null ? format("%s.%s", local.effective_hostname, var.domainname) : local.effective_hostname -} - -resource "scaleway_instance_ip" "public_ipv4" { - count = var.enable_public_ipv4 ? 1 : 0 - - project_id = var.project_id - type = var.routed_ip_enabled ? "routed_ipv4" : "nat" - zone = var.zone -} - -resource "scaleway_instance_ip_reverse_dns" "public_ipv4" { - count = var.enable_public_ipv4 && (var.domainname != null) ? 1 : 0 - - ip_id = scaleway_instance_ip.public_ipv4[count.index].id - reverse = local.effective_fqdn - zone = var.zone -} - -resource "scaleway_instance_ip" "ipv6" { - count = var.enable_ipv6 && var.routed_ip_enabled ? 1 : 0 - - project_id = var.project_id - type = "routed_ipv6" - zone = var.zone -} - -resource "scaleway_instance_ip_reverse_dns" "ipv6" { - count = var.enable_ipv6 && var.routed_ip_enabled && (var.domainname != null) ? 1 : 0 - - ip_id = scaleway_instance_ip.ipv6[count.index].id - reverse = local.effective_fqdn - zone = var.zone -} - resource "scaleway_instance_server" "this" { image = var.image type = var.instance_type @@ -101,21 +43,3 @@ resource "scaleway_instance_server" "this" { project_id = var.project_id zone = var.zone } - -resource "scaleway_domain_record" "ipv4" { - count = var.domainname != null ? 1 : 0 - - data = var.enable_public_ipv4 ? scaleway_instance_server.this.public_ip : scaleway_instance_server.this.private_ip - dns_zone = var.domainname - name = local.effective_hostname - type = "A" -} - -resource "scaleway_domain_record" "ipv6" { - count = var.domainname != null && var.enable_ipv6 && var.state != "stopped" ? 1 : 0 - - data = var.routed_ip_enabled ? one([for item in scaleway_instance_server.this.public_ips[*].address : item if can(regex(":", item))]) : scaleway_instance_server.this.ipv6_address - dns_zone = var.domainname - name = local.effective_hostname - type = "AAAA" -} From 872989b59393b69a5f85196b51a30dca1c562a66 Mon Sep 17 00:00:00 2001 From: Benoit Garcia Date: Tue, 28 Nov 2023 07:04:16 +0100 Subject: [PATCH 5/5] fix: Fix outputs. --- outputs.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/outputs.tf b/outputs.tf index a152302..c15e98c 100644 --- a/outputs.tf +++ b/outputs.tf @@ -1,11 +1,11 @@ output "ip4" { description = "IPv4 address of the intance." - value = var.enable_public_ipv4 ? scaleway_instance_server.this.public_ip : scaleway_instance_server.this.private_ip + value = var.enable_public_ipv4 ? (var.routed_ip_enabled ? scaleway_instance_ip.public_ipv4[0].address : scaleway_instance_server.this.public_ip) : scaleway_instance_server.this.private_ip } output "ip6" { description = "IPv6 address of the instance." - value = scaleway_instance_server.this.ipv6_address + value = var.enable_ipv6 && var.routed_ip_enabled ? one([for item in scaleway_instance_server.this.public_ips[*].address : item if can(regex(":", item))]) : scaleway_instance_server.this.ipv6_address } output "name" {