Terraform中AVD主机池与缩放计划关联的循环配置问题
解决方案
要实现缩放计划与对应主机池的关联,核心是让主机池和缩放计划的for_each使用相同的键名,通过键名一一匹配资源ID。以下是具体重构步骤:
1. 重构主机池变量
将分散的4个主机池变量合并为一个统一的map变量,键名和缩放计划变量sp_weekdays的键保持一致:
###################### # HOSTPOOL VARIABLES # ###################### variable "hostpools" { type = map(object({ name = string friendly_name = string description = string type = string max_sessions = string lb_type = string })) default = { developer_dev = { name = "avdhp-developer-dev-uks-001" friendly_name = "Developer – Development" description = "Hostpool for developers and contractors working in the development environment" type = "Pooled" max_sessions = "8" lb_type = "DepthFirst" } developer_prod = { name = "avdhp-developer-prod-uks-001" friendly_name = "Developer – Production" description = "Hostpool for developers and contractors working in the production environment" type = "Pooled" max_sessions = "8" lb_type = "DepthFirst" } front_office = { name = "avdhp-front-office-uks-001" friendly_name = "Front Office" description = "Hostpool for front office staff" type = "Pooled" max_sessions = "16" lb_type = "BreadthFirst" } back_office = { name = "avdhp-back-office-uks-001" friendly_name = "Back Office" description = "Hostpool for back office staff" type = "Pooled" max_sessions = "12" lb_type = "DepthFirst" } } }
2. 用for_each重构主机池资源
替换原来4个单独的主机池资源,用一个资源块批量创建:
############# # HOSTPOOLS # ############# resource "azurerm_virtual_desktop_host_pool" "main" { for_each = var.hostpools name = each.value.name resource_group_name = var.rg_avd_name location = var.rg_avd_location friendly_name = each.value.friendly_name description = each.value.description type = each.value.type maximum_sessions_allowed = each.value.max_sessions load_balancer_type = each.value.lb_type scheduled_agent_updates { enabled = true timezone = "GMT Standard Time" schedule { day_of_week = "Saturday" hour_of_day = "02" } } }
3. 修改缩放计划资源的hostpool_id关联
现在缩放计划的for_each键(来自var.sp_weekdays)和主机池的实例键完全匹配,直接通过each.key引用对应主机池的ID即可:
################# # SCALING PLANS # ################# resource "azurerm_virtual_desktop_scaling_plan" "sp_weekdays" { for_each = var.sp_weekdays name = each.value.sp_name resource_group_name = var.rg_avd_name location = var.rg_avd_location friendly_name = each.value.sp_friendly_name description = each.value.sp_description time_zone = "GMT Standard Time" schedule { name = each.value.sch_name days_of_week = ["Monday","Tuesday","Wednesday","Thursday","Friday"] ramp_up_start_time = "07:30" ramp_up_load_balancing_algorithm = each.value.lb_alg ramp_up_minimum_hosts_percent = each.value.ramp_up_min_hosts ramp_up_capacity_threshold_percent = each.value.ramp_up_cap_threshold peak_start_time = "08:00" peak_load_balancing_algorithm = each.value.lb_alg ramp_down_start_time = "18:00" ramp_down_load_balancing_algorithm = each.value.lb_alg ramp_down_minimum_hosts_percent = "80" ramp_down_force_logoff_users = true ramp_down_wait_time_minutes = "60" ramp_down_notification_message = "Your session will be logged off shortly, please save your work." ramp_down_capacity_threshold_percent= "20" ramp_down_stop_hosts_when = "ZeroActiveSessions" off_peak_start_time = "20:00" off_peak_load_balancing_algorithm = each.value.lb_alg } host_pool { hostpool_id = azurerm_virtual_desktop_host_pool.main[each.key].id scaling_plan_enabled = true } }
注意事项
- 修正原
sp_weekdays变量中front_office的笔误:lg_alg改为lb_alg,否则会导致变量引用错误。 - 重构后资源结构更简洁,后续新增主机池或缩放计划只需在对应变量的map中添加条目即可,无需修改资源块代码。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

