workload/terraform/modules/avd/personal/personalpool.tf (202 lines of code) (raw):
# Create a Resource Group for Personal Session Hosts
resource "azurerm_resource_group" "rg" {
name = "rg-avd-${substr(var.avdLocation, 0, 5)}-${var.prefix}-${var.rg_personal}"
location = var.avdLocation
}
resource "random_uuid" "example" {}
# Create AVD workspace vdws-{AzureRegionAcronym}-{deploymentPrefix}-{nnn} pworkspace
resource "azurerm_virtual_desktop_workspace" "pworkspace" {
name = "${var.pworkspace}-${substr(var.avdLocation, 0, 5)}-${var.prefix}-001"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
friendly_name = "${var.prefix} Personal Workspace"
description = "${var.prefix} Personal Workspace"
}
# Create AVD host pool
resource "azurerm_virtual_desktop_host_pool" "personalpool" {
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
name = "${var.personalpool}-${substr(var.avdLocation, 0, 5)}-${var.prefix}-001"
friendly_name = "${var.personalpool}-${substr(var.avdLocation, 0, 5)}-${var.prefix}-001"
validate_environment = true
custom_rdp_properties = "drivestoredirect:s:*;audiomode:i:0;videoplaybackmode:i:1;redirectclipboard:i:1;redirectprinters:i:1;devicestoredirect:s:*;redirectcomports:i:1;redirectsmartcards:i:1;usbdevicestoredirect:s:*;enablecredsspsupport:i:1;use multimon:i:0"
description = "${var.prefix} Personal HostPool"
type = "Personal"
maximum_sessions_allowed = 1
load_balancer_type = "DepthFirst" #[BreadthFirst DepthFirst]
depends_on = [
azurerm_resource_group.rg
]
lifecycle {
ignore_changes = all
}
}
#Autoscale is currently only available in the public cloud.
data "azurerm_role_definition" "power_role" {
name = "Desktop Virtualization Power On Off Contributor"
}
data "azuread_service_principal" "spn" {
application_id = "9cdead84-a844-4324-93f2-b2e6bb768d07"
}
resource "azurerm_role_assignment" "power" {
name = random_uuid.example.result
scope = azurerm_resource_group.rg.id
role_definition_id = data.azurerm_role_definition.power_role.role_definition_id
principal_id = data.azuread_service_principal.spn.application_id
skip_service_principal_aad_check = true
depends_on = [data.azurerm_role_definition.power_role]
}
resource "azurerm_virtual_desktop_host_pool_registration_info" "registrationinfo" {
hostpool_id = azurerm_virtual_desktop_host_pool.personalpool.id
# Generating RFC3339Time for the expiration of the token.
expiration_date = timeadd(timestamp(), "48h")
}
# Create AVD pag
resource "azurerm_virtual_desktop_application_group" "pag" {
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
host_pool_id = azurerm_virtual_desktop_host_pool.personalpool.id
type = "Desktop"
name = "${var.pag}-${substr(var.avdLocation, 0, 5)}-${var.prefix}-001" //var.pag
friendly_name = "Desktop AppGroup"
description = "AVD Desktop application group"
depends_on = [azurerm_virtual_desktop_host_pool.personalpool, azurerm_virtual_desktop_workspace.pworkspace]
}
# Associate Workspace and pag
resource "azurerm_virtual_desktop_workspace_application_group_association" "ws-dag" {
application_group_id = azurerm_virtual_desktop_application_group.pag.id
workspace_id = azurerm_virtual_desktop_workspace.workspace.id
}
# Get Log Analytics Workspace data
data "azurerm_log_analytics_workspace" "lawksp" {
name = lower(replace("law-avd-${var.prefix}", "-", ""))
resource_group_name = "rg-avd-${substr(var.avdLocation, 0, 5)}-${var.prefix}-${var.rg_avdi}"
depends_on = [
azurerm_virtual_desktop_workspace.pworkspace,
azurerm_virtual_desktop_host_pool.personalpool,
azurerm_virtual_desktop_application_group.pag,
azurerm_virtual_desktop_workspace_application_group_association.ws-dag,
]
}
# Create Diagnostic Settings for AVD Host Pool
resource "azurerm_monitor_diagnostic_setting" "avd-hp1" {
name = "AVD-Diag"
target_resource_id = azurerm_virtual_desktop_host_pool.personalpool.id
log_analytics_workspace_id = data.azurerm_log_analytics_workspace.lawksp.id
depends_on = [
data.azurerm_log_analytics_workspace.lawksp,
azurerm_virtual_desktop_host_pool.personalpool
]
enabled_log {
category = "Checkpoint"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Error"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Management"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Connection"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "HostRegistration"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "AgentHealthStatus"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "NetworkData"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "SessionHostManagement"
retention_policy {
days = 7
enabled = true
}
}
}
# Create Diagnostic Settings for AVD Desktop App Group
resource "azurerm_monitor_diagnostic_setting" "avd-pag1" {
name = "AVD-Diag"
target_resource_id = azurerm_virtual_desktop_application_group.pag.id
log_analytics_workspace_id = data.azurerm_log_analytics_workspace.lawksp.id
depends_on = [
data.azurerm_log_analytics_workspace.lawksp
]
enabled_log {
category = "Checkpoint"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Error"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Management"
retention_policy {
days = 7
enabled = true
}
}
}
# Create Diagnostic Settings for AVD Workspace
resource "azurerm_monitor_diagnostic_setting" "avd-wksp1" {
name = "AVD-Diag"
target_resource_id = azurerm_virtual_desktop_workspace.pworkspace.id
log_analytics_workspace_id = data.azurerm_log_analytics_workspace.lawksp.id
depends_on = [
data.azurerm_log_analytics_workspace.lawksp
]
enabled_log {
category = "Checkpoint"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Error"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Management"
retention_policy {
days = 7
enabled = true
}
}
enabled_log {
category = "Feed"
retention_policy {
days = 7
enabled = true
}
}
}