小编Guy*_*ood的帖子

将地图变量传递给 Terraform 命令行

需要通过命令行将地图传递到 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)

bash terraform

7
推荐指数
1
解决办法
5963
查看次数

Terraform 动态块,具有基于变量字符串值的条件

仅当字符串 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 =”字段,该字段有效,但由于我遇到的问题的性质,我需要在块级别执行此操作。

terraform

6
推荐指数
1
解决办法
8600
查看次数

标签 统计

terraform ×2

bash ×1