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
答案 0 :(得分:1)
[正在回答有关替代的第一个问题...]
有几种方法可以解决此问题。我不知道您的确切用例,因此您的工作量可能会有所不同。
您可以导出具有您要使用的值的环境变量。例如,您可以使用bar
将export TF_VAR_bar=newvalue
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
的值。如果您继续重复使用相同的代码,并希望使用不同的参数来提供某些资源集的不同实例,则此功能特别有用。
HTH!