【问题标题】:Terraform - conditionally creating a resource within a loopTerraform - 在循环中有条件地创建资源
【发布时间】:2018-06-26 08:52:04
【问题描述】:

是否可以将资源创建与循环结合(使用计数)并根据地图的值有条件地跳过一些资源?

我知道我们可以分开做这些事情:

  • 使用计数循环创建资源。
  • 使用变量/计数解决方法(代替“if”语句)有条件地创建资源

为了说明,假设我有一个地图列表:

variable "resources" {
  type = "list"
  default = [
    {
      name = "kafka"
      createStorage = true
    },
    {
      name = "elastic"
      createStorage = false
    },
    {
      name = "galera"
      createStorage = true
    }
  ]
}

我可以遍历上面的列表并在资源中使用“count”创建三个资源:

resource "azurerm_storage_account" "test" {
    name                     = "test${var.environment}${lookup(var.resources[count.index], "name")}sa"
    location                 = "${var.location}"
    resource_group_name      = "test-${var.environment}-vnet-rg"
    account_tier             = "Standard"
    account_replication_type = "GRS"
    enable_blob_encryption   = true

    count  = "${length(var.resources)}"

}

但是,我还想跳过创建 createStorage = false 的资源。因此,在上面的示例中,我想创建两个存储帐户,但跳过了“弹性”存储帐户。 这可能吗?

【问题讨论】:

  • thx 0.12,这就是您要寻找的答案。您应该将其标记为有效响应。

标签: azure terraform


【解决方案1】:

在 terraform 0.12.x 中,您可以过滤掉 createStorage=true 所在的列表并将其用于您的计数表达式

variable "resources" {
  type = "list"
  default = [
    {
      name          = "kafka"
      createStorage = true
    },
    {
      name          = "elastic"
      createStorage = false
    },
    {
      name          = "galera"
      createStorage = true
    }
  ]
}

locals {
  resources_to_create = [
    for resource in var.resources :
    resource
    if resource.createStorage
  ]
}

resource "azurerm_storage_account" "test" {
  count = length(local.resources_to_create)

  name                     = "test${var.environment}${lookup(local.resources_to_create[count.index], "name")}sa"
  location                 = var.location
  resource_group_name      = "test-${var.environment}-vnet-rg"
  account_tier             = "Standard"
  account_replication_type = "GRS"
  enable_blob_encryption   = true
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-03-11
    • 2021-11-25
    相关资源
    最近更新 更多