Terraform — доступ к сценарию корневого модуля из дочернего модуля

#gitlab #terraform #terraform0.12

# #gitlab #terraform #terraform0.12

Вопрос:

У меня есть ROOT_MODULE с main.tf :

 #Root Module - Just run the script
resource "null_resource" "example" {
  provisioner "local_exec" {
    command = "./script.sh"
}
 

и script.sh :

 echo "Hello world
 

теперь у меня есть другой каталог в другом месте, где я создал CHILD_MODULE с другим main.tf :

 #Child Module
module "ROOT_MODULE" {
  source = "gitlabURL/ROOT_MODULE"
}
 

Я экспортировал свой файл плана: terraform plan -out="planfile"
однако, когда я выполняю terraform apply действия против файла плана, каталог, в котором я нахожусь в настоящее время, больше не имеет представления, где script.sh есть. Мне нужно сохранить сценарий в том же каталоге, что и корневой модуль. Этот скрипт также находится внутри репозитория gitlab, поэтому у меня нет локального пути для его вызова. Есть идеи относительно того, как я могу вставить этот скрипт в свой дочерний модуль / выполнить его из моего файла плана?

 Error running command './script.sh': exit status 1. Output: cannot access 'script.sh': No such file or directory
 

Ответ №1:

Вы можете получить доступ к пути к конфигурации корневого модуля, чтобы сохранить пути для файлов со встроенным path.root :

 provisioner "local_exec" {
  command = "${path.root}/script.sh"
}
 

Однако, исходя из вашего вопроса, похоже, вы поменяли терминологию для корневого модуля и дочернего модуля. Таким образом, этот модуль, по-видимому, действительно является вашим дочерним модулем, а не корневым, и вам необходимо получить доступ к пути с path.module помощью встроенного:

 provisioner "local_exec" {
  command = "${path.module}/script.sh"
}
 

и тогда путь к сценарию будет сохранен независимо от вашего текущего рабочего каталога.

Эти встроенные выражения задокументированы здесь .

Комментарии:

1. Согласен, это ответ, но можете ли вы найти последние документы для этого? Потому что я мог найти только документы версии 0.11.

2. @9bO3av5fw5 Они действительно явно исчезли из документации, но все еще существуют неявно. Обновление ответа.

3. Я думаю, что это документация, которую вы ищете: terraform.io/docs/configuration/expressions /…

4. @MartinAtkins Теперь мы должны пинговать вас в следующий раз, когда кто-то ищет скрытую документацию.