main.interfaces.tf (156 lines of code) (raw):
# diagnostic settings can be set at profile level for front door skus and standard_microsoft cdn sku.
resource "azurerm_monitor_diagnostic_setting" "front_door_diag" {
for_each = strcontains(var.sku, "AzureFrontDoor") || strcontains(var.sku, "Standard_Microsoft") ? var.diagnostic_settings : {}
name = each.value.name != null ? each.value.name : "diag-${var.name}"
target_resource_id = azapi_resource.front_door_profile.id
eventhub_authorization_rule_id = each.value.event_hub_authorization_rule_resource_id
eventhub_name = each.value.event_hub_name
log_analytics_destination_type = try(each.value.workspace_resource_id == null) ? null : each.value.log_analytics_destination_type
log_analytics_workspace_id = each.value.workspace_resource_id
partner_solution_id = each.value.marketplace_partner_resource_id
storage_account_id = each.value.storage_account_resource_id
dynamic "enabled_log" {
for_each = each.value.log_categories
content {
category = enabled_log.value
}
}
dynamic "enabled_log" {
for_each = each.value.log_groups
content {
category_group = enabled_log.value
}
}
dynamic "metric" {
for_each = each.value.metric_categories
content {
category = metric.value
}
}
lifecycle {
ignore_changes = [
log_analytics_destination_type
]
}
}
# cdn profile endpoints are seperate child resources that have their own diagnostic settings.
resource "azurerm_monitor_diagnostic_setting" "cdn_endpoint_diag" {
for_each = local.cdn_endpoint_diagnostics
name = each.value.diagnostic_setting.name != null ? each.value.diagnostic_setting.name : "diag-${var.name}"
target_resource_id = azurerm_cdn_endpoint.endpoints[each.key].id
eventhub_authorization_rule_id = each.value.diagnostic_setting.event_hub_authorization_rule_resource_id
eventhub_name = each.value.diagnostic_setting.event_hub_name
log_analytics_destination_type = try(each.value.diagnostic_setting.workspace_resource_id == null) ? null : each.value.diagnostic_setting.log_analytics_destination_type
log_analytics_workspace_id = each.value.diagnostic_setting.workspace_resource_id
partner_solution_id = each.value.diagnostic_setting.marketplace_partner_resource_id
storage_account_id = each.value.diagnostic_setting.storage_account_resource_id
dynamic "enabled_log" {
for_each = each.value.diagnostic_setting.log_categories
content {
category = enabled_log.value
}
}
dynamic "enabled_log" {
for_each = each.value.diagnostic_setting.log_groups
content {
category_group = enabled_log.value
}
}
dynamic "metric" {
for_each = each.value.diagnostic_setting.metric_categories
content {
category = metric.value
}
}
lifecycle {
ignore_changes = [
log_analytics_destination_type
]
}
}
# Role assignments
resource "azurerm_role_assignment" "this" {
for_each = var.role_assignments
principal_id = each.value.principal_id
scope = azapi_resource.front_door_profile.id
condition = each.value.condition
condition_version = each.value.condition_version
delegated_managed_identity_resource_id = each.value.delegated_managed_identity_resource_id
principal_type = each.value.principal_type
role_definition_id = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? each.value.role_definition_id_or_name : null
role_definition_name = strcontains(lower(each.value.role_definition_id_or_name), lower(local.role_definition_resource_substring)) ? null : each.value.role_definition_id_or_name
skip_service_principal_aad_check = each.value.skip_service_principal_aad_check
}
resource "azurerm_management_lock" "this" {
count = var.lock != null ? 1 : 0
lock_level = var.lock.kind
name = coalesce(var.lock.name, "lock-${var.lock.kind}")
scope = azapi_resource.front_door_profile.id
notes = var.lock.kind == "CanNotDelete" ? "Cannot delete the resource or its child resources." : "Cannot delete or modify the resource or its child resources."
depends_on = [azapi_resource.front_door_profile]
}
# metric alerts
resource "azurerm_monitor_metric_alert" "this" {
for_each = var.metric_alerts != null ? var.metric_alerts : {}
name = each.value.name
resource_group_name = var.resource_group_name
scopes = [azapi_resource.front_door_profile.id]
auto_mitigate = each.value.auto_mitigate
description = each.value.description
enabled = each.value.enabled
frequency = each.value.frequency
severity = each.value.severity
tags = each.value.tags != null ? each.value.tags : var.tags
target_resource_location = each.value.target_resource_location
target_resource_type = each.value.target_resource_type
window_size = each.value.window_size
dynamic "action" {
for_each = each.value.actions != null ? each.value.actions : []
content {
action_group_id = action.value.action_group_id
webhook_properties = action.value.webhook_properties
}
}
dynamic "application_insights_web_test_location_availability_criteria" {
for_each = each.value.application_insights_web_test_location_availability_criterias != null ? each.value.application_insights_web_test_location_availability_criterias : []
content {
component_id = application_insights_web_test_location_availability_criteria.value.component_id
failed_location_count = application_insights_web_test_location_availability_criteria.value.failed_location_count
web_test_id = application_insights_web_test_location_availability_criteria.value.web_test_id
}
}
dynamic "criteria" {
for_each = try(each.value.criterias, [])
content {
aggregation = criteria.value.aggregation
metric_name = criteria.value.metric_name
metric_namespace = criteria.value.metric_namespace
operator = criteria.value.operator
threshold = criteria.value.threshold
skip_metric_validation = criteria.value.skip_metric_validation
dynamic "dimension" {
for_each = criteria.value.dimensions != null ? criteria.value.dimensions : []
content {
name = dimension.value.name
operator = dimension.value.operator
values = dimension.value.values
}
}
}
}
dynamic "dynamic_criteria" {
for_each = each.value.dynamic_criterias != null ? each.value.dynamic_criterias : []
content {
aggregation = dynamic_criteria.value.aggregation
alert_sensitivity = dynamic_criteria.value.alert_sensitivity
metric_name = dynamic_criteria.value.metric_name
metric_namespace = dynamic_criteria.value.metric_namespace
operator = dynamic_criteria.value.operator
evaluation_failure_count = dynamic_criteria.value.evaluation_failure_count
evaluation_total_count = dynamic_criteria.value.evaluation_total_count
ignore_data_before = dynamic_criteria.value.ignore_data_before
skip_metric_validation = dynamic_criteria.value.skip_metric_validation
dimension {
name = dynamic_criteria.value.dimension.name
operator = dynamic_criteria.value.dimension.operator
values = dynamic_criteria.value.dimension.values
}
}
}
}