You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform Azure:遍历VM创建虚拟桌面应用报错求助

问题修复方案

核心错误原因

你使用的azurerm_virtual_machine是单实例数据源,不支持通过name="*"匹配多台虚拟机,因此data.azurerm_virtual_machine.vms返回的不是VM对象列表,而是无效的字符串值,遍历自然会触发"无法访问原始类型值(字符串)的属性"错误。

修复后的完整代码

# 改用复数数据源获取资源组下所有虚拟机
data "azurerm_virtual_machines" "vms" {
  resource_group_name = azurerm_resource_group.Clients.name
}

# 为每台VM的网卡单独获取IP信息
data "azurerm_network_interface" "vm_nics" {
  for_each = data.azurerm_virtual_machines.vms
  name     = split("/", each.value.network_interface_ids[0])[length(split("/", each.value.network_interface_ids[0])) - 1]
  resource_group_name = azurerm_resource_group.Clients.name
}

locals {
  vms = [
    for vm_name, vm in data.azurerm_virtual_machines.vms : {
      name = vm_name
      ip   = data.azurerm_network_interface.vm_nics[vm_name].private_ip_address
    }
  ]
}

# 为每台VM创建虚拟桌面应用
resource "azurerm_virtual_desktop_application" "Test" {
  for_each             = { for vm in local.vms : vm.name => vm }
  name                 = each.value.name
  application_group_id = azurerm_virtual_desktop_application_group.APPLICATIONGROUP.id
  friendly_name        = each.value.name
  path                 = "C:\\Program Files"
  show_in_portal       = true
  icon_path            = "C:\\"
  icon_index           = 0
}

关键修复点

  • 替换单实例数据源azurerm_virtual_machine为复数数据源azurerm_virtual_machines,它能返回资源组下所有VM的完整集合
  • 通过azurerm_network_interface数据源单独获取每台VM网卡的私有IP(azurerm_virtual_machines仅返回网卡ID,无法直接读取IP)
  • 修正friendly_name中的笔误ech.value为each.value
  • 移除不必要的字符串插值,直接使用each.value.name赋值

内容的提问来源于stack exchange,提问作者Stefan Stahuber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:13:24