Terraform Azure中如何自动获取Host Pool列表的ID值
Terraform自动获取批量创建的Azure虚拟桌面Host Pool ID方案
假设你已通过for_each批量创建Host Pool,比如:
resource "azurerm_virtual_desktop_host_pool" "host_pools" { for_each = { host_pool_security = "Security-Team-Pool" host_pool_finance = "Finance-Team-Pool" host_pool_hr = "HR-Team-Pool" } name = each.value location = azurerm_resource_group.vd_rg.location resource_group_name = azurerm_resource_group.vd_rg.name type = "Pooled" load_balancer_type = "DepthFirst" }
以下是两种自动获取所有Host Pool ID的方案:
方法1:直接提取所有ID列表
用values()函数遍历批量创建的资源实例,提取所有id属性生成列表:
locals { all_host_pool_ids = values(azurerm_virtual_desktop_host_pool.host_pools)[*].id }
关联应用组时直接引用这个局部变量即可,比如批量创建对应应用组:
resource "azurerm_virtual_desktop_application_group" "app_groups" { for_each = toset(local.all_host_pool_ids) name = "AppGroup-${replace(each.value, "/", "-")}" location = azurerm_resource_group.vd_rg.location resource_group_name = azurerm_resource_group.vd_rg.name type = "RemoteApp" host_pool_id = each.value }
方法2:带筛选条件的灵活提取
如果需要筛选特定Host Pool(比如按键名前缀、资源属性),用for表达式自定义规则:
locals { filtered_host_pool_ids = [ for key, pool in azurerm_virtual_desktop_host_pool.host_pools : pool.id if startswith(key, "host_pool_") # 按键名前缀筛选 # 也可以按资源属性筛选,比如 if pool.type == "Pooled" ] }
进阶:直接关联Host Pool与应用组
如果应用组需要和Host Pool一一对应,无需单独提取ID,直接复用Host Pool的for_each集合:
resource "azurerm_virtual_desktop_application_group" "app_groups" { for_each = azurerm_virtual_desktop_host_pool.host_pools name = "${each.key}-app-group" location = azurerm_resource_group.vd_rg.location resource_group_name = azurerm_resource_group.vd_rg.name type = "RemoteApp" host_pool_id = each.value.id }
内容的提问来源于stack exchange,提问作者Hamma
相关产品推荐
相关产品推荐

