如何以编程方式获取 Terraform 模块名称?

Arc*_*nes 5 terraform hcl

我定义了以下 Terraform 模块:

module "lambda" {
  source                = "../lambda"
  region                =  "us-west-1"
  account               = "${var.account}"
}
Run Code Online (Sandbox Code Playgroud)

如何利用模块名称来设置source带插值的参数?我希望是这样的:

module "lambda" {
  source                = "../${this.name}"
  region                =  "us-west-1"
  account               = "${var.account}"
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*tin 8

locals {
  module = basename(abspath(path.module))
}

{
...
  some-id = local.module
...
}
Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要提供解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常更有帮助,质量也更好,并且更有可能吸引点赞。 (4认同)

cha*_*rli 5

我认为不可能。有一个self允许您引用资源中的属性的标识符,但标识符不是属性。此外,self仅允许在配置者内使用。

我想完成你想要的唯一方法是模板化文件.tf,例如:

module {{ my-module}} {
  source                = "../{{ my-module }}"
  region                =  "us-west-1"
  account               = "${var.account}"
Run Code Online (Sandbox Code Playgroud)

但你应该在之前渲染模板terraform init。在 CI 管道中设置很简单,但我发现在本地工作时很麻烦。