gpt4 book ai didi

Terraform:模块的名称可以动态解析吗?

转载 作者:行者123 更新时间:2023-12-02 19:48:57 24 4
gpt4 key购买 nike

给定一系列名称遵循某种模式的模块:

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.

是否有另一种方法来访问其名称仅在运行时才知道的模块?

最佳答案

要在当今的 Terraform(Terraform 0.12.13)中实现此目的,您需要显式构建一个合适的 map 作为本地值,然后对该 map 建立索引:

locals {
modules = {
mod_a = module.mod_a
mod_b = module.mod_b
mod_c = module.mod_c
}
}

在配置的其他位置,您可以使用 local.modules[local.dynamic_module_key] 等表达式,从 map 中选择所需的对象。

Terraform 需要对此类对象的静态引用,以便它可以正确构建依赖关系图。在这种情况下,Terraform 推断 local.modules 依赖于所有这三个模块的所有输出,因此任何引用 local.modules 的内容都必须等到所有所有这些模块的输出已准备好,以确保最终的索引操作具有完整的值可供使用。

关于Terraform:模块的名称可以动态解析吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com