【问题标题】:dynamically inject values into variables in Terraform将值动态注入 Terraform 中的变量
【发布时间】:2023-03-18 08:00:01
【问题描述】:

我正在尝试更改地形地图中的值。在我的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:依赖项 = {for x in var.dependencies : { win_chocolatey.virtual_machine_id = data.azurerm_virtual_machine.wininstaller.id }}

构建对象时需要键表达式。

有谁知道如何解决这个问题或有更好的方法来解决这个问题?

【问题讨论】:

    标签: terraform


    【解决方案1】:

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

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

    修复您的语法和功能错误。

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2020-10-13
      • 2016-09-16
      • 2021-05-03
      • 1970-01-01
      相关资源
      最近更新 更多