Как запустить несколько команд terraform одновременно? - PullRequest
0 голосов
/ 09 июля 2019

Hashicorp имеет изображение докера, содержащее терраформу, доступное на док-станции: https://hub.docker.com/r/hashicorp/terraform

Я могу смонтировать свой проект terraform как том и запустить на нем terraform init:

docker run -it -v $(PWD):/tmp terraform:light init /tmp

Однако я не могу выполнить какую-либо другую команду terraform, потому что сначала нужно запустить terraform init

docker run -it -v $(PWD):/tmp terraform:light apply /tmp

эта команда возвращает:

Требуется повторная инициализация плагина. Пожалуйста, запустите "terraform init".
Причина: не удалось удовлетворить требования к плагину.

Что имеет смысл.

Следовательно, как я могу запустить несколько команд terraform? Я хочу запустить init, а затем apply.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Команда terraform init инициализирует текущий рабочий каталог для использования с данным каталогом конфигурации. В этом сценарии Docker заданный каталог конфигурации - /tmp, но текущий рабочий каталог - это каталог внутри самого контейнера, не предоставленный хостом.

Вместо передачи пути к terraform init, вы можете использовать опцию --workdir (или -w), чтобы гарантировать, что Terraform будет использовать этот смонтированный том как рабочий каталог и конфигурации каталог, который является наиболее распространенным и наиболее поддерживаемым способом использования Terraform:

docker run -it -v ${PWD}:/tmp -w /tmp terraform:v0.12.3 init
docker run -it -v ${PWD}:/tmp -w /tmp terraform:v0.12.3 apply

С учетом вышесказанного, основные дистрибутивные архивы .zip Terraform - это всего лишь один исполняемый файл, который должно быть легко извлекать и запускать на большинстве систем, поэтому дополнительная сложность использования Docker может не стоить, если вы не интегрируетесь с некоторыми другая система, где использование Docker обязательно. Запуск исполняемого файла Terraform напрямую исключает необходимость перевода между двумя разными файловыми системами и, возможно, (в зависимости от конфигурации вашей системы) в две разные операционные системы и т. Д.

1 голос
/ 09 июля 2019

Запуск sh -c 'terraform init && terraform apply' в качестве единой команды через Docker сделает то, что вам нужно. В вашем конкретном случае вам потребуется использовать флаг --entrypoint, чтобы переопределить выполнение terraform по умолчанию. Установка --entrypoint=/bin/bash должна позволять запускать произвольные команды, при условии, что bash доступен в контейнере Docker.

terragrunt может автоматически делать terraform init при необходимости, так что, возможно, стоит посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...