Как передать выходы из одного модуля в другой?
У меня есть два модуля.
- один называется
module-azure-vnet
- второй называется
module-azure-vm-instance-zabbix-proxy
Я хочу передать выходы из модуля module-azure-vnet
в модуль module-azure-vm-instance-zabbix-proxy
, Первый модуль работает правильно, но второму нужны входные данные для подсети, группы безопасности и маршрута.
main.tf
module "module-azure-vnet-dtap" {
source = "/Users/username/project/module-azure-vnet-dtap"
}
variable "subnets_id_wan" {}
module "module-azure-vm-instance-zabbix-proxy" {
source = "/Users/username/project/module-azure-vm-instance-zabbix-proxy"
azurerm_subnet = "${module.module-azure-vnet-dtap.azurerm_subnet.wan.id}"
}
Ошибка: ресурс 'azurerm_network_interface.no_public_ip' config: неизвестный ресурс 'azurerm_subnet.wan', указанный в переменной azurerm_subnet.wan.id
Ошибка: конфигурация ресурса "azurerm_network_security_rule.security_rule_default": неизвестный ресурс "azurerm_network_security_group.wan", указанный в переменной azurerm_network_security_group.wan.name
Ошибка: модуль "module-azure-vm-instance-zabbix-proxy": "azurerm_subnet" не является допустимым аргументом
В модуле module-azure-vnet-dtap
resource "azurerm_subnet" "wan" {
count = "${var.enable_wan_subnet ? 1 : 0}"
provider = "azurerm.base"
name = "${format("%s-%s-%s", var.environment_name, "WAN", "Subnet")}"
virtual_network_name = "${azurerm_virtual_network.this.name}"
resource_group_name = "${azurerm_resource_group.this.name}"
address_prefix = "${cidrsubnet(var.cidr_block,5,count.index)}"
route_table_id = "${azurerm_route_table.wan.id}"
network_security_group_id = "${azurerm_network_security_group.wan.id}"
}
resource "azurerm_network_security_group" "wan" {
count = "${var.enable_wan_subnet ? 1 : 0}"
provider = "azurerm.base"
name = "${format("%s-%s", var.environment_name, "WAN-Subnet-Security-Group")}"
location = "${azurerm_resource_group.this.location}"
resource_group_name = "${azurerm_resource_group.this.name}"
}
output "subnets_id_wan" {
value = "${azurerm_subnet.wan.*.id}"
depends_on = [
"azurerm_subnet.wan",
]
}
2 ответа
Я сам нашел решение, вот вся структура, необходимая для соединения двух модулей.
установить переменные в примере модуля VNET:
variable "resource_group_name" {
default = "default_resource_group"
}
variable "region_name" {
default = "ukwest"
}
объявить результаты:
output "security_groups_id_wan" {
value = "${element(concat(azurerm_network_security_group.wan.*.id, list("")),0)}"
depends_on = [
"azurerm_subnet.wan",
]
}
вам нужны переменные в zabbix прокси-модуле для получения значений>
variable "resource_group_name" {
default = ""
}
variable "resource_group_location" {
default = ""
}
и во внешней папке, где находится main.tf для модулей>
module "module-azure-vm-instance-zabbix-proxy" {
source = "/Users/username/project/module-azure-vm-instance-zabbix-proxy"
resource_group_name = "${module.module-azure-vnet-dtap.resource_group_name}"
resource_group_location = "${module.module-azure-vnet-dtap.resource_group_location}"
subnets_id_wan = "${module.module-azure-vnet-dtap.subnets_id_wan}"
security_groups_name = "${module.module-azure-vnet-dtap.security_groups_name_dmz}"
environment_name = "${module.module-azure-vnet-dtap.environment_name}"
}
module module-azure-vnet-dtap {
source = "/Users/username/project/module-azure-vnet-dtap"
}
Вы должны ссылаться на вывод так:
"${module.MODULE_NAME.OUTPUT_NAME}"
в вашем случае это должно быть:
"${module.module-azure-vnet-dtap.subnets_id_wan}"
Кроме того, вы можете получить доступ только к выходам, а не к ресурсам из модуля (afaik).