需要通过命令行将地图传递到 Terraform(不想使用 var 文件或 tfvar),并且遇到 Linux 删除语音标记的问题。因此需要一些可以通过 Terraform 控制台和 bash echo 解释为地图的东西。
terraform console
{"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}
Run Code Online (Sandbox Code Playgroud)
这可行,但 bash(用于运行计划)会删除 Terraform 不喜欢的语音标记:
echo {"ip_add_1"="1.1.1.1","ip_add_2"="2.2.2.2"}
Run Code Online (Sandbox Code Playgroud)
它还会删除逗号,但这并不重要,因为我只使用 echo 进行测试,而 bash shell 上的 Terraform plan 不会这样做。
我已经尝试了 1000 种转义、单引号等变体,但找不到有效的解决方案。有关信息,我使用在 Ubuntu 代理上运行的 Azure DevOps 变量传递此信息:
terraform plan -var ip_list=$(ip_list)
Run Code Online (Sandbox Code Playgroud) 仅当字符串 var 是特定的 2 个值(stg 或 prod)时,我才会使用动态块。此代码不起作用:
dynamic "log" {
for_each = var.environment == "stg" || var.environment == "prod" ? [1] : [0]
content {
category = "AppServiceAntivirusScanAuditLogs"
enabled = true
}
}
Run Code Online (Sandbox Code Playgroud)
所以当环境是“stg”或“prod”时我想要这个块,但当它是其他任何东西时我不想要它。这可以运行,但逻辑不起作用。
我过去使用布尔变量做过类似的事情,这已经有效,但当我肯定可以以某种方式评估这些字符串时,我不愿意添加另一个变量?
还尝试将逻辑移至“enabled =”字段,该字段有效,但由于我遇到的问题的性质,我需要在块级别执行此操作。