深度嵌套数据的Terraform .11到.12转换

时间:2019-12-02 06:23:06

标签: terraform

因此,在旧的.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演示中的原始数据的一部分

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中等效主机的地形显示:

# 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
    }
}

2 个答案:

答案 0 :(得分:1)

如果我理解正确,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是完成此操作的关键。

答案 1 :(得分:0)

结果证明this[*].network_interface[*].access_config[*].nat_ip[*]给了我我所需的东西。假设接口上只有一个地址,那就很好了。