Terraform игнорирует файл terraform.tfvars при использовании -var или -var-file

Через пару месяцев, когда я не занимался изменениями в инфраструктуре, я попытался загрузить наши файлы terragrunt на новую машину и столкнулся с парой ошибок, решение которых не нашел.

В основном кажется, что файл terraform.tfvars (или любой файл *.auto.tfvars в этом отношении) игнорируется terraform, когда присутствует опция -var или -var-file.

Мы используем иерархическую конфигурацию 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, она работает, поэтому она просто не загружается автоматически.

Какие-нибудь мысли?


person Markus Mühlberger    schedule 22.10.2018    source источник
comment
У меня та же проблема, в документации Terraform, похоже, подробно не рассматривается, как загружаются переменные или какой приоритет им присваивается. В моем случае добавление параметра -var-file к команде плана является жизнеспособным обходным путем, но может не работать для всех.   -  person celestialorb    schedule 29.10.2018
comment
Мне пришлось переименовать terraform.tfvars в prod.auto.tfvars, и тогда это сработало. Не имеет смысла, что terraform.tfvars и *.auto.tfvars должны работать.   -  person Mamun    schedule 11.12.2020


Ответы (1)


Вышеуказанные механизмы установки переменных могут использоваться вместе в любой комбинации. Если одной и той же переменной присвоено несколько значений, 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

person Ankit Mehta    schedule 01.03.2021