【问题标题】:Terraform : How to ignore the Optional block if the Property - list of string is EmptyTerraform:如果属性 - 字符串列表为空,如何忽略可选块
【发布时间】:2021-08-09 08:50:26
【问题描述】:

我刚开始使用 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}"
  }

变量.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 = []
}

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

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

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

【问题讨论】:

    标签: terraform terraform-provider-azure


    【解决方案1】:

    您可以使用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}"
        }
      }
    }
    

    [] 的默认值就可以了。

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 2013-04-16
      • 2021-01-03
      • 1970-01-01
      • 2018-10-12
      • 2021-12-22
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多