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

Jay*_*ran 5 terraform terraform-provider-azure

我刚刚开始使用 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}"
  }
Run Code Online (Sandbox Code Playgroud)

变量.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 = []
}
Run Code Online (Sandbox Code Playgroud)

用户可以/可以不提供allowed_origns,如果他们提供没有问题,但如果他们不提供

  1. 默认为空列表[]:当我传递空列表时,allowed_origns 它失败并提示不是有效的 URL
  2. 默认为null:如果我作为 null 传递,allowed_origin则单独获取 null 并且 cors 作为空块传递,即,cors{}这也会由于属性丢失错误而失败

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

Mar*_*cin 7

您可以使用动态块使 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}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

默认值[]就可以了。