main.networking.dns.tf (138 lines of code) (raw):

#Create additional forwarder zones resource "azapi_resource" "dns_forwarder_zones" { for_each = var.dns_forwarder_zones type = "Microsoft.AVS/privateClouds/workloadNetworks/dnsZones@2023-09-01" body = { properties = { displayName = each.value.display_name dnsServerIps = each.value.dns_server_ips domain = each.value.domain_names sourceIp = each.value.source_ip #revision = each.value.revision } } name = each.key parent_id = "${azapi_resource.this_private_cloud.id}/workloadNetworks/default" timeouts { create = "4h" delete = "4h" } depends_on = [ azapi_resource.this_private_cloud, azapi_resource.clusters, azurerm_role_assignment.this_private_cloud, azurerm_monitor_diagnostic_setting.this_private_cloud_diags, #azapi_update_resource.managed_identity, azapi_update_resource.customer_managed_key, azapi_resource.hcx_addon, azapi_resource.hcx_keys, azapi_resource.srm_addon, azapi_resource.vr_addon, azurerm_express_route_connection.avs_private_cloud_connection, azurerm_express_route_connection.avs_private_cloud_connection_additional, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional, azapi_resource.globalreach_connections, azapi_resource.avs_interconnect ] } #get the default DNS zone details #read in a private cloud dns services data "azapi_resource_action" "avs_dns" { type = "Microsoft.AVS/privateClouds/workloadNetworks/dnsServices@2023-09-01" method = "GET" resource_id = "${azapi_resource.this_private_cloud.id}/workloadNetworks/default/dnsServices" response_export_values = ["*"] depends_on = [ azapi_resource.this_private_cloud, azapi_resource.clusters, azurerm_role_assignment.this_private_cloud, azurerm_monitor_diagnostic_setting.this_private_cloud_diags, #azapi_update_resource.managed_identity, azapi_update_resource.customer_managed_key, azapi_resource.hcx_addon, azapi_resource.hcx_keys, azapi_resource.srm_addon, azapi_resource.vr_addon, azurerm_express_route_connection.avs_private_cloud_connection, azurerm_express_route_connection.avs_private_cloud_connection_additional, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional, azapi_resource.globalreach_connections, azapi_resource.avs_interconnect, azapi_resource.dns_forwarder_zones ] } locals { dns_details = jsondecode(data.azapi_resource_action.avs_dns.output) } resource "azapi_resource_action" "dns_service" { count = (length(keys(var.dns_forwarder_zones))) == 0 ? 0 : 1 resource_id = "${azapi_resource.this_private_cloud.id}/workloadNetworks/default/dnsServices/dns-forwarder" type = "Microsoft.AVS/privateClouds/workloadNetworks/dnsServices@2023-09-01" #if zone information defined populate the properties body = { properties = { #defaultDnsZone = data.azapi_resource_action.avs_dns.output.value[0].properties.defaultDnsZone #TODO: put these back when AzAPI 2.0 comes out. defaultDnsZone = local.dns_details.value[0].properties.defaultDnsZone #displayName = data.azapi_resource_action.avs_dns.output.value[0].properties.displayName displayName = local.dns_details.value[0].properties.displayName #dnsServiceIp = data.azapi_resource_action.avs_dns.output.value[0].properties.dnsServiceIp dnsServiceIp = local.dns_details.value[0].properties.dnsServiceIp fqdnZones = try([for key, zone in var.dns_forwarder_zones : key if zone.add_to_default_dns_service], []) #logLevel = data.azapi_resource_action.avs_dns.output.value[0].properties.logLevel logLevel = local.dns_details.value[0].properties.logLevel } } method = "PATCH" when = "apply" timeouts { create = "4h" delete = "4h" } depends_on = [ azapi_resource.this_private_cloud, azapi_resource.clusters, azurerm_role_assignment.this_private_cloud, azurerm_monitor_diagnostic_setting.this_private_cloud_diags, #azapi_update_resource.managed_identity, azapi_update_resource.customer_managed_key, azapi_resource.hcx_addon, azapi_resource.hcx_keys, azapi_resource.srm_addon, azapi_resource.vr_addon, azurerm_express_route_connection.avs_private_cloud_connection, azurerm_express_route_connection.avs_private_cloud_connection_additional, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional, azapi_resource.globalreach_connections, azapi_resource.avs_interconnect, azapi_resource.dns_forwarder_zones ] } resource "azapi_resource_action" "dns_service_destroy_non_empty_start" { count = length(keys(var.dns_forwarder_zones)) > 0 ? 1 : 0 resource_id = "${azapi_resource.this_private_cloud.id}/workloadNetworks/default/dnsServices/dns-forwarder" type = "Microsoft.AVS/privateClouds/workloadNetworks/dnsServices@2023-09-01" #if zone information defined populate the properties body = { properties = { #defaultDnsZone = data.azapi_resource_action.avs_dns.output.value[0].properties.defaultDnsZone #TODO: Set these back when AzAPI 2.0 goes GA. defaultDnsZone = local.dns_details.value[0].properties.defaultDnsZone #displayName = data.azapi_resource_action.avs_dns.output.value[0].properties.displayName displayName = local.dns_details.value[0].properties.displayName #dnsServiceIp = data.azapi_resource_action.avs_dns.output.value[0].properties.dnsServiceIp dnsServiceIp = local.dns_details.value[0].properties.dnsServiceIp fqdnZones = [] #logLevel = data.azapi_resource_action.avs_dns.output.value[0].properties.logLevel logLevel = local.dns_details.value[0].properties.logLevel #revision = 0 } } method = "PATCH" when = "destroy" timeouts { create = "4h" delete = "4h" } depends_on = [ azapi_resource.this_private_cloud, azapi_resource.clusters, azurerm_role_assignment.this_private_cloud, azurerm_monitor_diagnostic_setting.this_private_cloud_diags, #azapi_update_resource.managed_identity, azapi_update_resource.customer_managed_key, azapi_resource.hcx_addon, azapi_resource.hcx_keys, azapi_resource.srm_addon, azapi_resource.vr_addon, azurerm_express_route_connection.avs_private_cloud_connection, azurerm_express_route_connection.avs_private_cloud_connection_additional, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection, azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional, azapi_resource.globalreach_connections, azapi_resource.avs_interconnect, azapi_resource.dns_forwarder_zones ] }