如何以编程方式获取 Terraform 模块名称?
How can I get the Terraform module name programmatically?
我定义了以下 Terraform 模块:
module "lambda" {
source = "../lambda"
region = "us-west-1"
account = "${var.account}"
}
如何利用模块名称来设置带有插值的 source
参数?我想要这样的东西:
module "lambda" {
source = "../${this.name}"
region = "us-west-1"
account = "${var.account}"
}
我觉得不可能。有一个 self
允许您在资源中引用属性,但标识符不是属性。此外,self
只允许在供应商中使用。
我想完成你想要的唯一方法是模板化 .tf
文件,例如:
module {{ my-module}} {
source = "../{{ my-module }}"
region = "us-west-1"
account = "${var.account}"
但您应该在 terraform init
之前渲染模板。在 CI 管道中设置很简单,但我发现在本地工作时很麻烦。
locals {
module = basename(abspath(path.module))
}
{
...
some-id = local.module
...
}
我定义了以下 Terraform 模块:
module "lambda" {
source = "../lambda"
region = "us-west-1"
account = "${var.account}"
}
如何利用模块名称来设置带有插值的 source
参数?我想要这样的东西:
module "lambda" {
source = "../${this.name}"
region = "us-west-1"
account = "${var.account}"
}
我觉得不可能。有一个 self
允许您在资源中引用属性,但标识符不是属性。此外,self
只允许在供应商中使用。
我想完成你想要的唯一方法是模板化 .tf
文件,例如:
module {{ my-module}} {
source = "../{{ my-module }}"
region = "us-west-1"
account = "${var.account}"
但您应该在 terraform init
之前渲染模板。在 CI 管道中设置很简单,但我发现在本地工作时很麻烦。
locals {
module = basename(abspath(path.module))
}
{
...
some-id = local.module
...
}