将Map列表从Azure DevOps变量组传递到Terraform

t9aqgxwy  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(128)

当我想把一个map列表传递给Terraform变量时(我使用动态块来迭代这个列表),我得到了这个错误:

│ for_each中不能使用字符串值,需要可迭代集合。

我在Azure Devops中的变量组中的Map列表:

{ "host" = "mysite1.com", "name" = "healthprobe1", "path" = "/healthcheck1" },
{ "host" = "mysite2.com", "name" = "healthprobe2", "path" = "/healthcheck2" },
{ "host" = "mysite2.com", "name" = "healthprobe3", "path" = "/healthcheck3" }

变量组中的变量:


我的Terraform配置,它迭代了一系列Map:

The variable:
variable "PROBES" {
  default     = [{}]
}

动态块:

dynamic "probe" {
    for_each = var.PROBES

    content {
      host                                      = probe.value.host
      interval                                  = 30
      minimum_servers                           = 0
      name                                      = probe.value.name
      path                                      = probe.value.path
      pick_host_name_from_backend_http_settings = false
      protocol                                  = local.protocol
      timeout                                   = 30
      unhealthy_threshold                       = 3
      match {
        status_code = ["200-399"]
      }
    }
  }
cs7cruho

cs7cruho1#

其中一个选项(但需要测试)是将PROBES变量定义为字符串,并将dynamic块中的

dynamic "probe" {
    for_each = var.PROBES
...
}

dynamic "probe" {
    for_each = tomap(jsondecode(var.PROBES))
...
}

将字符串输入变量显式转换为结构化对象
参考:

  • tomap
  • jsondecode
    EDIT错误地引用了jsonencode函数,而这应该是指**jsondecode**功能

相关问题