Terraform:如果 属性 - 字符串列表为空,如何忽略可选块

Terraform : How to ignore the Optional block if the Property - list of string is Empty

我刚开始使用 terraform,下面是我的 terraform 代码。从下面 Cors 是一个可选块,其中它具有允许来源的 属性 这是字符串列表(URL 或 *)

resource "azurerm_signalr_service" "signalr_service" {
  
  name="${var.signalr_name}"
  location = "${var.resource_location}"
  resource_group_name = "${var.resource_group_name}"

  sku {
    name     = "${var.sku_name}"
    capacity = "${var.sku_capacity}"
  }
        
#Cors is an optional block
  cors {
    allowed_origins = "${var.cors_allowed_origins}"
  }

Varilabe.tf:

variable "allowed_origins" {
  type = "list"
  description = "A list of origins which should be able to make cross-origin calls. * can be used to allow all calls"
  default = []
}

用户may/maynot提供allowed_origns,如果提供没有问题,如果不提供

  1. 默认为空列表[]:当我将空列表传递给 allowed_origns 时,它没有说不是有效的 URL
  2. 默认为 null:如果我传递为 null,则 allowed_origin 单独为 null 并且 cors 作为空块传递,即 cors{} 由于 属性 遗漏错误

现在我的问题是,如果用户未向 allowed_origins 提供任何值,如何使整个 cors 块被忽略,我应该使用什么默认值?

您可以使用 dynamic blocks 使 CORS 块可选:

resource "azurerm_signalr_service" "signalr_service" {
  
  name="${var.signalr_name}"
  location = "${var.resource_location}"
  resource_group_name = "${var.resource_group_name}"

  sku {
    name     = "${var.sku_name}"
    capacity = "${var.sku_capacity}"
  }
        
  dynamic "cors" {
    for_each = length(var.cors_allowed_origins) > 0 ? [1] : []
    content {
        allowed_origins = "${var.cors_allowed_origins}"
    }
  }
}

默认值[]就可以了。