Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +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_instance_ip.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip) | resource |
| [scaleway_instance_ip_reverse_dns.this](https://registry.terraform.io/providers/scaleway/scaleway/latest/docs/resources/instance_ip_reverse_dns) | 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.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.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
Expand Down
39 changes: 39 additions & 0 deletions ipv4.tf
Original file line number Diff line number Diff line change
@@ -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"
}
29 changes: 29 additions & 0 deletions ipv6.tf
Original file line number Diff line number Diff line change
@@ -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"
}
5 changes: 5 additions & 0 deletions locals.tf
Original file line number Diff line number Diff line change
@@ -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
}
56 changes: 6 additions & 50 deletions main.tf
Original file line number Diff line number Diff line change
@@ -1,33 +1,3 @@
moved {
from = scaleway_instance_ip.public_ipv4
to = scaleway_instance_ip.this
}

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" "this" {
count = var.enable_public_ipv4 ? 1 : 0

project_id = var.project_id
zone = var.zone
}

resource "scaleway_instance_ip_reverse_dns" "this" {
count = var.enable_public_ipv4 && (var.domainname != null) ? 1 : 0

ip_id = scaleway_instance_ip.this[count.index].id
reverse = local.effective_fqdn
zone = var.zone

depends_on = [
scaleway_domain_record.ip4,
]
}

resource "scaleway_instance_server" "this" {
image = var.image
type = var.instance_type
Expand All @@ -50,10 +20,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.public_ipv4[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 {
Expand All @@ -69,21 +43,3 @@ resource "scaleway_instance_server" "this" {
project_id = var.project_id
zone = var.zone
}

resource "scaleway_domain_record" "ip4" {
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" "ip6" {
count = var.domainname != null && var.enable_ipv6 && var.state != "stopped" ? 1 : 0

data = scaleway_instance_server.this.ipv6_address
dns_zone = var.domainname
name = local.effective_hostname
type = "AAAA"
}
4 changes: 2 additions & 2 deletions outputs.tf
Original file line number Diff line number Diff line change
@@ -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" {
Expand Down