Как повторно использовать модуль несколько раз в одном и том же файле main.tf? - PullRequest
1 голос
/ 21 октября 2019

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

module "project1" {
source = ".modules/project_module"
    project_id = "project1"
    ...
}

module "project2" {
source = ".modules/project_module"
    project_id = "project2"
    ...
}

Модуль использует провайдера Google длясоздавать ресурсы в GCP.

К сожалению, это не сработало, как мы надеялись. Во-первых, каждый новый проект требует вызова terraform init, а во-вторых, удалить проект невозможно, поскольку при удалении модуля из файла main.tf Terraform жалуется, что без поставщика Google он не сможет уничтожить ресурсы. Например:

module.project1.google_storage_bucket_iam_member.some-bucket: 
configuration for module.project1.provider.google is not present; a provider configuration block is required for all operations

Можно ли несколько раз использовать один и тот же модуль в одном и том же main.tf? Я понимаю, что в идеале я должен написать провайдера, но я бы хотел пока избежать этого.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Оказалось, что в государстве было что-то непоследовательное. Сгорел конец, после повторного создания проекта с нуля, оставив провайдера Google вне модуля, все заработало.

0 голосов
/ 22 октября 2019
  1. Если вы создаете новый модуль в main.tf, вы должны вызвать terraform init. это логика terraform.

  2. Terraform проверяет весь код, даже если вы просто хотите применить некоторые ресурсы. Я рекомендую использовать опции workspace и -target. Он может применять / уничтожать независимость каждого модуля.

-target опция также проверяет весь код terraform перед применением / уничтожением.

В вашем случае вы можете получить тот же результат, когда высделать 2 рабочих пространства и 1 модуль.

как:

  • рабочее пространство terraform
terraform workspace list

=>   default
   * dev
     pro
     stg
terraform workspace select dev
  • опция цели terraform
terraform destroy -target module.project2
...