I am running through an issue that I need help with. I have this variable structure:
<code>variable "dns" {
type = map(object({
name = string
hostname = string
dns_ips = list(string)
}))
default = {
"server1" = {
pretty_name = "Server One"
hostname = "vm-01"
dns_ips = ["128.0.0.8", "128.0.0.9", "128.0.0.10"]
}
"server2" = {
pretty_name = "Server Two"
isp_hostname = "vm-01"
dns_ips = ["129.0.0.8", "129.0.0.9", "129.0.0.10", "129.0.0.11"]
}
}
}
</code>
<code>variable "dns" {
type = map(object({
name = string
hostname = string
dns_ips = list(string)
}))
default = {
"server1" = {
pretty_name = "Server One"
hostname = "vm-01"
dns_ips = ["128.0.0.8", "128.0.0.9", "128.0.0.10"]
}
"server2" = {
pretty_name = "Server Two"
isp_hostname = "vm-01"
dns_ips = ["129.0.0.8", "129.0.0.9", "129.0.0.10", "129.0.0.11"]
}
}
}
</code>
variable "dns" {
type = map(object({
name = string
hostname = string
dns_ips = list(string)
}))
default = {
"server1" = {
pretty_name = "Server One"
hostname = "vm-01"
dns_ips = ["128.0.0.8", "128.0.0.9", "128.0.0.10"]
}
"server2" = {
pretty_name = "Server Two"
isp_hostname = "vm-01"
dns_ips = ["129.0.0.8", "129.0.0.9", "129.0.0.10", "129.0.0.11"]
}
}
}
I want to create a resource “datadog_synthetic_test” which create a DNS test for each of the server.
I want to create multiple resources [with for each]. My end goal is 7 resources:
- vm1, ip1
- vm1, ip2
- vm1, ip3
- vm2, ip1
- vm2, ip2
- vm2, ip3
- vm2, ip4
I know that I need to use flatten but I can’t figure it out…
Resource example:
<code>resource "datadog_synthetics_test" "dns_test" {
for_each = {
for server_name, server_info in var.dns : server_name => server_info.dns_ips
}
name = "${var.synthetic_prefix} ${each.key} - Resolve @${dns_ip.value}"
request_definition {
dns_server = dns_ip.value
dns_server_port = 0
host = var.dns_domain_name[0]
no_saving_response_body = false
number_of_packets = 0
port = 0
should_track_hops = false
timeout = 0
}
}
</code>
<code>resource "datadog_synthetics_test" "dns_test" {
for_each = {
for server_name, server_info in var.dns : server_name => server_info.dns_ips
}
name = "${var.synthetic_prefix} ${each.key} - Resolve @${dns_ip.value}"
request_definition {
dns_server = dns_ip.value
dns_server_port = 0
host = var.dns_domain_name[0]
no_saving_response_body = false
number_of_packets = 0
port = 0
should_track_hops = false
timeout = 0
}
}
</code>
resource "datadog_synthetics_test" "dns_test" {
for_each = {
for server_name, server_info in var.dns : server_name => server_info.dns_ips
}
name = "${var.synthetic_prefix} ${each.key} - Resolve @${dns_ip.value}"
request_definition {
dns_server = dns_ip.value
dns_server_port = 0
host = var.dns_domain_name[0]
no_saving_response_body = false
number_of_packets = 0
port = 0
should_track_hops = false
timeout = 0
}
}
I tried using for_each as above, I tried to implement flatten but the end result was that an error occurred for
each.value is list of string with 3 elements