Contoh: https://www.terraform.io/docs/providers/ kubernetes/r/service_account.html

Kami melihat ini:

resource "kubernetes_service_account" "example" {
  metadata {
    name = "terraform-example"
  }
  secret {
    name = "${kubernetes_secret.example.metadata.0.name}"
  }
}

Metadata bukan daftar, mengapa rahasia/nama nilai referensi metadata menggunakan .0?

-1
Tommy 30 Juni 2020, 17:20

1 menjawab

Jawaban Terbaik

Penyedia telah mendefinisikan tipe blok metadata sebagai direpresentasikan secara internal sebagai daftar objek. Hal ini biasa terjadi pada penyedia Terraform saat ini karena versi Terraform sebelum Terraform v0.12 mengharuskan penyedia untuk memilih antara hanya daftar dan set sebagai tipe data pendukung untuk tipe blok bersarang.

Terraform v0.12 dan yang lebih baru mendukung memiliki blok tunggal yang direpresentasikan sebagai objek tunggal, tetapi penyedia yang mendahului rilis Terraform v0.12 cenderung masih menggunakan representasi daftar untuk kompatibilitas mundur. (Sebagian besar penyedia, pada saat penulisan, masih kompatibel dengan Terraform v0.11 dan v0.12 dalam rilis baru mereka.)

The new kubernetes penyedia (masih dalam pengembangan pada saat saya menulis ini) dibuat khusus untuk Terraform v0.12 dan yang lebih baru, sehingga dapat lebih langsung mencerminkan dasar Skema Kubernetes, termasuk memperlakukan metadata sebagai objek tunggal. Postingan pengumuman tentang versi penyedia baru mencakup contoh ini:

resource "kubernetes_manifest" "example_crd" {
  provider = kubernetes-alpha

  manifest = {
    apiVersion = "apiextensions.k8s.io/v1"
    kind = "CustomResourceDefinition"
    metadata = {
      name = "testcrds.hashicorp.com"
      labels = {
        app = "test"
      }
    }
    spec = {
      group = "hashicorp.com"
      names = {
        kind = "TestCrd"
        plural = "testcrds"
      }
      scope = "Namespaced"
      versions = [
        {
          name = "v1"
          served = true
          storage = true
          schema = {
            openAPIV3Schema = {
              type = "object"
              properties = {
                data = {
                  type = "string"
                }
                refs = {
                  type = "number"
                }
              }
            }
          }
        }
      ]
    }
  }
}

Nama metadata untuk penyedia baru ini dapat diakses dengan cara yang lebih intuitif, karena metadata adalah objek tunggal:

kubernetes_manifest.example_crd.manifest.metadata.name
3
Martin Atkins 1 Juli 2020, 01:08