terraform - Terraform:如何为所有声明的模块提供一个通用输出?
问题描述
我的 terraform 文件中有这样的内容:
主文件
module "airflow_tenant_one" {
source = "../modules/airflow_tenant"
name = "one-airflow"
project = var.project
cluster_name = var.cluster_name
region = var.region
kubernetes_endpoint = var.kubernetes_endpoint
tenant_domain = "one-airflow.${var.domain_name}"
}
module "airflow_tenant_two" {
source = "../modules/airflow_tenant"
name = "two-airflow"
project = var.project
cluster_name = var.cluster_name
region = var.region
kubernetes_endpoint = var.kubernetes_endpoint
tenant_domain = "two-airflow.${var.domain_name}"
}
我怎样才能为所有声明的模块做一个共同的输出?
目前,它看起来像:
输出.tf
output "chart_name_one" {
description = "The name of the chart"
value = module.airflow_tenant_one.chart_name
}
output "chart_name_two" {
description = "The name of the chart"
value = module.airflow_tenant_two.chart_name
}
我问是因为将来我可能会在我的main.tf
文件中添加更多模块。为所有这些都提供一个输出声明会更好。
解决方案
您共享的module
块似乎都是基于某些客户端名称系统配置的,因此如果您使用的是 Terraform 0.13.0 或更高版本,则可以使用单个module
块来执行此操作。for_each
locals {
tenants = toset([
"one",
"two",
])
}
module "airflow_tenant" {
for_each = local.tenants
name = "${each.key}-airflow"
project = var.project
cluster_name = var.cluster_name
region = var.region
kubernetes_endpoint = var.kubernetes_endpoint
tenant_domain = "${each.key}-airflow.${var.domain_name}"
}
output "tenant_chart_names" {
value = {
for name, tenant in module.airflow_tenant : name => tenant.chart_name
}
}
以上将导致 的airflow_tenant
每个元素都有一个模块实例local.tenants
,地址如下:
module.airflow_tenant["one"]
module.airflow_tenant["two"]
当您在其他地方引用它时,这for_each
使得模块表现为实例映射,这就是为什么我们能够将该映射投影到output "tenant_chart_names"
以派生从租户名称到图表名称的映射。
您可以随时间添加和删除元素local.tenants
,在这种情况下,Terraform 将理解为创建实例或销毁该模块内描述的所有对象的实例的意图。
您可以在Module 的 Multiple Instances 中阅读有关此功能的更多信息。
推荐阅读
- reactjs - 带有 Typescript 返回类型的样式化组件是任何
- c++ - std::map 或 std::set 可以用来代替手写的二叉树吗
- kubernetes - K8S 如何自动启动 Deployments 和 DaemonSets?
- flutter - Flutter - 在同一屏幕上的小部件之间传递数据
- c++ - CMake第三方库安装
- python-3.x - cherrypy 标记要作为守护线程运行的处理程序?
- tensorflow - 如何在新的 Colab 笔记本中加载 SavedModel?
- javascript - 网络抓取返回 URI 而不是图像的 URL。(Javascript Cheerio)
- c++ - 四叉树生成不完整类型
- mysql - Mysql INSERT ... ON DUPLICATE KEY Reinsert with new key