terraform是否提供这样的功能来覆盖变量值?假设我已经声明了下面给出的两个变量。
variable "foo" {}
variable "bar" { default = "false"}
foo
是必需的,bar
分配默认值false。地形中是否有任何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
[回答关于覆盖的第一个问题...]
有几种方法可以解决这个问题。我不知道您的确切用例,因此您的里程可能会有所不同。
-
您可以导出具有要使用的值的环境变量。例如,您可以使用
export TF_VAR_bar=newvalue
将bar
var 设置为新值,然后在该会话中运行terraform
。或者将它们组合在同一行上:TF_VAR_bar=newvalue terraform apply
参考: https://www.terraform.io/docs/configuration/environment-variables.html
-
使用覆盖文件。例如:
override.tf
可能包含variable "bar" { default = "newvalue"}
或任何其他 TF 代码。它是最后加载的。参考: https://www.terraform.io/docs/configuration/override.html
-
将代码放入 TF 模块中,然后可以调用该模块并传递所需的
bar
值。如果您继续重复使用相同的代码,并希望使用不同的参数预配某些资源集的不同实例,这将特别有用。参考: https://www.terraform.io/docs/configuration/modules.html
哼!