我的输出是一个多值、逗号分隔的字符串。
输入.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 生成此错误:
Error reading config for output first_ip: parse error at 1:91: expected "}" but found "["
最佳答案
您可以使用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
函数的结果进行切片,并引发以下错误:
Error: Error loading /tmp/tf-split-test/main.tf: Error reading config for output foo: parse error at 1:25: expected "}" but found "["
您可以使用 local
如果您更愿意使用此语法而不是 element
函数,则可以拆分列表,然后对其进行切片以解决此问题。
locals {
outbound_ip_addresses_list = "${split(",", azurerm_app_service.testap.outbound_ip_addresses)}"
}
output "first_ip" {
value = "${local.outbound_ip_addresses_list[0]}"
}
关于azure - 分割逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327865/