【问题标题】:How can I get the Terraform module name programmatically?如何以编程方式获取 Terraform 模块名称?
【发布时间】:2019-03-07 07:26:14
【问题描述】:

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

【问题讨论】:

  • 我不相信你可以 - 你给它的名字变成了一个隐含的“变量”,你可以在脚本的其他地方使用,所以如果你的模块在这里的输出为xyz,你会通过module.lambda.xyz 引用它 - 我认为在此之上没有另一层可用的插值。

标签: terraform hcl


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    locals {
      module = basename(abspath(path.module))
    }
    
    {
    ...
      some-id = local.module
    ...
    }
    

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    • 这看起来像是一段有用的代码,但它只在模块内部工作。最初的问题是询问如何访问模块块中的名称。
    • 不是引用模块的名称。 (参见有问题的“lambda”)
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多