5

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

4

2 回答 2

16

count您可以通过将元参数设置为 0 并使用条件三元运算符来有条件地创建资源。

所以你会有这样的事情:

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
}
于 2018-11-07T19:19:50.257 回答
1

ydaetskcoR 的答案工作正常,您也可以使用默认变量值以相反的方式进行操作,如果这更适合用例。

设置countarg 如下:

count = "${var.create_key_vault}"

在模块的源代码中定义一个带有 false 默认值的变量:

variable "create_key_vault" {
  default = false
}

然后定义哪些模块需要覆盖它并将其设置为true:

module "test_westcentralus" {
  source = "modules/test"

  location         = "centralus"
  environment      = "${var.environment}"
  create_key_vault = true
}
于 2019-04-09T07:39:11.020 回答