Terraform,如何使用变量文件而不是重复调用将变量传递给模块

时间:2020-04-13 15:45:43

标签: azure terraform devops

我正在使用下面的代码将变量传递给多个模块。我的问题是,还有更好的方法吗?也许是一个仅包含我要传递给每个模块的变量的文件,或者是一个可以在运行时注入的文件。下面的代码可以从Azure DevOps管道正常运行,只是试图看看是否有一种更简单的方法来使用更少的代码行即可。

谢谢

================================================ =======

module network {
    source = "./Network"
    prdrgname = azurerm_resource_group.MYRG-AZ-EUS-MAIN-01.name
    prdlocation = azurerm_resource_group.MYRG-AZ-EUS-MAIN-01.location
    drrgname = azurerm_resource_group.MYRG-AZ-WUS-BC-01.name
    drlocation = azurerm_resource_group.MYRG-AZ-WUS-BC-01.location
}

module compute {    
    source = "./Compute"
    prdrgname = azurerm_resource_group.MYRG-AZ-EUS-MAIN-01.name
    prdlocation = azurerm_resource_group.MYRG-AZ-EUS-MAIN-01.location
    drrgname = azurerm_resource_group.MYRG-AZ-WUS-BC-01.name
    drlocation = azurerm_resource_group.MYRG-AZ-WUS-BC-01.location
}

================================================ ============

1 个答案:

答案 0 :(得分:0)

我不知道azurerm_resource_group来自何处,如果您可以输入具有娱乐性的代码。但是,最佳实践之一是使用.tfvars文件

您将需要一个这样的变量文件

variable "name"{}
variable "location"{}
variable "name2"{}
variable "location2"{}

和stage.tfvars或其他名称

name="value"
location="value"
name2="value"
location2="value"

您的main.tf将如下所示

module network {
    source = "./Network"
    prdrgname = var.name
    prdlocation = var.location
    drrgname = var.name2
    drlocation = var.location2
}

module compute {    
    source = "./Compute"
    prdrgname = var.name
    prdlocation = var.location
    drrgname = var.name2
    drlocation = var.location2
}

最后运行您的项目

terraform plan --var-file=stage.tfvars