У меня есть 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
Но, следуя этому правилу, я закончу файлом из тысяч строк ... ?