terraform - 如何将输出从一个模块传递到另一个模块?
问题描述
我有两个模块。
- 一个叫
module-azure-vnet
- 第二个叫做
module-azure-vm-instance-zabbix-proxy
我想将 Outputs 从 module 传递module-azure-vnet
到 module module-azure-vm-instance-zabbix-proxy
。第一个模块工作正常,但第二个模块需要子网、安全组和路由的输入。
主文件
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”配置:变量 azurerm_subnet.wan.id 中引用的未知资源“azurerm_subnet.wan”
错误:资源 'azurerm_network_security_rule.security_rule_default' 配置:变量 azurerm_network_security_group.wan.name 中引用的未知资源 'azurerm_network_security_group.wan'
错误:模块“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",
]
}
解决方案
我自己找到了解决方案,这是连接两个模块所需的整个结构。
在 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"
}
推荐阅读
- php - 从php数组中的字符串获取值
- delphi - 关于 SeDebugPrivilege 令牌
- delphi - 如何将 radiogroup 行分配给 Editbox.text
- python - 如何将属性添加到 ManyToMany 字段中的对象?
- firebase - Azure 通知中心 - “从令牌提供程序获取的令牌错误”
- android - 在 MaterialButton 中的 onClick 处理程序的 androidx.appcompat.widget.TintContextWrapper 中找不到自定义方法
- unicode - 如何将同一个字符与多个代码点进行比较?
- linux - 如何在服务器 Linux 上的 Jenkins 中使用 MSBuild 创建构建 .net
- php - 从 Laravel 中的命令调用控制器方法
- javascript - 使用替换和子字符串函数将字符串插入另一个字符串