如何从 terraform 中的输出值中删除大括号和引号

how to remove the braces and quotes from output value in terraform

我需要从 terraform 的输出值中删除引号。结果的输出是数组格式,只需要获取数组中的值并将其导出到 csv

Below is  my code
    
    data "azurerm_resources" "spokes" {
      type = "Microsoft.Network/virtualNetworks"
    }
    
    locals {
      vnetnames = ([for vnets in lookup(data.azurerm_resources.spokes, "resources", []) : lookup(vnets, "name")])
    }
    
    output "localvar" {
      value = local.vnetnames
    }
   **Actual Output**
   localvar = [
     "net1",
     "net2"
     "net3"
     "net4",
   ]
   
   **Expected Output**
     net1
     net2
     net3
     net4
   
   
   This is because I need the send the values alone to a separate file

terraform apply UI 和 terraform output 中没有选项的主要输出值呈现是供人而不是机器使用的,因此它使用的语法旨在类似于 Terraform 语言语法,希望大家熟悉,更容易理解。

如果您想以机器可读的格式检索该数据,那么在 terraform apply 完成后,您可以使用带有 -json-raw 选项的 terraform output获得两种不同的原始输出。

-json 选项是最通用的选项,它将生成您可以在 Terraform 中编写的任何值的 JSON 表示,具有与 the jsonencode function 相似的一组映射规则。

-raw 函数专用于字符串和可以自动转换为字符串的值(即 the tostring function 可以接受的任何值)。

您的输出值似乎是列表或元组类型,因此与 -raw 不直接兼容。这意味着您必须就如何继续进行主要选择:

  • 使用 terraform output -json localvar 然后使用其他一些软件来解析 JSON 并生成您在此处显示的以换行符分隔的原始格式。例如,您可以使用 jq.

    实现第二个转换步骤
  • 更改输出值以生成具有所需格式的字符串,然后使用 terraform output -raw localvar 直接获取该字符串的值。似乎您只需要由换行符分隔的直接字符串,在这种情况下,以下表达式可以实现:

      value = join("\n", local.vnetnames)