terraform是否允许我们覆盖变量

时间:2018-10-12 07:30:07

标签: terraform terraform-provider-aws

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","?"]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

1 个答案:

答案 0 :(得分:1)

[正在回答有关替代的第一个问题...]

有几种方法可以解决此问题。我不知道您的确切用例,因此您的工作量可能会有所不同。

  1. 您可以导出具有您要使用的值的环境变量。例如,您可以使用barexport TF_VAR_bar=newvalue 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!