动态地将值注入Terraform中的变量中

动态地将值注入Terraform中的变量中,terraform,Terraform,我正在尝试更改地形图中的值。在我的terraform.auto.tfvars文件中: dependencies = { win_chocolatey = { name = "chocolatey" publisher = "Microsoft.Azure.Extensions" type

我正在尝试更改地形图中的值。在我的
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\u machine\u 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 x in 变量依赖项:{win\u chocolate.virtual\u machine\u id= data.azurerm_virtual_machine.wininstaller.id}

构建对象时需要键表达式


是否有人知道如何解决此问题或更好的解决方法?

当您遍历映射并希望访问值时,需要在key和value之间拆分临时lambda变量。当您想要访问对象的属性时,必须在作用域中提供该属性的完整且正确的命名空间。构造映射时,需要使用
=>
运算符指定键值对。映射是用
{}
初始化的,因此您将创建一个没有外键的嵌套映射。结合这四个修复,我们将得出:

locals {
  dependencies = {
    for key, value in var.dependencies : value.virtual_machine_id => data.azurerm_virtual_machine.wininstaller.id
  }
}

修复语法和函数错误。

当您遍历映射并希望访问值时,需要在key和value之间拆分临时lambda变量。当您想要访问对象的属性时,必须在作用域中提供该属性的完整且正确的命名空间。构造映射时,需要使用
=>
运算符指定键值对。映射是用
{}
初始化的,因此您将创建一个没有外键的嵌套映射。结合这四个修复,我们将得出:

locals {
  dependencies = {
    for key, value in var.dependencies : value.virtual_machine_id => data.azurerm_virtual_machine.wininstaller.id
  }
}
修复语法和函数错误