Dockerized terraform и tfstate - PullRequest
       7

Dockerized terraform и tfstate

0 голосов
/ 19 сентября 2018

У меня есть этот докер-контейнер для запуска terraform.

псевдоним terraform = 'docker run -i -t -v ~ / .aws: /root/.aws: ro -v $ (pwd): /app -w / app / rubendob / terraform: 0.11.8 '

- это просто копия официального изображения terraform.Ничего фантастического.

FROM golang:alpine
MAINTAINER "HashiCorp Terraform Team <terraform@hashicorp.com>"

ENV TERRAFORM_VERSION=0.11.8

RUN apk add --update git bash openssh

ENV TF_DEV=true
ENV TF_RELEASE=true

WORKDIR $GOPATH/src/github.com/hashicorp/terraform
RUN git clone https://github.com/hashicorp/terraform.git ./ && \
    git checkout v${TERRAFORM_VERSION} && \
    /bin/bash scripts/build.sh

RUN rm -rf /var/lib/apt/lists/*

WORKDIR $GOPATH
ENTRYPOINT ["terraform"]

Итак, я назвал это так:

alias terraform='docker run -i -t -v ~/.aws:/root/.aws:ro -v $(pwd):/app -w /app/ rubendob/terraform:0.11.8'

Тогда у меня есть следующая структура папок, и она работала нормально, так как ups, я решил запустить некоторые вещи terraform в папке dev.

ls -ls tf
total 0
0 drwxr-xr-x  3 ruben.ortiz  staff   96 15 sep 23:43 dev
0 drwxr-xr-x  6 ruben.ortiz  staff  192 11 sep 19:53 modules
0 drwxr-xr-x  4 ruben.ortiz  staff  128 15 sep 12:39 prod

Я запустил контейнер как

terraform plan tf/prod/

и работал нормально, но контейнер создал затем папку .terraform с tfstate и другими вещами.

Так что еслиЯ хочу выполнить ту же команду, но dev среда просто не может, потому что она обнаруживает и предыдущую папку .terraform

ls -lisah tf/.terraform/
total 8
901814 0 drwxr-xr-x   5 ruben.ortiz  staff   160B 15 sep 12:38 .
885805 0 drwxr-xr-x   6 ruben.ortiz  staff   192B 15 sep 23:54 ..
901815 0 drwxr-xr-x  15 ruben.ortiz  staff   480B 16 sep 00:05 modules
901821 0 drwxr-xr-x   3 ruben.ortiz  staff    96B 10 sep 23:02 plugins
901819 8 -rw-r--r--   1 ruben.ortiz  staff   567B 16 sep 18:43 terraform.tfstate

И если я вхожу в папку dev, я просто устанавливаю том в текущий каталогон не может видеть папку общих модулей.

Как вы, ребята, можете обойти это?

Спасибо!

1 Ответ

0 голосов
/ 22 сентября 2018

Я должен согласиться с комментариями здесь.Я бы посоветовал вам пересмотреть преимущества, которые вы получаете от этого процесса.

При этом причина конфликтов - в том, что вы пытаетесь вызвать 2 разных рабочих пространства из общего каталога.Этого можно избежать, переопределив рабочий каталог при входе в контейнер (см. https://docs.docker.com/engine/reference/run/#workdir) или просто изменив каталог на правильный контекст.

Я бы также предложил вам попробовать альтернативу управлению средами с использованием различныхрабочие пространства.

  1. Не используйте папки для управления средами IaC. Это приводит к дрейфу, поскольку нет общего шаблона для вашей инфраструктуры.
  2. Используйте одно рабочее пространство и переменные для управленияспецификации среды. Пример: напишите свои модули так, чтобы при изменении переменной среды (var.stage популярно) план изменялся в соответствии с вашими требованиями. Как правило, среды должны изменяться как можно меньше, а количество, экспозиция и емкость обычно являются переменнойКонфигурации. Dev может развернуть 1 ВМ с 1 ядром и 1 ГБ ОЗУ в частной топологии, но может использоваться 3 ВМ с 2 ядрами и 4 ГБ ОЗУ с дополнительной общедоступной топологией. Конечно, у вас может быть больше вариантов: dev может запускать базу данных proДля того чтобы сэкономить на стоимости, используйте тот же сервер, что и приложение, но у производства может быть выделенный экземпляр БД.Всем этим можно управлять, изменяя одну переменную, троичные операторы и интерполяцию.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...