【问题标题】:Splitting a comma separated string拆分逗号分隔的字符串
【发布时间】:2018-12-21 23:55:19
【问题描述】:

我的输出是一个多值的逗号分隔字符串。

输入.tf

resource "azurerm_app_service" "testap" {
  name                = "MySuperCoolAppServer001"
  location            = "eastus"
  resource_group_name = "notshown"
  app_service_plan_id = "notshown"
}

输出.tf

output "output_tf_testap_outbound_ip_addresses" {
  value = "${azurerm_app_service.testap.outbound_ip_addresses}"
}

我在控制台中得到了这个:

output_tf_testap_outbound_ip_addresses = 1.2.3.4,1.2.3.5,1.2.3.6,1.2.3.7,1.2.3.8,1.2.3.9

如何获得列表的第一项?在这种情况下,我试图隔离值:

1.2.3.4

当在运行时间之前不知道项目总数时,有没有办法获取所有项目的“集合”? (上面的列表有 6 项)。

以下代码似乎不起作用:

output "first_ip" {
  value = ["${azurerm_app_service.testap.outbound_ip_addresses[0]}"]
}

===================== APPEND =================

first_ip_no_index 有效。 first_ip 没有

output "first_ip_no_index" {
  value = ["${split(",", azurerm_app_service.tf_middle_tier_azurerm_app_service.outbound_ip_addresses)}"]
}

output "first_ip" {
  value = "${split(",", azurerm_app_service.tf_middle_tier_azurerm_app_service.outbound_ip_addresses)[0]}"
}

first_ip 产生了这个错误:

读取输出 first_ip 的配置时出错:在 1:91 解析错误: 应为“}”,但找到“[”

【问题讨论】:

    标签: azure terraform


    【解决方案1】:

    您可以使用split() function 将字符串拆分为列表。

    output "output_tf_testap_outbound_ip_addresses" {
      value = ["${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"]
    }
    

    之后,您可以使用element(list, index) syntax 对其进行索引:

    output "first_ip" {
      value = "${element(split(",", azurerm_app_service.testap.outbound_ip_addresses), 0}"
    }
    

    您通常也应该能够像这样使用list\[index\] syntax

    output "first_ip" {
      value = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)[0]}"
    }
    

    但是,Terraform 0.11 中似乎存在一个错误,该错误会阻止对 split 函数的结果进行切片,并引发以下错误:

    错误:加载 /tmp/tf-split-test/main.tf 时出错:读取配置时出错 对于输出 foo:在 1:25 解析错误:预期为“}”但找到“[”

    如果您希望在 element 函数上使用此语法,则可以使用 local 拆分列表,然后对其进行切片以解决此问题。

    locals {
      outbound_ip_addresses_list = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"
    }
    
    output "first_ip" {
      value = "${local.outbound_ip_addresses_list[0]}"
    }
    

    【讨论】:

    • 我正在让拆分工作..但不是索引器 (0)。这有效:输出 "first_ip" { value = ["${split(",", azurerm_app_service.tf_middle_tier_azurerm_app_service.outbound_ip_addresses)}"] } 但不是上面列出的 first_ip。 #soClose
    • "读取输出 first_ip 的配置时出错:在 1:91 解析错误:预期为 "}" 但找到了 "[""
    • Ack,看起来像是 HCL 解析器中的一个错误。我很想为它提出一个问题,但 Terraform 0.12 正在转向 HCL2,这将改变很多事情并可能解决这个问题。一般来说,尽管我预计来自azurerm_app_serviceoutbound_ip_addresses 无论如何都会是一个列表类型,这会使这变得更简单。
    • 好的。感谢您的跟进。
    • 这是一个链接。我唯一的(修辞)问题是为什么它被称为 0.12? (相对于 0.11)?似乎是一个巨大的变化。也许0.20?无论如何.........hashicorp.com/blog/terraform-0-1-2-preview
    猜你喜欢
    • 2015-03-07
    • 1970-01-01
    • 2017-01-05
    • 2012-05-24
    • 2023-04-09
    • 2014-01-03
    相关资源
    最近更新 更多