Вызов и выход вложенных модулей Terraform - PullRequest
0 голосов
/ 23 января 2019

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

Есть дерево моей файловой системы.

   ├── main.tf
   └── modules
       ├── client.tf
       └── in
          └── main.tf

Мои файлы показаны ниже.

   #main.tf 
   module "my_vpc" {
          source = "./modules"
   }

   # modules/client.tf
   provider "aws" {
          region = "us-east-2"
   }

   module "inner" {
          source = "./in"
   }

  # in/main.tf

  provider "aws" {
        region = "us-east-2"
  }

  resource "aws_vpc" "main" {
        cidr_block = "10.0.0.0/16"
  }

  output "vpc_id" {
      value = "${aws_vpc.main.id}"
  }

Так что в моем случае я хочу получить результаты, полученные от модулей, созданных ресурсами, в / main.tf.Но когда я запустил команду применения terraform, вывода не было.

Как я могу решить эту проблему.

Спасибо

1 Ответ

0 голосов
/ 23 января 2019

Используются два модуля, но только один оператор вывода.

./main.tf создает модуль my_vpc из ./modules/client.tf в client.tf вы создаете модуль inner из ./modules/in/main.tf

Модуль inner имеет один выход vpc_id, определенный в ./modules/in/main.tf Вы должны также сделать оператор вывода на уровне ./modules/client.tf.Любой модуль, из которого вы хотите получить выход, должен иметь оператор вывода для этой переменной, даже если выходные данные объединяют в цепочку выходные данные внутреннего модуля.

# ./modules/client.tf
provider "aws" {
   region = "us-east-2"
}

module "inner" {
   source = "./in"
}

output "vpc_id" {
   value = "${modules.inner.vpc_id}"
}

Теперь модуль, определенный в ./modules/client.tf, выводитзначение, которое вы хотите на верхнем уровне.Вы можете взаимодействовать с ним в ./main.tf следующим образом:

#main.tf 
module "my_vpc" {
   source = "./modules"
}

locals {
   vpc_id = "${modules.my_vpc.vpc_id}"
}

# output the vpc id if you need to
output "vpc_id" {
   value = "${modules.my_vpc.vpc_id}"
}

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

├── main.tf
└── modules
   ├── vpc
      ├── modules
      ├  └── in
      ├     └── main.tf
      └── client.tf
   └── another_module
      └── main.tf
...