首页 > 解决方案 > 带有 for_each 条件的模块组合

问题描述

在我的根模块上,我声明了两个模块(paired_regions_network 和paired_regions_app),它们都迭代了一组区域。

module "paired_regions_network" {
  source                  = "./modules/network"
  application_hostname    = ["${module.paired_regions_app.website_hostname}"]  // THIS IS BREAKING THE CODE
  ...
  for_each = (var.environment == "TEST" || var.environment == "PROD") ? var.paired_regions : { region1 = var.paired_regions.region1 }
}

module "paired_regions_app" {
  source                  = "./modules/multi-region"
  ...
  for_each = (var.environment == "TEST" || var.environment == "PROD") ? var.paired_regions : { region1 = var.paired_regions.region1 }
}

output "network_outputs" {
  value = module.paired_regions_network
}

output "app_outputs" {
  value = module.paired_regions_app
}

迭代区域声明如下:

variable "paired_regions" {
  description = "The paired regions"
  default = { 
    region1 = { 
      ...
    },
    region2 = { 
      ...
    }
  }
}

paired_regions_network模块中,我想访问来自paired_regions_app模块的输出,即website_hostname我想分配给模块application_hostname参数的值paired_regions_network,如上所示。

output "website_hostname" {
  value       = azurerm_app_service.was_app.default_site_hostname
  description = "The hostname of the website"
}

如何更改下面的行,以便我能够通过其他模块访问输出的网站主机名?

  application_hostname    = ["${module.paired_regions_app.website_hostname}"]

使用上面的代码,我收到此错误:

│ Error: Unsupported attribute
│
│   on main.tf line 24, in module "paired_regions_network":
│   24:   application_hostname    = ["${module.paired_regions_app.website_hostname}"]
│     ├────────────────
│     │ module.paired_regions_app is object with 2 attributes
│
│ This object does not have an attribute named "website_hostname".

标签: azureterraformterraform-provider-azure

解决方案


由于您正在使用for_eachin ,paired_regions_app因此您必须按键访问其输出。

application_hostname    = [module.paired_regions_app[each.key].website_hostname]

推荐阅读