首页 > 解决方案 > 拆分逗号分隔的字符串

问题描述

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

输入.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]}"]
}

===================== 附录=================

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 解析错误:预期“}”但找到“[”

标签: azureterraform

解决方案


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

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

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

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

您通常还应该能够使用如下list\[index\]语法

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 解析错误:预期为“}”但找到了“[”

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

locals {
  outbound_ip_addresses_list = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"
}

output "first_ip" {
  value = "${local.outbound_ip_addresses_list[0]}"
}

推荐阅读