main_role_assignments.tf (45 lines of code) (raw):

locals { role_assigments_scope = flatten( [for ri, role in var.role_assignments : [ for identity in azapi_resource.policy_assignment.identity : { role_definition_id_or_name = lookup(role, "role_definition_id_or_name", null) principal_id = identity.principal_id scope = var.scope description = lookup(role, "description", null) condition = lookup(role, "condition", null) condition_version = lookup(role, "condition_version", null) skip_service_principal_aad_check = lookup(role, "skip_service_principal_aad_check", false) delegated_managed_identity_resource_id = lookup(role, "delegated_managed_identity_resource_id", null) principal_type = lookup(role, "principal_type", null) } ] ]) } resource "azurerm_role_assignment" "this" { for_each = tomap({ for vi, v in local.role_assigments_scope : vi => v }) principal_id = each.value.principal_id scope = each.value.scope condition = each.value.condition condition_version = each.value.condition_version delegated_managed_identity_resource_id = each.value.delegated_managed_identity_resource_id description = each.value.description 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 depends_on = [time_sleep.before_policy_role_assignments] } resource "time_sleep" "before_policy_role_assignments" { create_duration = var.delays.before_policy_role_assignments.create destroy_duration = var.delays.before_policy_role_assignments.destroy triggers = { policy_assignment = sha256(jsonencode(azapi_resource.policy_assignment)) } depends_on = [ azapi_resource.policy_assignment ] }