使用-var或-var-file时,Terraform会忽略terraform.tfvars文件

时间:2018-10-22 13:39:36

标签: terraform terragrunt

几个月不处理基础结构更改后,我试图将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命令的参数时,它可以正常工作,因此不会自动加载。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

上述设置变量的机制可以任意组合使用。如果为同一个变量分配了多个值,Terraform 将使用它找到的最后一个值,覆盖任何先前的值。请注意,不能在单个源中为同一变量分配多个值。

Terraform 按以下顺序加载变量,后面的源优先于前面的源:

  • 环境变量
  • terraform.tfvars 文件(如果存在)。
  • terraform.tfvars.json 文件(如果存在)。
  • 任何 *.auto.tfvars 或 *.auto.tfvars.json 文件,按其文件名的词法顺序处理。
  • 命令行上的任何 -var 和 -var-file 选项,按照它们提供的顺序。 (这包括由 Terraform Cloud 工作区设置的变量。)

参考:https://www.terraform.io/docs/language/values/variables.html