1.Virtual.Network/AD/vm.client.tf (104 lines of code) (raw):

################################################################################################################################################# # Active Directory (https://learn.microsoft.com/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview) # ################################################################################################################################################# variable activeDirectoryClient { type = object({ enable = bool domainName = string serverName = string machine = object({ name = string size = string image = object({ publisher = string product = string name = string version = string }) osDisk = object({ storageType = string cachingMode = string sizeGB = number }) adminLogin = object({ userName = string userPassword = string }) }) network = object({ acceleration = object({ enable = bool }) }) }) } locals { activeDirectoryClient = merge(var.activeDirectoryClient, { machine = merge(var.activeDirectoryClient.machine, { adminLogin = merge(var.activeDirectoryClient.machine.adminLogin, { userName = var.activeDirectoryClient.machine.adminLogin.userName != "" ? var.activeDirectoryClient.machine.adminLogin.userName : data.azurerm_key_vault_secret.admin_username.value userPassword = var.activeDirectoryClient.machine.adminLogin.userPassword != "" ? var.activeDirectoryClient.machine.adminLogin.userPassword : data.azurerm_key_vault_secret.admin_password.value }) }) }) } ######################################################################### # Virtual Machines (https://learn.microsoft.com/azure/virtual-machines) # ######################################################################### resource azurerm_network_interface active_directory_client { count = var.activeDirectoryClient.enable ? 1 : 0 name = var.activeDirectoryClient.machine.name resource_group_name = azurerm_resource_group.active_directory_client[0].name location = azurerm_resource_group.active_directory_client[0].location ip_configuration { name = "ipConfig" private_ip_address_allocation = "Dynamic" subnet_id = data.azurerm_subnet.identity.id } accelerated_networking_enabled = var.activeDirectoryClient.network.acceleration.enable } resource azurerm_windows_virtual_machine active_directory_client { count = var.activeDirectoryClient.enable ? 1 : 0 name = var.activeDirectoryClient.machine.name resource_group_name = azurerm_resource_group.active_directory_client[0].name location = azurerm_resource_group.active_directory_client[0].location size = var.activeDirectoryClient.machine.size admin_username = local.activeDirectoryClient.machine.adminLogin.userName admin_password = local.activeDirectoryClient.machine.adminLogin.userPassword custom_data = base64encode(file("..\\..\\0.Core.Foundation\\functions.ps1")) identity { type = "UserAssigned" identity_ids = [ data.azurerm_user_assigned_identity.studio.id ] } network_interface_ids = [ azurerm_network_interface.active_directory_client[0].id ] os_disk { storage_account_type = var.activeDirectoryClient.machine.osDisk.storageType caching = var.activeDirectoryClient.machine.osDisk.cachingMode disk_size_gb = var.activeDirectoryClient.machine.osDisk.sizeGB > 0 ? var.activeDirectoryClient.machine.osDisk.sizeGB : null } source_image_reference { publisher = var.activeDirectoryClient.machine.image.publisher offer = var.activeDirectoryClient.machine.image.product sku = var.activeDirectoryClient.machine.image.name version = var.activeDirectoryClient.machine.image.version } depends_on = [ azurerm_virtual_machine_extension.active_directory ] } resource azurerm_virtual_machine_extension active_directory_client { count = var.activeDirectoryClient.enable ? 1 : 0 name = "Custom" type = "CustomScriptExtension" publisher = "Microsoft.Compute" type_handler_version = data.azurerm_app_configuration_keys.studio.items[index(data.azurerm_app_configuration_keys.studio.items[*].key, data.terraform_remote_state.core.outputs.appConfig.key.scriptExtensionWindows)].value automatic_upgrade_enabled = false auto_upgrade_minor_version = true virtual_machine_id = azurerm_windows_virtual_machine.active_directory_client[0].id protected_settings = jsonencode({ commandToExecute = "PowerShell -ExecutionPolicy Unrestricted -EncodedCommand ${textencodebase64( templatefile("cse.ps1", { activeDirectory = local.activeDirectoryClient machineType = "WinClient" }), "UTF-16LE" )}" }) }