首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将输出从一个模块传递到另一个模块?

如何将输出从一个模块传递到另一个模块?
EN

Stack Overflow用户
提问于 2019-01-20 14:22:10
回答 2查看 4.7K关注 0票数 4

我有两个模块。

  1. 一种叫做module-azure-vnet
  2. 第二个叫做module-azure-vm-instance-zabbix-proxy

我希望将输出从模块module-azure-vnet传递到模块module-azure-vm-instance-zabbix-proxy。第一个模块工作正常,但第二个模块需要子网、安全组和路由的输入。

main.tf

代码语言:javascript
复制
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” 错误:模块“模块-azure-vm-实例-zabbix-代理”:"azurerm_subnet“不是有效的参数。

在模块module-azure-vnet-dtap

代码语言:javascript
复制
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",
  ]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-25 12:01:23

我自己找到了解决方案,这是连接两个模块所需的整个结构。

在VNET模块示例中设置变量:

代码语言:javascript
复制
variable "resource_group_name" {
      default     = "default_resource_group"
      }

      variable "region_name" {
      default     = "ukwest"
      }

宣布产出:

代码语言:javascript
复制
output "security_groups_id_wan" {
      value = "${element(concat(azurerm_network_security_group.wan.*.id, list("")),0)}"

        depends_on = [
          "azurerm_subnet.wan",
          ]
      }

您需要在zabbix代理模块中使用变量来接收values>。

代码语言:javascript
复制
variable "resource_group_name" {
        default = ""
        }
        variable "resource_group_location" {
        default = ""
        } 

在外部文件夹中,main.tf for modules>在哪里?

代码语言:javascript
复制
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"
      }
票数 3
EN

Stack Overflow用户

发布于 2019-01-20 14:53:02

您应该引用如下的输出:

代码语言:javascript
复制
"${module.MODULE_NAME.OUTPUT_NAME}"

就你的情况而言,应该是:

代码语言:javascript
复制
"${module.module-azure-vnet-dtap.subnets_id_wan}"

此外,您只能访问输出,不能访问模块的资源(afaik)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54277401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档