Используются два модуля, но только один оператор вывода.
./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