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

时间:2018-10-02 07:28:27

标签: terraform hcl

我已经定义了以下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}"
}

2 个答案:

答案 0 :(得分:1)

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

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

module {{ my-module}} {
  source                = "../{{ my-module }}"
  region                =  "us-west-1"
  account               = "${var.account}"

但是您应该在计划和应用之前渲染模板。在CI管道中进行设置很简单,但是我发现在本地工作时很麻烦。

答案 1 :(得分:1)

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

{
...
  some-id = local.module
...
}