gpt4 book ai didi

azure - Terraform - 在循环内有条件地创建资源

转载 作者:行者123 更新时间:2023-12-04 05:58:00 28 4
gpt4 key购买 nike

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

我知道我们可以单独做这些事情:

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

为了说明这一点,假设我有一个 map 列表:

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 的资源。因此,在上面的示例中,我想创建两个存储帐户,但跳过“弹性”存储帐户。这可能吗?

最佳答案

在 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
}

关于azure - Terraform - 在循环内有条件地创建资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com