排除Terraform模块中的资源

时间:2018-11-07 17:49:08

标签: terraform terraform-provider-azure

我有一个构建的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,因此我不确定我的选择是什么。

2 个答案:

答案 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
}