【问题标题】:Does terraform allow us to override variablesterraform 是否允许我们覆盖变量
【发布时间】:2019-03-17 09:16:14
【问题描述】:

terraform 是否提供这样的功能来覆盖变量值?假设我已经声明了下面给出的两个变量。

variable "foo" {}
variable "bar" { default = "false"}

foo 是强制性的,bar 分配有默认值 false。 terraform 中是否有任何 resoruce 可用,我可以在其中重新分配或覆盖 bar 值?我在resource 的角度问这个问题。我知道我可以使用 terraform-modules 来做到这一点。

我已经尝试过这种用法null_resource,但没有得到预期的结果。它仍然返回默认值。

resource "null_resource" "this" {
  provisioner "local-exec" {
    command = "echo ${var.env} > ${var.newvar}"
  }
}

我还想在命令属性中运行curl。我需要使用“解释器”吗?如果是这样,那么它的价值是什么?

interpreter = ["shell","?"] 我应该传递什么值来在local-exec 供应商中执行curl 命令。

bash 脚本

function check_efs() {
curl -ls https://elasticfilesystem.us-east-1.amazonsaws.com
if [ $? -eq 0 ]; then
        output=1
else:
        output=0
}

function produce_output() {
value=$(output)

jq -n \
    --arg is_efs_exist "$value" \
    '{"is_efs_exist":$is_efs_exist}'
}

check_efs
produce_output

【问题讨论】:

标签: terraform terraform-provider-aws


【解决方案1】:

[回答第一个关于覆盖的问题...]

有几种方法可以解决这个问题。我不知道你的确切用例,所以你的里程可能会有所不同。

  1. 您可以导出具有您想要使用的值的环境变量。例如,您可以使用export TF_VAR_bar=newvaluebar var 设置为新值,然后在该会话中运行terraform。或者将它们组合在同一行:TF_VAR_bar=newvalue terraform apply

    参考:https://www.terraform.io/docs/configuration/environment-variables.html

  2. 使用覆盖文件。例如。: override.tf 可以包含 variable "bar" { default = "newvalue"} 或任何其他 TF 代码。它是最后加载的。

    参考:https://www.terraform.io/docs/configuration/override.html

  3. 将您的代码放入 TF 模块中,然后您可以调用该模块并传递您想要的 bar 的值。如果您继续重复使用相同的代码并希望使用不同的参数为某些资源集提供不同的实例,这将特别有用。

    参考:https://www.terraform.io/docs/configuration/modules.html

HTH!

【讨论】:

  • 感谢您的回复,用例是我想使用给定区域预置 EC2 实例并使用 EFS 挂载该实例。现在的问题是,EFS 在某些区域不可用,这可能会导致配置时出现问题。所以使用一些变量值作为计数,我想确定 EFS 是否存在。
  • 你可以试试这样的:count = "${ var.efs_exists == "true" ? 1 : 0 }"。您可以通过一些外部机制(shell 脚本等)设置efs_exists 的值。
  • 这正是我想要实现的目标。我正在使用 external data source 来执行 bash 脚本。如果我简单地返回 JSON,它就会成功执行。但是,如果我使用 curl -ls https://elasticfilesystem.us-east-1.amazonaws.com 然后尝试返回它会给我一条错误消息“无法解析 JSON”
  • 检查这个link我已经发布了整个场景
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 2021-05-04
  • 2021-11-20
相关资源
最近更新 更多