main.tf (98 lines of code) (raw):
# Create Azure Virtual Desktop host pool
module "avm_res_desktopvirtualization_hostpool" {
source = "Azure/avm-res-desktopvirtualization-hostpool/azurerm"
version = ">=0.3.0"
enable_telemetry = var.enable_telemetry
resource_group_name = var.resource_group_name
virtual_desktop_host_pool_type = var.virtual_desktop_host_pool_type
virtual_desktop_host_pool_location = var.virtual_desktop_host_pool_location
virtual_desktop_host_pool_load_balancer_type = var.virtual_desktop_host_pool_load_balancer_type
virtual_desktop_host_pool_resource_group_name = var.resource_group_name
virtual_desktop_host_pool_name = var.virtual_desktop_host_pool_name
virtual_desktop_host_pool_custom_rdp_properties = var.virtual_desktop_host_pool_custom_rdp_properties
virtual_desktop_host_pool_maximum_sessions_allowed = var.virtual_desktop_host_pool_maximum_sessions_allowed
virtual_desktop_host_pool_start_vm_on_connect = var.virtual_desktop_host_pool_start_vm_on_connect
virtual_desktop_host_pool_friendly_name = var.virtual_desktop_host_pool_friendly_name
virtual_desktop_host_pool_scheduled_agent_updates = {
enabled = "true"
schedule = tolist([{
day_of_week = "Sunday"
hour_of_day = 0
}])
}
}
resource "time_sleep" "wait_for_hostpool" {
create_duration = "30s"
depends_on = [module.avm_res_desktopvirtualization_hostpool]
}
# Registration information for the host pool.
resource "azurerm_virtual_desktop_host_pool_registration_info" "registrationinfo" {
expiration_date = timeadd(timestamp(), var.registration_expiration_period)
hostpool_id = module.avm_res_desktopvirtualization_hostpool.resource.id
lifecycle {
ignore_changes = [
expiration_date,
hostpool_id,
]
}
}
# Create Azure Virtual Desktop application group
module "avm_res_desktopvirtualization_applicationgroup" {
source = "Azure/avm-res-desktopvirtualization-applicationgroup/azurerm"
version = ">=0.2.0"
enable_telemetry = var.enable_telemetry
virtual_desktop_application_group_name = var.virtual_desktop_application_group_name
virtual_desktop_application_group_type = var.virtual_desktop_application_group_type
virtual_desktop_application_group_host_pool_id = module.avm_res_desktopvirtualization_hostpool.resource.id
virtual_desktop_application_group_resource_group_name = var.resource_group_name
virtual_desktop_application_group_location = var.virtual_desktop_application_group_location
virtual_desktop_application_group_default_desktop_display_name = var.virtual_desktop_application_group_default_desktop_display_name
virtual_desktop_application_group_description = var.virtual_desktop_application_group_description
virtual_desktop_application_group_friendly_name = var.virtual_desktop_application_group_friendly_name
virtual_desktop_application_group_tags = local.tags
}
# Create Azure Virtual Desktop workspace
module "avm_res_desktopvirtualization_workspace" {
source = "Azure/avm-res-desktopvirtualization-workspace/azurerm"
version = ">=0.2.0"
virtual_desktop_workspace_location = var.virtual_desktop_workspace_location
virtual_desktop_workspace_description = var.virtual_desktop_workspace_description
virtual_desktop_workspace_resource_group_name = var.resource_group_name
resource_group_name = var.resource_group_name
virtual_desktop_workspace_name = var.virtual_desktop_workspace_name
virtual_desktop_workspace_friendly_name = var.virtual_desktop_workspace_friendly_name
tags = local.tags
}
resource "azurerm_virtual_desktop_workspace_application_group_association" "workappgrassoc" {
application_group_id = module.avm_res_desktopvirtualization_applicationgroup.resource.id
workspace_id = module.avm_res_desktopvirtualization_workspace.resource.id
}
# Lookup the AVD service principal
data "azuread_service_principal" "avd_service" {
display_name = "Azure Virtual Desktop"
}
# Grant it Reader access to your Host Pool
resource "azurerm_role_assignment" "avd_service_hostpool_reader" {
principal_id = data.azuread_service_principal.avd_service.object_id
scope = module.avm_res_desktopvirtualization_hostpool.resource.id
role_definition_name = "Desktop Virtualization Power On Off Contributor"
depends_on = [module.avm_res_desktopvirtualization_hostpool]
}
resource "random_uuid" "example" {}
# Create Azure Virtual Desktop scaling plan
module "avm_res_desktopvirtualization_scaling_plan" {
source = "Azure/avm-res-desktopvirtualization-scalingplan/azurerm"
enable_telemetry = var.enable_telemetry
version = ">=0.2.0"
virtual_desktop_scaling_plan_name = var.virtual_desktop_scaling_plan_name
virtual_desktop_scaling_plan_location = var.virtual_desktop_scaling_plan_location
virtual_desktop_scaling_plan_resource_group_name = var.resource_group_name
virtual_desktop_scaling_plan_time_zone = var.virtual_desktop_scaling_plan_time_zone
virtual_desktop_scaling_plan_description = var.virtual_desktop_scaling_plan_description
virtual_desktop_scaling_plan_tags = local.tags
virtual_desktop_scaling_plan_host_pool = toset(
[
{
hostpool_id = module.avm_res_desktopvirtualization_hostpool.resource.id
scaling_plan_enabled = true
}
]
)
virtual_desktop_scaling_plan_schedule = var.virtual_desktop_scaling_plan_schedule
depends_on = [
time_sleep.wait_for_hostpool
]
}