几个月不处理基础结构更改后,我试图将terragrunt文件加载到新计算机上,并遇到了一些错误,而我找不到解决方法。
基本上,当存在terraform.tfvars
或*.auto.tfvars
选项时,-var
文件(或与此有关的任何-var-file
文件)会被terraform忽略。
我们正在使用一个分层的terragrunt配置,以针对不同的环境使用不同的凭据配置,这就是为什么存在一个account.tfvars
文件,其中包含所有数据的原因。
一切都工作到了今年八月,所以也许我没有在变更日志中发现一个变化?
特定于模块的terraform.tfvars
:
terragrunt = {
include {
path = "${find_in_parent_folders()}"
}
terraform {
source = "../../../modules//cockpit"
}
}
bucket_prefix = "cockpit-"
domain_name = "cockpit.donutapp.io"
父级terraform.tfvars
:
terragrunt = {
remote_state {
backend = "s3"
config {
encrypt = true
bucket = "my-${get_aws_account_id()}-tfstate"
key = "production/${path_relative_to_include()}/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-locks"
}
}
terraform {
extra_arguments "bucket" {
commands = ["${get_terraform_commands_that_need_vars()}"]
optional_var_files = [
"${get_tfvars_dir()}/${find_in_parent_folders("account.tfvars", "ignore")}",
]
arguments = [
"-var",
"terraform_bucket=my-${get_aws_account_id()}-tfstate",
]
}
extra_arguments "disable_input" {
commands = ["${get_terraform_commands_that_need_input()}"]
arguments = ["-input=false"]
}
}
}
由terragrunt执行的命令:
terraform plan -var terraform_bucket=my-accountid-tfstate \
-var-file=some-path/../account.tfvars \
-input=false
当我在-var-file=terraform.tfvars
文件夹中将terraform plan
添加为.terragrunt-cache
命令的参数时,它可以正常工作,因此不会自动加载。
有什么想法吗?
答案 0 :(得分:0)
上述设置变量的机制可以任意组合使用。如果为同一个变量分配了多个值,Terraform 将使用它找到的最后一个值,覆盖任何先前的值。请注意,不能在单个源中为同一变量分配多个值。
Terraform 按以下顺序加载变量,后面的源优先于前面的源:
参考:https://www.terraform.io/docs/language/values/variables.html