首页 > 解决方案 > Terraform .11 到 .12 深度嵌套数据的转换

问题描述

所以,在我的旧 .11 代码中,我有一个文件,其中我的输出模块 locals 部分,我正在构建:

this_assigned_nat_ip = google_compute_instance.this_public.*.network_interface.0.access_config.0.assigned_nat_ip-- 

稍后将其馈送到输出语句。这个模块可以创建 N 个实例。所以它过去所做的就是在我们创建的所有实例的第一个网络接口上的第一个 access_config 块上给我第一个 nat ip。(有人在本地编写了代码,所以我们知道只有一个网络接口和一个访问配置块)。我如何将其翻译为 t12?我不确定保持嵌套的语法。

更新:这是来自 tf11 的 terraform show 的一部分原始数据(经过轻微处理)

module.gcp_bob_servers_ams.google_compute_instance.this_public.0:
  machine_type = n1-standard-2
  min_cpu_platform =
  network_interface.# = 1
  network_interface.0.access_config.# = 1
  network_interface.0.access_config.0.assigned_nat_ip =
  network_interface.0.access_config.0.nat_ip = 1.2.3.4
  network_interface.0.access_config.0.network_tier = PREMIUM

tf12 中等效主机的 Terraform 显示:

# module.bob.module.bob_gcp_ams.module.atom_d.google_compute_instance.this[1]:
resource "google_compute_instance" "this" {
    allow_stopping_for_update = true

    network_interface {
        name               = "nic0"
        network            = "https://www.googleapis.com/compute/v1/projects/stuff-scratch/global/networks/scratch-public"
        network_ip         = "10.112.112.6"
        subnetwork         = "https://www.googleapis.com/compute/v1/projects/stuff-scratch/regions/europe-west4/subnetworks/scratch-europe-west4-x-public-subnet"
        subnetwork_project = "stuff-scratch"

        access_config {
            nat_ip       = "35.204.132.177"
            network_tier = "PREMIUM"
        }
    }

    scheduling {
        automatic_restart   = true
        on_host_maintenance = "MIGRATE"
        preemptible         = false
    }
}

标签: terraform

解决方案


如果我理解正确this_assigned_nat_ip是IP列表。通过执行以下操作,您应该能够在 Terraform 0.12 中获得相同的功能:

this_assigned_nat_ip = [for i in google_compute_instance.this_public : i.network_interface.0.access_config.0.assigned_nat_ip]

我没有测试是,所以我可能有一些小的语法错误,但这for是完成它的关键。


推荐阅读