Вызов и выход вложенных модулей Terraform
Я работаю над подготовкой инфраструктуры, поэтому я называю модули вложенными.
Есть дерево моей файловой системы.
├── 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 ответ
У вас есть два используемых модуля, но только один выходной оператор.
./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