#terraform #provider
#terraform #поставщик
Вопрос:
В настоящее время я должен определить версию Terraform и версию Provider в каждом из моих шаблонов 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
Можно ли таким образом передать версию Provider / Terraform в шаблоны?
Комментарии:
1. Есть ли какая-либо причина, по которой эти каталоги не могут быть рабочими пространствами? Это решило бы вашу проблему и другие.
Ответ №1:
Если вы не хотите использовать рабочие пространства 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
Комментарии:
1. Я действительно использую рабочие пространства, но не совсем уверен, как это решает эту проблему. Не могли бы вы уточнить? Точно так же, как вы могли бы добиться этого с помощью символических ссылок?
2. @xyz1234 Я отредактировал свой ответ, добавив еще немного информации.
3. Спасибо за разъяснение. Я понимаю, о чем ты говоришь. Таким образом, похоже, что мне нужно было бы определить блоки моего провайдера, блоки terraform, блоки remote_state для каждого шаблона в versions.tf , правильно?