demo_solution/modules/repo_terraform.azurerm.private_dns/main.tf (108 lines of code) (raw):
# Create a private DNS zone
resource "azurerm_private_dns_zone" "private_dns" {
name = var.private_dns_zone_name
resource_group_name = var.private_dns_zone_rg_name
tags = var.tags
dynamic "soa_record" {
for_each = var.records != null ? { for soa in var.records.soa_records : soa.soa_email_contact => soa } : {}
content {
email = soa_record.value.email
expire_time = soa_record.value.expire_time
minimum_ttl = soa_record.value.minimum_ttl
refresh_time = soa_record.value.refresh_time
retry_time = soa_record.value.retry_time
ttl = soa_record.value.ttl
tags = var.tags
}
}
}
# Create a link to VNET
resource "azurerm_private_dns_zone_virtual_network_link" "link" {
# Get VNET name from VNET ID and build the map
for_each = { for vnet in var.vnet_list : element(split("/", vnet.virtual_network_id), length(split("/", vnet.virtual_network_id)) - 1) => vnet }
name = "${each.key}-network-link"
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
private_dns_zone_name = azurerm_private_dns_zone.private_dns.name
virtual_network_id = each.value.virtual_network_id
registration_enabled = each.value.registration_enabled
tags = var.tags
}
# Create a DNS A Records within Azure Private DNS
resource "azurerm_private_dns_a_record" "a_records" {
for_each = var.records != null ? { for a in var.records.a_records : a.name => a } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
records = each.value.records
tags = var.tags
}
# Create a DNS AAAA Records within Azure Private DNS
resource "azurerm_private_dns_aaaa_record" "aaaa_records" {
for_each = var.records != null ? { for aaaa in var.records.aaaa_records : aaaa.name => aaaa } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
records = each.value.records
tags = var.tags
}
# Create a DNS CNAME Records within Azure Private DNS
resource "azurerm_private_dns_cname_record" "cname_records" {
for_each = var.records != null ? { for cname in var.records.cname_records : cname.name => cname } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
record = each.value.record
tags = var.tags
}
# Create a DNS MX Records within Azure Private DNS
resource "azurerm_private_dns_mx_record" "mx_records" {
for_each = var.records != null ? { for mx in var.records.mx_records : mx.name => mx } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
tags = var.tags
dynamic "record" {
for_each = { for rec in each.value.record : rec.preference => rec }
content {
preference = record.value.preference
exchange = record.value.exchange
}
}
}
# Create a DNS PTR Records within Azure Private DNS
resource "azurerm_private_dns_ptr_record" "ptr_records" {
for_each = var.records != null ? { for ptr in var.records.ptr_records : ptr.name => ptr } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
records = each.value.records
tags = var.tags
}
# Create a DNS SRV Records within Azure Private DNS
resource "azurerm_private_dns_srv_record" "srv_records" {
for_each = var.records != null ? { for srv in var.records.srv_records : srv.name => srv } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
tags = var.tags
dynamic "record" {
for_each = { for rec in each.value.record : rec.target => rec }
content {
priority = record.value.priority
weight = record.value.weight
port = record.value.port
target = record.value.target
}
}
}
# Create a DNS TXT Records within Azure Private DNS
resource "azurerm_private_dns_txt_record" "txt_records" {
for_each = var.records != null ? { for txt in var.records.txt_records : txt.name => txt } : {}
name = each.value.name
resource_group_name = azurerm_private_dns_zone.private_dns.resource_group_name
zone_name = azurerm_private_dns_zone.private_dns.name
ttl = each.value.ttl
tags = var.tags
dynamic "record" {
for_each = { for rec in each.value.record : rec.value => rec }
content {
value = record.value.value
}
}
}