main.aiservies.tf (63 lines of code) (raw):
resource "azurerm_ai_services" "this" {
count = var.kind == "AIServices" ? 1 : 0
location = var.location
name = var.name
resource_group_name = var.resource_group_name
sku_name = var.sku_name
custom_subdomain_name = var.custom_subdomain_name
fqdns = var.fqdns
local_authentication_enabled = var.local_auth_enabled
outbound_network_access_restricted = var.outbound_network_access_restricted
public_network_access = var.public_network_access_enabled ? "Enabled" : "Disabled"
tags = var.tags
dynamic "customer_managed_key" {
for_each = var.is_hsm_key && var.customer_managed_key != null ? [1] : []
content {
identity_client_id = local.managed_key_identity_client_id
# we'll leave the regular key to `azurerm_cognitive_account_customer_managed_key` resource
managed_hsm_key_id = try(data.azurerm_key_vault_managed_hardware_security_module_key.this[0].versioned_id, null)
}
}
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 {
# `bypass` can only be set when `kind` is set to `OpenAI` so no `bypass` here
default_action = network_acls.value.default_action
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 {
precondition {
condition = try(!var.is_hsm_key || can(regex("^\\/subscriptions\\/([a-fA-F0-9\\-]{36})\\/resourceGroups\\/([a-zA-Z0-9\\-]+)\\/providers\\/Microsoft\\.KeyVault\\/managedHSMs\\/([a-zA-Z0-9\\-]+)$", var.customer_managed_key.key_vault_resource_id)), true)
error_message = "When `var.is_hardware_security_module == true`, then the provided key vault resource ID must be managed HSM"
}
}
}