Terraform:can模块';谁的名字是动态解析的?
给定一系列模块,其名称遵循一种模式:Terraform:can模块';谁的名字是动态解析的?,terraform,Terraform,给定一系列模块,其名称遵循一种模式: module "mod-a" { // ... } module "mod-b" { // ... } module "mod-b" { // ... } 假设每个模块都定义了一个名为my_output的输出,我可以根据动态解析的名称引用特定模块吗 e、 g 上面的语法给出了错误: The "module" object cannot be accessed directly. Instead, access one of its attr
module "mod-a" {
// ...
}
module "mod-b" {
// ...
}
module "mod-b" {
// ...
}
假设每个模块都定义了一个名为my_output
的输出,我可以根据动态解析的名称引用特定模块吗
e、 g
上面的语法给出了错误:
The "module" object cannot be accessed directly. Instead, access one of its
attributes.
有没有其他方法可以访问仅在运行时才知道名称的模块?要在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\u module\u key]
的表达式,从映射中选择所需的对象
Terraform需要对这样的对象进行静态引用,以便能够正确地构建依赖关系图。在这种情况下,Terraform推断出
local.modules
依赖于所有这三个模块的所有输出,因此任何涉及local.modules
的内容都必须等待,直到所有这些模块的所有输出都准备好,以确保最终的索引操作具有完整的值才能使用。Nope。无论如何,您都无法动态访问中的资源地址,无论是资源名称、资源类型还是模块名称。如果你试着用一个真实的例子来解释你想要达到的目标,那么我们可能会提供一个对你有用的替代方案。发布问题的人从未接受过你的答案。多亏了你的回答,它帮我解决了一个棘手的问题。
locals {
modules = {
mod_a = module.mod_a
mod_b = module.mod_b
mod_c = module.mod_c
}
}