如何以编程方式获取Terraform模块名称?
我已经定义了以下地形模块:如何以编程方式获取Terraform模块名称?,terraform,hcl,Terraform,Hcl,我已经定义了以下地形模块: module "lambda" { source = "../lambda" region = "us-west-1" account = "${var.account}" } 如何利用模块名称设置带有插值的源参数?我希望这样: module "lambda" { source = "../${this.name}" regio
module "lambda" {
source = "../lambda"
region = "us-west-1"
account = "${var.account}"
}
如何利用模块名称设置带有插值的源
参数?我希望这样:
module "lambda" {
source = "../${this.name}"
region = "us-west-1"
account = "${var.account}"
}
我认为这是不可能的。有一个允许您在资源中引用属性的标识符,但该标识符不是属性。此外,
self
仅允许在供应器中使用
我想实现您想要的唯一方法是模板化.tf
文件,如:
module {{ my-module}} {
source = "../{{ my-module }}"
region = "us-west-1"
account = "${var.account}"
但是您应该在terraform init之前呈现模板。在CI管道中进行设置很简单,但我发现在本地工作时很麻烦。我不相信你能做到-你给它起的名字变成了一个隐式的“变量”,你可以在脚本的其他地方使用,因此如果你的模块在这里有一个
xyz
的输出,您可以通过module.lambda.xyz
引用它-我认为在这上面没有其他插值层。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选民。这看起来是一段有用的代码,但它只在模块内部起作用。最初的问题是询问如何访问模块块中的名称。
locals {
module = basename(abspath(path.module))
}
{
...
some-id = local.module
...
}