在Terraform中重用现有模块

问题描述

我为不同的模块使用了不同的变量,但是它们之间的唯一区别是名称,有没有办法拥有一个模块,我可以使用不同的变量对其进行迭代。我不必为此仅创建一个模块,就可以重复使用

variable "Nodejs" {
    default = "node"
}
variable "Python" {
    default = "python"
}
variable "Java" {
    default = "java"
}
module "Nodejs" {
  source        = "./modules/NodeJs"
  name          = var.Nodejs
}

module "Python" {
  source        = "./modules/python"
  name          = var.Python
}

module "Java" {
  source          = "./modules/java"
  name            = var.Java
}

解决方法

您可以对代码进行一些重构,以便可以在模块中使用for_each

一个例子:

variable "languages" {
  default = ["Nodejs","Python","Java"]
}

module "language" {
  source   = "./modules/language"  
  for_each = toset(var.languages)  
  
  name     = each.key
}

然后,您可以使用以下内容引用各个模块:

 module.language["Python"]

要使其正常工作,您必须重构modules文件夹。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...