terraform 是否允许我们覆盖变量

Mun*_* A. 5 terraform terraform-provider-aws

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

variable "foo" {}
variable "bar" { default = "false"}
Run Code Online (Sandbox Code Playgroud)

foo是强制性的,并bar分配有默认值false。terraform 中是否有resoruce可用的值可以重新分配或覆盖该bar值?我是从resource角度来问这个问题的。我知道我可以使用terraform-modules.

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

resource "null_resource" "this" {
  provisioner "local-exec" {
    command = "echo ${var.env} > ${var.newvar}"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

interpreter = ["shell","?"]我应该传递哪些值来curl在配置程序中执行命令local-exec

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
Run Code Online (Sandbox Code Playgroud)

KJH*_*KJH 5

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

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

  1. 您可以导出具有您想要使用的值的环境变量。例如,您可以将barvar 设置为新值export TF_VAR_bar=newvalue,然后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

哈!