给出一系列名称遵循模式的模块:
module "mod-a" {
// ...
}
module "mod-b" {
// ...
}
module "mod-b" {
// ...
}
并假设每个模块都定义了一个名为my_output
的输出,我可以基于动态解析的名称引用特定的模块吗?
例如
...
// some_module = "mod-a"
some_value = module[some_module].my_output
...
上面的语法给出错误:
The "module" object cannot be accessed directly. Instead, access one of its
attributes.
还有另一种方法来访问仅在运行时知道其名称的模块吗?
答案 0 :(得分:0)
要在当今的Terraform(Terraform 0.12.13)中实现此目标,您需要明确地构造一个合适的地图作为局部值,然后对该地图进行索引:
locals {
modules = {
mod_a = module.mod_a
mod_b = module.mod_b
mod_c = module.mod_c
}
}
然后在配置的其他地方,可以使用local.modules[local.dynamic_module_key]
之类的表达式,从地图中选择所需的对象。
Terraform需要对此类对象的静态引用,以便它可以正确构造依赖关系图。在这种情况下,Terraform推断local.modules
取决于这三个模块的所有输出,因此引用local.modules
的所有内容都必须等待,直到所有这些模块的所有输出准备就绪以确保最终索引操作具有完整的价值。