Хранить версию «Провайдер» и «Терраформ» в отдельном файле TF? - PullRequest
0 голосов
/ 18 апреля 2019

В настоящее время я должен определить версию Terraform и версию провайдера в каждом из моих шаблонов Terraform.

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

Я смотрел на использование файла переопределений (https://www.terraform.io/docs/configuration/override.html),, но, похоже, мне нужно было бы определить весь блок Terraform / Provider из каждого шаблона в файле override.tf. Мне бы очень хотелось просто попросите Terraform посмотреть (псевдофайл) versions.tf, например, чтобы получить необходимые версии для каждого шаблона.

Итак, что-то вроде этого было бы желаемой (упрощенной) структурой каталогов:

 terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf

В настоящий момент должна быть только одна версия провайдера и одна версия Terraform, определенная в versions.tf

Можно ли таким образом передать версию провайдера / Terraform в шаблоны?

1 Ответ

0 голосов
/ 18 апреля 2019

Если вы не хотите использовать Рабочие пространства Terraform , создайте в каждом подкаталоге символическую ссылку, указывающую на файл versions.tf.

Например, если ваша структура:

terraform
     ├── dev
     │   └── main.tf
     ├── prod
     │   └── main.tf
     ├── stg
     │   └── main.tf
     └── versions.tf

И вы хотите, чтобы каждый подкаталог (dev, prod, stg) указывал на файл versions.tf в корневом каталоге terraform, создавая символическую ссылку в каждом подкаталоге:

ln -sf terraform/versions.tf terraform/dev/versions.tf
ln -sf terraform/versions.tf terraform/prod/versions.tf
ln -sf terraform/versions.tf terraform/stg/versions.tf

Ваша окончательная структура будет:

terraform
     ├── dev
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── prod
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     ├── stg
     │   └── main.tf
     │   └── versions.tf -> ../versions.tf
     └── versions.tf

Используя рабочие пространства Terraform, вместо наличия подкаталога для каждой «среды», которую вы используете, используйте один каталог, например:

terraform
     ├── main.tf
     └── versions.tf

И рабочее пространство для среды, которую вы создаете, выполняя:

terraform workspace new dev

Затем вы используете интерполяцию terraform, чтобы сделать что-то другое, в зависимости от того, в какой среде вы работаете, состояния terraform также сохраняются отдельно для каждого рабочего пространства.

Итак, если вы хотите работать в среде dev, переключитесь на нее:

terraform workspace select dev
...