将值动态注入 Terraform 中的变量
Posted
技术标签:
【中文标题】将值动态注入 Terraform 中的变量【英文标题】:dynamically inject values into variables in Terraform 【发布时间】:2020-11-06 02:02:14 【问题描述】:我正在尝试更改地形地图中的值。在我的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
构建对象时需要键表达式。
有谁知道如何解决这个问题或有更好的方法来解决这个问题?
【问题讨论】:
【参考方案1】:当您遍历一个映射并想要访问一个值时,您需要在键和值之间拆分临时 lambda 变量。当你想访问一个对象的属性时,你必须在作用域中提供该属性的完整和正确的命名空间。构建map时,需要用=>
操作符指定键值对。映射使用 初始化,因此您将创建一个没有外键的嵌套映射。结合这四个修复,我们将得出:
locals
dependencies =
for key, value in var.dependencies : value.virtual_machine_id => data.azurerm_virtual_machine.wininstaller.id
修复您的语法和功能错误。
【讨论】:
以上是关于将值动态注入 Terraform 中的变量的主要内容,如果未能解决你的问题,请参考以下文章