modules/roleassignment/locals.tf (20 lines of code) (raw):
locals {
# This local represents the final role definition resource id as required by the roleAssignments resource.
# It will be either the role definition resource id supplied in var.role_assignment_definition,
# or the role definition resource id that is looked up based on the role name supplied in var.role_assignment_definition.
# If the the role definition name cannot the value will be null.
role_assignment_definition_id = can(regex("/providers/Microsoft.Authorization/roleDefinitions", var.role_assignment_definition)) ? var.role_assignment_definition : local.role_definitions_role_name_to_resource_id
role_assignments_role_name_to_resource_id = var.role_assignment_definition_lookup_enabled ? {
for res in data.azapi_resource_list.role_definitions[0].output.results : res.role_name => res.id
} : {}
role_definitions_role_name_to_resource_id = var.role_assignment_definition_lookup_enabled ? lookup(
local.role_assignments_role_name_to_resource_id,
var.role_assignment_definition,
null
) : null
role_assignment_properties = merge({
principalId = var.role_assignment_principal_id
roleDefinitionId = local.role_assignment_definition_id
condition = var.role_assignment_condition
conditionVersion = var.role_assignment_condition_version
},
var.role_assignment_principal_type != null ? {
principalType = var.role_assignment_principal_type
} : {})
}