main.tf (196 lines of code) (raw):

moved { from = random_string.default_custom_subdomain_name_suffix to = random_string.default_custom_subdomain_name_suffix[0] } resource "random_string" "default_custom_subdomain_name_suffix" { count = var.kind != "AIServices" ? 1 : 0 length = 5 special = false upper = false } moved { from = azurerm_cognitive_account.this to = azurerm_cognitive_account.this[0] } resource "azurerm_cognitive_account" "this" { count = var.kind != "AIServices" ? 1 : 0 kind = var.kind location = var.location name = var.name resource_group_name = var.resource_group_name sku_name = var.sku_name custom_question_answering_search_service_id = var.custom_question_answering_search_service_id custom_question_answering_search_service_key = var.custom_question_answering_search_service_key custom_subdomain_name = coalesce(var.custom_subdomain_name, "azure-cognitive-${random_string.default_custom_subdomain_name_suffix[0].result}") dynamic_throttling_enabled = var.dynamic_throttling_enabled fqdns = var.fqdns local_auth_enabled = var.local_auth_enabled metrics_advisor_aad_client_id = var.metrics_advisor_aad_client_id metrics_advisor_aad_tenant_id = var.metrics_advisor_aad_tenant_id metrics_advisor_super_user_name = var.metrics_advisor_super_user_name metrics_advisor_website_name = var.metrics_advisor_website_name outbound_network_access_restricted = var.outbound_network_access_restricted public_network_access_enabled = var.public_network_access_enabled qna_runtime_endpoint = var.qna_runtime_endpoint tags = var.tags dynamic "identity" { for_each = (var.managed_identities.system_assigned || length(var.managed_identities.user_assigned_resource_ids) > 0) ? { this = var.managed_identities } : {} content { type = identity.value.system_assigned && length(identity.value.user_assigned_resource_ids) > 0 ? "SystemAssigned, UserAssigned" : length(identity.value.user_assigned_resource_ids) > 0 ? "UserAssigned" : "SystemAssigned" identity_ids = identity.value.user_assigned_resource_ids } } dynamic "network_acls" { for_each = var.network_acls == null ? [] : [var.network_acls] content { default_action = network_acls.value.default_action bypass = network_acls.value.bypass ip_rules = network_acls.value.ip_rules dynamic "virtual_network_rules" { for_each = network_acls.value.virtual_network_rules == null ? [] : network_acls.value.virtual_network_rules content { subnet_id = virtual_network_rules.value.subnet_id ignore_missing_vnet_service_endpoint = virtual_network_rules.value.ignore_missing_vnet_service_endpoint } } } } dynamic "storage" { for_each = var.storage == null ? [] : var.storage content { storage_account_id = storage.value.storage_account_id identity_client_id = storage.value.identity_client_id } } dynamic "timeouts" { for_each = var.timeouts == null ? [] : [var.timeouts] content { create = timeouts.value.create delete = timeouts.value.delete read = timeouts.value.read update = timeouts.value.update } } lifecycle { ignore_changes = [ customer_managed_key, ] precondition { # we cannot add this check on `azurerm_cognitive_account_customer_managed_key` resource, since when `var.is_hsm_key` is `false` the resource won't be created. condition = var.kind == "AIServices" || !var.is_hsm_key error_message = "HSM key could only be used when `var.kind == \"AIServices\"`" } } } locals { managed_key_identity_client_id = try(data.azurerm_user_assigned_identity.this[0].client_id, null) } data "azurerm_key_vault_key" "this" { count = var.customer_managed_key != null && !var.is_hsm_key ? 1 : 0 key_vault_id = var.customer_managed_key.key_vault_resource_id name = var.customer_managed_key.key_name } data "azurerm_key_vault_managed_hardware_security_module_key" "this" { count = var.customer_managed_key != null && var.is_hsm_key ? 1 : 0 managed_hsm_id = var.customer_managed_key.key_vault_resource_id name = var.customer_managed_key.key_name } data "azurerm_user_assigned_identity" "this" { count = try(var.customer_managed_key.user_assigned_identity != null, false) ? 1 : 0 #/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userAssignedIdentityName} name = reverse(split("/", var.customer_managed_key.user_assigned_identity.resource_id))[0] resource_group_name = split("/", var.customer_managed_key.user_assigned_identity.resource_id)[4] } resource "azurerm_cognitive_account_customer_managed_key" "this" { count = var.customer_managed_key != null && !var.is_hsm_key ? 1 : 0 cognitive_account_id = local.resource_block.id key_vault_key_id = data.azurerm_key_vault_key.this[0].id identity_client_id = local.managed_key_identity_client_id dynamic "timeouts" { for_each = var.timeouts == null ? [] : [var.timeouts] content { create = timeouts.value.create delete = timeouts.value.delete read = timeouts.value.read update = timeouts.value.update } } } resource "azurerm_cognitive_deployment" "this" { for_each = var.cognitive_deployments cognitive_account_id = local.resource_block.id name = each.value.name dynamic_throttling_enabled = each.value.dynamic_throttling_enabled rai_policy_name = each.value.rai_policy_name version_upgrade_option = each.value.version_upgrade_option dynamic "model" { for_each = [each.value.model] content { format = model.value.format name = model.value.name version = model.value.version } } dynamic "sku" { for_each = [each.value.scale] iterator = scale content { name = scale.value.type capacity = scale.value.capacity family = scale.value.family size = scale.value.size tier = scale.value.tier } } dynamic "timeouts" { for_each = each.value.timeouts == null ? [] : [each.value.timeouts] content { create = timeouts.value.create delete = timeouts.value.delete read = timeouts.value.read update = timeouts.value.update } } depends_on = [ azurerm_cognitive_account_customer_managed_key.this ] } locals { common_resource = { id = try(azurerm_cognitive_account.this[0].id, azurerm_ai_services.this[0].id) name = try(azurerm_cognitive_account.this[0].name, azurerm_ai_services.this[0].name) location = try(azurerm_cognitive_account.this[0].location, azurerm_ai_services.this[0].location) resource_group_name = try(azurerm_cognitive_account.this[0].resource_group_name, azurerm_ai_services.this[0].resource_group_name) sku_name = try(azurerm_cognitive_account.this[0].sku_name, azurerm_ai_services.this[0].sku_name) custom_subdomain_name = try(azurerm_cognitive_account.this[0].custom_subdomain_name, azurerm_ai_services.this[0].custom_subdomain_name) customer_managed_key = try(azurerm_cognitive_account.this[0].customer_managed_key, azurerm_ai_services.this[0].customer_managed_key) fqdns = try(azurerm_cognitive_account.this[0].fqdns, azurerm_ai_services.this[0].fqdns) identity = try(azurerm_cognitive_account.this[0].identity, azurerm_ai_services.this[0].identity) network_acls = try(azurerm_cognitive_account.this[0].network_acls, azurerm_ai_services.this[0].network_acls) outbound_network_access_restricted = try(azurerm_cognitive_account.this[0].outbound_network_access_restricted, azurerm_ai_services.this[0].outbound_network_access_restricted) storage = try(azurerm_cognitive_account.this[0].storage, azurerm_ai_services.this[0].storage) tags = try(azurerm_cognitive_account.this[0].tags, azurerm_ai_services.this[0].tags) endpoint = try(azurerm_cognitive_account.this[0].endpoint, azurerm_ai_services.this[0].endpoint) } resource_block = merge(local.common_resource, var.kind != "AIServices" ? { kind = azurerm_cognitive_account.this[0].kind dynamic_throttling_enabled = azurerm_cognitive_account.this[0].dynamic_throttling_enabled local_auth_enabled = azurerm_cognitive_account.this[0].local_auth_enabled metrics_advisor_aad_client_id = azurerm_cognitive_account.this[0].metrics_advisor_aad_client_id metrics_advisor_aad_tenant_id = azurerm_cognitive_account.this[0].metrics_advisor_aad_tenant_id metrics_advisor_super_user_name = azurerm_cognitive_account.this[0].metrics_advisor_super_user_name metrics_advisor_website_name = azurerm_cognitive_account.this[0].metrics_advisor_website_name public_network_access_enabled = azurerm_cognitive_account.this[0].public_network_access_enabled qna_runtime_endpoint = azurerm_cognitive_account.this[0].qna_runtime_endpoint custom_question_answering_search_service_id = azurerm_cognitive_account.this[0].custom_question_answering_search_service_id } : { local_authentication_enabled = azurerm_ai_services.this[0].local_authentication_enabled public_network_access = azurerm_ai_services.this[0].public_network_access }) resource_block_sensitive = var.kind != "AIServices" ? { custom_question_answering_search_service_key = azurerm_cognitive_account.this[0].custom_question_answering_search_service_key primary_access_key = azurerm_cognitive_account.this[0].primary_access_key secondary_access_key = azurerm_cognitive_account.this[0].secondary_access_key } : { primary_access_key = azurerm_ai_services.this[0].primary_access_key secondary_access_key = azurerm_ai_services.this[0].secondary_access_key } }