Получить текущий рабочий каталог в terraform - PullRequest
0 голосов
/ 19 февраля 2020

Я использую Terraform, используя Terragrunt, поэтому на самом деле я не уверен относительно пути, из которого вызывается terraform.

Поэтому я пытаюсь получить текущий рабочий каталог следующим образом:

resource null_resource "pwd" {
  triggers {
    always_run = "${uuid()}"
  }
  provisioner "local-exec" {
    command = "echo $pwd >> somefile.txt"
  }
}

Однако полученный файл пуст.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 19 февраля 2020

Terraform имеет встроенный объект path, который содержит атрибуты для различных путей, о которых Terraform знает:

  • path.module - это каталог, содержащий модуль, в котором размещено выражение path.module.
  • path.root - это каталог, содержащий модуль root.
  • path.cwd - текущий рабочий каталог.

При написании модулей Terraform мы чаще всего обычно хотят разрешить пути относительно самого модуля , чтобы он был автономным и не делал никаких предположений или не оказывал влияния на другие модули в конфигурации. Поэтому path.module чаще всего является правильным выбором, делая модуль c тем, откуда он создается.

Очень редко используется текущий рабочий каталог, потому что это сделает конфигурацию Terraform чувствительной к тому, где он применяется и, вероятно, приведет к ненужным изменениям ресурсов, если впоследствии вы примените ту же конфигурацию из другого каталога или на другом компьютере в целом. Однако в редких ситуациях, когда такая вещь необходима, path.cwd сделает это.

path.module и path.root - оба относительных пути от path.cwd, потому что это минимизирует риск непреднамеренного введения подробности о системе, в которой Terraform запускается в конфигурации. Однако если по какой-то причине вам нужно нужен абсолютный путь к модулю, вы можете использовать abspath, например abspath(path.module).

2 голосов
/ 19 февраля 2020

Попробуйте command = "echo $(pwd) > somefile.txt"

...