locals.tf (209 lines of code) (raw):

locals { adapter_properties = { jumboPacket = "" networkDirect = "Disabled" networkDirectTechnology = "" } auto_generated_secrets = (var.witness_type == null || var.witness_type == "") ? local.base_secrets : concat(local.base_secrets, [local.witness_secret]) base_secrets = [ { eceSecretName = "AzureStackLCMUserCredential" secretSuffix = "AzureStackLCMUserCredential" }, { eceSecretName = "LocalAdminCredential" secretSuffix = "LocalAdminCredential" }, { eceSecretName = "DefaultARBApplication" secretSuffix = "DefaultARBApplication" } ] combined_adapters = setintersection(toset(var.management_adapters), toset(local.storage_adapters)) combined_keyvault_secrets = length(var.keyvault_secrets) != 0 ? var.keyvault_secrets : local.auto_generated_secrets compute_rdma_adapter_properties = { jumboPacket = var.compute_rdma_jumbo_packet networkDirect = "Enabled" networkDirectTechnology = var.compute_rdma_protocol } converged = (length(local.combined_adapters) == length(var.management_adapters)) && (length(local.combined_adapters) == length(local.storage_adapters)) converged_intents = [{ name = var.intent_name, trafficType = var.traffic_type, adapter = flatten(var.management_adapters), overrideVirtualSwitchConfiguration = false, virtualSwitchConfigurationOverrides = { enableIov = "", loadBalancingAlgorithm = "" }, overrideQosPolicy = var.override_qos_policy, qosPolicyOverrides = var.qos_policy_overrides, overrideAdapterProperty = var.override_adapter_property, adapterPropertyOverrides = var.rdma_enabled ? local.rdma_adapter_properties : local.adapter_properties }] decoded_user_storages = data.azapi_resource_list.user_storages.output.value deployment_configuration_version = var.deployment_configuration_version != null ? var.deployment_configuration_version : (var.operation_type == "ClusterUpgrade" ? "10.1.0.0" : "10.0.0.0") deployment_data = { securitySettings = local.security_settings observability = { streamingDataClient = true euLocation = var.eu_location episodicDataUpload = true } cluster = { name = var.cluster_name == "" ? azapi_resource.cluster.name : var.cluster_name witnessType = var.witness_type witnessPath = var.witness_path cloudAccountName = var.create_witness_storage_account ? azurerm_storage_account.witness[0].name : var.witness_storage_account_name azureServiceEndpoint = var.azure_service_endpoint } storage = { configurationMode = var.configuration_mode } namingPrefix = var.naming_prefix == "" ? var.site_id : var.naming_prefix domainFqdn = var.domain_fqdn infrastructureNetwork = local.infrastructure_network physicalNodes = flatten(var.servers) hostNetwork = local.host_network adouPath = var.adou_path secretsLocation = var.use_legacy_key_vault_model ? local.secrets_location : (var.secrets_location == "" ? null : var.secrets_location) secrets = var.use_legacy_key_vault_model ? null : local.keyvault_secrets optionalServices = { customLocation = var.custom_location_name } } deployment_data_omit_null = { for k, v in local.deployment_data : k => v if v != null } deployment_setting_properties = { arcNodeResourceIds = flatten([for server in data.azurerm_arc_machine.arcservers : server.id]) deploymentMode = var.is_exported ? "Deploy" : "Validate" deploymentConfiguration = { version = local.deployment_configuration_version scaleUnits = [ { deploymentData = local.deployment_data_omit_null } ] } } deployment_setting_properties_omit_null = { for k, v in local.deployment_setting_properties : k => v if v != null } host_network = var.operation_type == "ClusterUpgrade" ? null : { enableStorageAutoIp = true intents = local.converged ? local.converged_intents : local.seperate_intents storageNetworks = local.storage_networks storageConnectivitySwitchless = var.storage_connectivity_switchless } infrastructure_network = [{ useDhcp = false subnetMask = var.subnet_mask gateway = var.default_gateway ipPools = [ { startingAddress = var.starting_address endingAddress = var.ending_address } ] dnsServers = flatten(var.dns_servers) }] key_vault = var.create_key_vault ? azurerm_key_vault.deployment_keyvault[0] : data.azurerm_key_vault.key_vault[0] keyvault_secret_names = var.use_legacy_key_vault_model ? { "AzureStackLCMUserCredential" = "AzureStackLCMUserCredential" "LocalAdminCredential" = "LocalAdminCredential" "DefaultARBApplication" = "DefaultARBApplication" "WitnessStorageKey" = "WitnessStorageKey" } : { for secret in local.combined_keyvault_secrets : secret.eceSecretName => "${var.name}-${secret.secretSuffix}" } keyvault_secrets = [ for secret in local.combined_keyvault_secrets : { secretName = local.keyvault_secret_names[secret.eceSecretName] eceSecretName = secret.eceSecretName secretLocation = "${local.secrets_location}secrets/${local.keyvault_secret_names[secret.eceSecretName]}" } ] owned_user_storages = [for storage in local.decoded_user_storages : storage if lower(storage.extendedLocation.name) == lower(data.azapi_resource.customlocation.id)] rdma_adapter_properties = { jumboPacket = var.rdma_jumbo_packet networkDirect = "Enabled" networkDirectTechnology = var.rdma_protocol } resource_group_location = var.resource_group_location == "" ? var.location : var.resource_group_location # The resource group name is the last element of the split result resource_group_name = element(local.resource_group_parts, length(local.resource_group_parts) - 1) # Split the resource group ID into parts based on '/' resource_group_parts = split("/", var.resource_group_id) role_assignments = flatten([ for server_key, arcserver in data.azurerm_arc_machine.arcservers : [ for role_key, role_name in local.roles : { server_name = server_key principal_id = arcserver.identity[0].principal_id role_name = role_name role_key = role_key } ] ]) role_definition_resource_substring = "/providers/Microsoft.Authorization/roleDefinitions" roles = { KVSU = "Key Vault Secrets User", } rp_roles = var.create_hci_rp_role_assignments ? { ACMRM = "Azure Connected Machine Resource Manager", } : {} secrets_location = var.secrets_location == "" ? local.key_vault.vault_uri : var.secrets_location security_settings = var.operation_type == "ClusterUpgrade" ? null : { hvciProtection = var.hvci_protection drtmProtection = var.drtm_protection driftControlEnforced = var.drift_control_enforced credentialGuardEnforced = var.credential_guard_enforced smbSigningEnforced = var.smb_signing_enforced smbClusterEncryption = var.smb_cluster_encryption sideChannelMitigationEnforced = var.side_channel_mitigation_enforced bitlockerBootVolume = var.bitlocker_boot_volume bitlockerDataVolumes = var.bitlocker_data_volumes wdacEnforced = var.wdac_enforced } seperate_intents = [{ name = var.compute_intent_name, trafficType = var.compute_traffic_type, adapter = flatten(var.management_adapters) overrideVirtualSwitchConfiguration = false, overrideQosPolicy = var.compute_override_qos_policy, overrideAdapterProperty = var.compute_override_adapter_property, virtualSwitchConfigurationOverrides = { enableIov = "", loadBalancingAlgorithm = "" }, qosPolicyOverrides = var.compute_qos_policy_overrides, adapterPropertyOverrides = var.compute_rdma_enabled ? local.compute_rdma_adapter_properties : local.adapter_properties }, { name = var.storage_intent_name, trafficType = var.storage_traffic_type, adapter = local.storage_adapters, overrideVirtualSwitchConfiguration = false, overrideQosPolicy = var.storage_override_qos_policy, overrideAdapterProperty = var.storage_override_adapter_property, virtualSwitchConfigurationOverrides = { enableIov = "", loadBalancingAlgorithm = "" }, qosPolicyOverrides = var.storage_qos_policy_overrides, adapterPropertyOverrides = var.storage_rdma_enabled ? local.storage_rdma_adapter_properties : local.adapter_properties }] storage_adapters = flatten([for storageNetwork in var.storage_networks : storageNetwork.networkAdapterName]) storage_networks = var.storage_adapter_ip_info == null ? flatten(var.storage_networks) : [ for storageNetwork in var.storage_networks : { name = storageNetwork.name networkAdapterName = storageNetwork.networkAdapterName vlanId = storageNetwork.vlanId storageAdapterIPInfo = var.storage_adapter_ip_info[storageNetwork.name] } ] storage_rdma_adapter_properties = { jumboPacket = var.storage_rdma_jumbo_packet networkDirect = "Enabled" networkDirectTechnology = var.storage_rdma_protocol } witness_secret = { eceSecretName = "WitnessStorageKey" secretSuffix = "WitnessStorageKey" } witness_storage_account_resource_group_name = var.witness_storage_account_resource_group_name == "" ? local.resource_group_name : var.witness_storage_account_resource_group_name }