【问题标题】:Accessing list element in terraform output访问 terraform 输出中的列表元素
【发布时间】:2021-11-15 11:07:05
【问题描述】:

我在 terraform 状态文件中有以下代码(仅粘贴了我认为与此问题相关的状态文件的一部分),这也是运行粘贴在下面的 terraform 代码的结果:

  "mode": "managed",
      "type": "azurerm_vpn_gateway",
      "name": "azure_vpngw",
      "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"].azure_clusters",
      "instances": [
        {
          "schema_version": 0,
          "attributes": {
            "bgp_settings": [
              {
                "asn": 65515,
                "bgp_peering_address": "",
                "instance_0_bgp_peering_address": [
                  {
                    "custom_ips": [
                      "169.254.21.1"
                    ],
                    "default_ips": [
                      "10.255.176.12"
                    ],
                    "ip_configuration_id": "Instance0",
                    "tunnel_ips": [
                      "10.255.176.4",
                      "20.184.79.231"
                    ]

相关地形代码:

resource "azurerm_vpn_gateway" "azure_vpngw" {
  provider            = azurerm.azure_clusters
  name                = "azure_vpngw"
  location            = azurerm_resource_group.azure_networking.location
  resource_group_name = azurerm_resource_group.azure_networking.name
  virtual_hub_id      = azurerm_virtual_hub.azure_hub.id
  bgp_settings {
    asn         = 65515
    peer_weight = 50
    instance_0_bgp_peering_address {
      custom_ips = ["169.254.21.1"]
    }
    instance_1_bgp_peering_address {
      custom_ips = ["169.254.22.1"]
    }
  }
}

我需要访问 tunnel_ips 列表中的最后一个元素,即 20.184.79.231。 我一直在尝试不同的东西,比如

azurerm_vpn_gateway.azure_vpngw.bgp_settings[0].instance_0_bgp_peering_address[0].tunnel_ips[0][1]

但它不起作用。所以,问题在最后一部分 - 我相信 tunnel_ips[0][1]。如果有人有想法,那将是非常好的。

【问题讨论】:

  • 是否正在生成错误消息?请更详细地解释“它不起作用”。

标签: json terraform


【解决方案1】:

由于您的代码不是有效的 TF 代码,我将其修改为实际上是这样,这就是您可以访问您的 ip 的方式:

locals {

    t = <<EOL
 {
  "mode": "managed",
  "type": "azurerm_vpn_gateway",
  "name": "azure_vpngw",
  "provider": "provider[azure_clusters",
  "instances": [{
    "schema_version": 0,
    "attributes": {
      "bgp_settings": [{
        "asn": 65515,
        "bgp_peering_address": "",
        "instance_0_bgp_peering_address": [{
          "custom_ips": [
            "169.254.21.1"
          ],
          "default_ips": [
            "10.255.176.12"
          ],
          "ip_configuration_id": "Instance0",
          "tunnel_ips": [
            "10.255.176.4",
            "20.184.79.231"
          ]
        }]
      }]
    }
  }]
 } 
EOL

    v = jsondecode(local.t)

}

output "test" {
  value = local.v["instances"][0]["attributes"]["bgp_settings"][0]["instance_0_bgp_peering_address"][0]["tunnel_ips"][1]
}

给予:

test = "20.184.79.231"

【讨论】:

  • 可能问题不够清楚,所以我稍微调整了一下。上面粘贴的是状态文件的一部分,而不是 terraform 代码。现在,我需要在另一个资源中使用该隧道 IP,该隧道 IP 在创建资源 azurerm_vpn_gateway 后创建并存在于状态文件中。
【解决方案2】:

我想通了。因此,要获取 IP 并将其用于我所做的另一个资源定义中:

ip_address = sort(azurerm_vpn_gateway.azure_vpngw.bgp_settings[0].instance_0_bgp_peering_address[0].tunnel_ips)[1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多