代码之家  ›  专栏  ›  技术社区  ›  granadaCoder

拆分逗号分隔的字符串

  •  2
  • granadaCoder  · 技术社区  · 8 年前

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

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

    我在控制台里看到这个:

    输出出站IP地址= 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]}"]
    }
    

    ============追加===========

    第一个“IP”没有“U”索引起作用。第一个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]}"
    }
    

    第一个IP生成此错误:

    读取第一个输出的配置时出错\ip:parse错误,时间为1:91: 应输入“”,但找到“[”

    1 回复  |  直到 8 年前
        1
  •  1
  •   ydaetskcoR    8 年前

    您可以使用 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中似乎有一个bug阻止了 split 函数,引发以下错误:

    错误:加载/tmp/tf split test/main时出错。tf:读取配置时出错 对于输出foo:1:25处的分析错误:应为“”,但找到“[”

    你可以用一个 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]}"
    }