我正在尝试更改地形地图中的值。在我的terraform.auto.tfvars
文件中:
dependencies = {
win_chocolatey = {
name = "chocolatey"
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
virtual_machine_id = ""
type_handler_version = "2.0"
auto_upgrade_minor_version = "false"
extensions_custom_script_fileuris = ""
extensions_custom_command = "powershell -ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) exit 0"
tags = {
purpose = "software"
}
}
}
在我的main.tf文件中,我想在将变量传递到资源之前更新virtual_machine_id
的值。
我已经尝试过了:
data "azurerm_virtual_machine" "wininstaller" {
name = "vm-wininstall"
resource_group_name = "rg-zephyr-devops"
}
locals {
dependencies = {
for x in var.dependencies : { win_chocolatey.virtual_machine_id = data.azurerm_virtual_machine.wininstaller.id }
}
}
但是我在for循环中遇到错误:
错误:无效的“ for”表达式
在main.tf第19行上,在本地语言环境中:19:dependencies = {for for x in var.dependencies:{win_chocolatey.virtual_machine_id = data.azurerm_virtual_machine.wininstaller.id}}
构建对象时需要键表达式。
有人知道如何解决此问题或更好的方法吗?
答案 0 :(得分:3)
当您遍历映射并想要访问值时,需要在键和值之间分割临时lambda变量。当您要访问对象的属性时,必须在范围中提供属性的完整且正确的名称空间。构造映射时,需要使用=>
运算符指定键值对。使用{}
初始化地图,因此您将创建一个没有外键的嵌套地图。结合这四个修复程序,我们将得出:
locals {
dependencies = {
for key, value in var.dependencies : value.virtual_machine_id => data.azurerm_virtual_machine.wininstaller.id
}
}
修复语法和功能错误。