#terraform #terraform-template-file
#terraform #terraform-template-file
Вопрос:
Моя структура каталогов Terraform выглядит примерно так :
├── deploy
│ ├── dev.tfvars
│ └── qa.tfvars
├── modules
│ ├── private
│ │ ├── bastion.tf
│ ├── db.tf
│ │ └── variables.tf
│ └── public
│ ├── web.tf
│ └── variables.tf
├── main.tf
В bastion.tf , Я пытаюсь вызвать переменную из variables.tf вот так :
resource "aws_eip" "bastion" {
instance = "var.eip"
vpc = true
}
где, eip = 10.x.x.x
задается, скажем, в dev.tfvars.
И конфигурация для main.tf выглядит так :
provider "aws" {}
terraform {
backend "s3" {}
}
module "private" {
source = "./modules/private"
}
При запуске terraform validate выдается сообщение об ошибке, что — Требуется аргумент «eip», но определение не найдено. Даже если я попытаюсь предоставить eip модулю, например :
module "private" {
source = "./modules/private"
eip = var.eip
}
это выдает мне другую ошибку :
Входная переменная с именем «eip» не была объявлена. Эта переменная может быть объявлена с переменной «eip» {} block
Я variable "eip" {}
уже определил в своем variables.tf такой, что он принимает значения из файла.tfvars, но почему-то это не так. Кто-нибудь может подсказать, чего еще мне может не хватать?
Комментарии:
1. Первая ошибка заключается в том, что у вас нет значения по умолчанию для
eip
аргумента дляprivate
модуля, поэтому вам необходимо указать его. Вторая ошибка связана с тем, что вы предоставили модулю аргумент дляeip
, который является необъявленной переменной. Вам нужно либо указать аргумент, который определен, либо объявитьeip
переменную и определить для нее значение.2. У меня есть значение eip, определенное в файле .tfvars. Что мне нужно для извлечения значения из .tfvars и просто пустого объявления eip like —
variable eip {}
в variables.tf ?
Ответ №1:
Похоже, вам не хватает объявлений переменных…
Из вашей файловой структуры:
├── deploy
│ ├── dev.tfvars
│ └── qa.tfvars
├── modules
│ ├── private
│ │ ├── bastion.tf
│ ├── db.tf
│ │ └── variables.tf
│ └── public
│ ├── web.tf
│ └── variables.tf
├── main.tf
Похоже, что не существует сопутствующего, variables.tf
для main.tf
каждого уровня необходимо объявлять переменные, которые будут использоваться ресурсами или подмодулями.
Если вы загрузите свой код на GitHub и разместите ссылку, я мог бы помочь разблокировать вас.
Комментарии:
1. Я попытался добавить variabless.tf файл в том же расположении, что и main.tf и добавлены пустые переменные для передачи модулям, но это также не сработало и выдало ошибку: Ошибка: отсутствует требуемый аргумент на main.tf строка 9 в модуле «private»: модуль «private» { Требуется аргумент «eip», но определение не найдено.
2. @s_neenu Я внес исправление в ваш файл переменных github.com/heldersepu/terraform-snippet/blob/master/terraform / … с этим я могу запустить plan без каких-либо проблем
3. Спасибо! Будет ли то же самое работать для
terraform validate
? В соответствии с этим проверка не принимает значения .tfvars [ссылка] github.com/hashicorp/terraform/issues/157334. @s_neenu да, должно быть … но не верьте мне на слово, просто клонируйте мой репозиторий и протестируйте его