Как структурировать репозиторий Terraform для обмена данными между модулями - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть git репозиторий для управления развертыванием моей инфраструктуры. У меня есть локальный экземпляр OpenStack, и я использую Azure и AWS. Недавно я начал добавлять много данных, и я хочу немного изменить свой репозиторий git, добавив модули в иерархии. Я понял, что хочу иметь много общих данных, чтобы избежать повторения. Я приведу несколько примеров того, что у меня есть, которые могут использоваться различными виртуальными машинами:

  • Образы (Ubuntu 18.04, Debian Buster, et c.)
  • Ароматы (разных размеров). с виртуальными ЦП, ОЗУ и т. д. c.)
  • Су bnet пулы, в которых я беру плавающие IP-адреса (разные пулы c IP-адресов)
  • Группы безопасности (с разными открытыми порты для Inte rnet, локальное соединение и т. д. c.)
  • Сети (внутренние сети, где я делю свои виртуальные машины)

Я хочу иметь такой вид иерархия:

/
├── local
│   ├── main.tf
│   ├── flavors
│   │   └── main.tf
│   ├── security-rules
│   │   ├── main.tf
│   │   └── sec-rule1
│   │       └── main.tf
│   └── vms
│   │   ├── main.tf
│   │   └── vm1
│   │       └── main.tf
|   ├── etc.
|   ...
├── aws
|   ...
├── azure
|   ...
└── main.tf

Когда я начал переходить на него, я понял, что не могу легко делиться данными между различными модулями. Например, когда я хочу создать новую виртуальную машину, я хочу ссылаться (по имени или идентификатору) на разновидности, группы безопасности и т. Д. c. других модулей. Я знаю, что мог бы использовать Входные переменные , Выходные значения и / или Инверсия зависимости , но я получаю грязную настройку, с множеством сложных структур, только поделиться простой строкой.

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

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

Существуют ли передовые практики для структурирования хранилища git, подобного этому, с использованием ссылок на идентификаторы или имена в других модулях?

Отказ от ответственности: я прочитал это предложение в официальной документации:

Однако в большинстве случаев мы настоятельно рекомендуем сохранять дерево модулей плоским, только с одним уровнем ребенка модули ...

-> https://www.terraform.io/docs/modules/composition.html

Но, следуя этому правилу, я закончу файлом из тысяч строк ... ?

...