Получить список переменных на Terraform - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь получить список переменных, используя Terraform, ниже моя структура каталогов:

.
├── main.tf
├── path_modules
│   └── module_name
│       ├── main.tf
│       └── variables.tf
└── variables.tf

Я поместил переменные в файл main.tf, как показано ниже:

module "module_name"
...
  ssh_users                   = ["user1", "user2", "user3", "user4", "user5", "user6", "user7", "user8", "user9"]
  ssh_keys                    = ["user1.pem.pub", "user2.pem.pub", "user3.pem.pub", "user4.pem.pub", "user5.pem.pub", "user6.pem.pub", "user7.pem.pub", "user8.pem.pub", "user9.pem.pub"]

Затем я поместил код для получения этой переменной в файл ./path_module/module_name/main.tf, как показано ниже:

resource "google_compute_instance" "module_name" {
...
  metadata = {
    count = length(var.ssh_keys)
    ssh-keys = format("%s:%s", "${var.ssh_users[count.index]}", file("${path.module}/${var.ssh_keys[count.index]}"))
  }

и после попытки проверки с помощью terraform validate Я получил это ошибка:

Error: Reference to "count" in non-counted context

  on path_module/module_name/main.tf line number, in resource "google_compute_instance" "module_name":
  line number:     ssh-keys = format("%s:%s", "${var.ssh_users[count.index]}", file("${path.module}/${var.ssh_keys[count.index]}"))

The "count" object can be used only in "resource" and "data" blocks, and only
when the "count" argument is set.

1 Ответ

0 голосов
/ 30 марта 2020

Обратите внимание, что вы можете использовать count только на уровне ресурсов, а аргумент metadata является отображением.

resource "google_compute_instance" "module_name" {
  count = length(var.ssh_keys)

  ...

  metadata = {
    ssh-keys = format(
      "%s:%s",
      "${var.ssh_users[count.index]}", ], 
      file("${path.module}/${var.ssh_keys[count.index]}")
    )
  }
}
...