我有一个构建的Terraform模块,该模块将模块的两个实例部署到一个单独的区域。在此模块中,有一个密钥库。我只希望密钥库出现在两个区域之一中。
这是我的模块:
resource "azurerm_resource_group" "test" {
name = "test"
location = "${var.location}"
}
resource "azurerm_key_vault" "keyvault" {
name = "keyvault"
}
这是我的main.tf
module "test_uswest2" {
source = "modules/test"
location = "westus2"
environment = "${var.environment}"
}
module "test_westcentralus" {
source = "modules/test"
location = "centralus"
environment = "${var.environment}"
}
我想在第二个区域/位置中排除密钥库。
Terraform似乎不支持if / else,因此我不确定我的选择是什么。
答案 0 :(得分:7)
您可以通过将count
meta parameter设置为0并使用conditional ternary operator来有条件地创建资源。
所以您会遇到这样的事情:
variable "create_key_vault" {
default = true
}
resource "azurerm_key_vault" "keyvault" {
count = "${var.create_key_vault ? 0 : 1}"
name = "keyvault"
}
然后将create_key_vault
设置为false
的模块以不创建它:
module "test_westcentralus" {
source = "modules/test"
location = "centralus"
environment = "${var.environment}"
create_key_vault = false
}
答案 1 :(得分:0)
ydaetskcoR的答案很好用,但如果更适合用例,您也可以使用默认变量值以相反的方式进行。
将count
参数设置为:
count = "${var.create_key_vault}"
在模块源中定义一个带有错误默认值的变量:
variable "create_key_vault" {
default = false
}
,然后定义哪些模块需要对此进行处理并将其设置为true:
module "test_westcentralus" {
source = "modules/test"
location = "centralus"
environment = "${var.environment}"
create_key_vault = true
}