Bersihkan dan sederhanakan daftar

 – Beragampengetahuan
7 mins read

Bersihkan dan sederhanakan daftar – Beragampengetahuan

Di Terraform, banyak konfigurasi yang dinamis dan Anda dapat membuat daftar menggunakan ekspresi bersyarat yang dikembalikan null Jika tidak berlaku. Jika itu null Nilai diteruskan langsung ke sumber daya (mis. security_group_ids atau depends_on), mereka dapat menyebabkan kesalahan verifikasi.

ini compact() Fungsi memastikan bahwa hanya elemen non-magnetik yang valid yang dimasukkan, sehingga membantu mencegah kesalahan runtime tersebut selama fase aplikasi.

Contents

Fitur kompak terraform

ini compact() Fungsi Penghapusan Terraform null dan string kosong ("") Elemen dalam daftar dan mengembalikan daftar baru yang hanya berisi elemen string non-nol non-nol. Ini adalah bagian dari perpustakaan standar Terraform dan sangat berguna saat menggunakan ekspresi dinamis yang dapat memperkenalkan nilai -nilai yang tidak valid, seperti logika bersyarat atau variabel interpolasi.

Sintaksnya sederhana: compact(list)Di mana list adalah input yang mungkin termasuk entri kosong. Misalnya, compact(["a", "", "b"]) kembali ["a", "b"].

catatan: ini compact Fungsi dihapus saja null dan string kosong ("")elemen. Itu benar TIDAK Hapus nilai palsu lainnya false,,,,, 0atau daftar kosong ([]).

Kapan Menggunakan Fitur Kompak

Fitur ringkas di Terraform membantu membuat daftar yang bersih dan andal, terutama dalam konfigurasi kompleks yang melibatkan logika bersyarat atau input pengguna. Berikut adalah beberapa kasus penggunaan umum:

  1. Parameter sumber daya bersyarat: menggunakan compact() Untuk memfilter nol dari daftar dengan elemen bersyarat untuk memastikan bahwa hanya nilai yang valid yang dilewati.
  2. Gabungkan variabel default dan override: Saat menggabungkan daftar dari berbagai sumber, compact() Hapus nol untuk menghasilkan nilai yang bersih dan digabungkan.
  3. Parameter output atau modul: Cegah kesalahan terraform apply Dengan menghilangkan nol dalam input output atau modul yang hanya diharapkan menjadi string atau ID yang valid.
  4. Secara kondisional termasuk dalam loop: Di sebuah for Loop, kembali null Untuk melewatkan elemen, lalu gunakan compact() Kecualikan mereka dari daftar akhir.
  5. Logika penyaringan yang disederhanakan: Ganti eksternal if Kondisi dan inline null Hadiah dari mayat yang beredar, diikuti oleh compact() Sederhanakan pemfilteran daftar. Misalnya:

memikirkan var.names setara [“Alice”, “skip”, “Bob”, “skip”, “Charlie”]

[for item in var.names : item != "skip" ? item : null] -> this will transform the list in [“Alice”, null, “Bob”, null, “Charlie”]

Bisa:

compact([for item in var.names : item == "skip" ? null : item]) -> this will transform the list in [“Alice”, “Bob”, “Charlie”]

Cara menggunakan fitur kompak terraform

Berikut adalah enam contoh penggunaan compact Fitur, termasuk beberapa fitur dasar dan lebih canggih.

Satu hal yang perlu diingat sebelum kita pergi ke contoh adalah compact() Fungsi hanya berfungsi pada daftar di mana semua elemen adalah string (string dapat bertahan). Terraform dapat menghasilkan kesalahan tipe jika Anda melewati tipe kompleks seperti objek atau angka.

Contoh 1: Hapus kosong dari daftar sederhana

Contoh ini menunjukkan daftar statis dengan beberapa null nilai. ini compact() Fungsi memindai daftar dan menyaring apapun null Dan "" Entri, hanya kembali ["value1", "value2", "value3"].

variable "input_list" {
  default = ["value1", null, "value2", null, "value3"]
}

output "cleaned_list" {
  value = compact(var.input_list)
}

Ini adalah kasus penggunaan yang paling mudah, seringkali dalam preprocessing variabel.

Contoh 2: Daftar Dinamis dengan Nilai Bersyarat

Di sini, daftar tersebut mencakup nilai bersyarat yang dapat dievaluasi null.

jika include_extra Itu salah, "optional" Nilai dihilangkan. compact() Pastikan daftar terakhir tidak disimpan null,menghasilkan ["core", "final"]. Ini membantu menghindari masalah dalam modul yang tidak dapat ditoleransi null Nilai dalam daftar.

variable "include_extra" {
  default = false
}

locals {
  list = compact([
    "core",
    var.include_extra ? "optional" : null,
    "final"
  ])
}

output "result" {
  value = local.list
}

Contoh 3: Menggunakan daftar kompak dan datar

Dalam contoh ini, kami pertama kali menggunakan flatten()dan kemudian lulus hasilnya compact() Hapus apapun null nilai. Hasil akhirnya adalah daftar yang bersih dan datar: ["a", "b", "c"].

locals {
  nested_lists = [
    ["a", null],
    [null, "b"],
    ["c"]
  ]

  flat_and_clean = compact(flatten(local.nested_lists))
}

output "flat_cleaned_list" {
  value = local.flat_and_clean
}

Metode ini berguna saat memproses output dari modul atau sumber data jarak jauh yang mengembalikan struktur bersarang.

Contoh 4: Menggabungkan Compact dengan Concat untuk Daftar Dinamis

Terraform concat() Fungsi menghubungkan dua daftar – satu statis dan satu kondisi.

jika add_debug Ya false,,,,, ["debug"] Diganti [null]Tetapi compact() Pastikan daftar gabungan tidak termasuk yang tidak diinginkan null.

variable "add_debug" {
  default = false
}

locals {
  base = ["main", "worker"]
  debug = var.add_debug ? ["debug"] : [null]

  final_roles = compact(concat(local.base, local.debug))
}

output "roles" {
  value = local.final_roles
}

catatan: concat() Mengharuskan setiap argumen untuk menjadi daftar, atau bahkan penampung [null]bukan hanya nulljika tidak, kesalahan akan dijatuhkan.

Contoh 5: Menggunakan input kompak dalam modul

Di sini, modul root meneruskan daftar yang dibangun secara dinamis ke submodule. Daftar ini mencakup elemen opsional berdasarkan variabel input. compact() Saring null Sebelum masuk ke modul, pastikan services Selalu menerima daftar bersih.

# root/main.tf
module "example" {
  source = "./modules/service"
  services = compact([
    "api",
    var.enable_cache ? "cache" : null,
    var.enable_auth ? "auth" : null
  ])
}

# root/variables.tf
variable "enable_cache" {
  default = true
}
variable "enable_auth" {
  default = false
}

# modules/service/variables.tf
variable "services" {
  type = list(string)
}

# modules/service/main.tf
output "services_used" {
  value = var.services
}

Contoh 6: Gunakan compact in for_each untuk melewatkan elemen yang tidak perlu

Terraform membutuhkan for_each Kunci tidak valid dan unik, sehingga dapat digunakan compact() Ini memastikan iterasi yang aman dan efektif.

Di bawah, kami menelusuri daftar nama pengguna yang mungkin disertakan null nilai. Sebelum melamar for_each,,,,, compact() Pastikan semuanya null Entri dikecualikan.

variable "users" {
  default = ["alice", null, "bob", null, "carol"]
}

resource "null_resource" "user_setup" {
  for_each = toset(compact(var.users))

  triggers = {
    user = each.key
  }
}

Anda juga dapat menggunakan terraform toset() Kemampuan untuk menghapus duplikat, jadi jika penting untuk menyimpan duplikat atau pesanan, gunakan for Loop di luar daftar.

Concat dan terraform compact

Fungsi CONCAT di Terraform digunakan untuk menggabungkan beberapa daftar menjadi satu daftar. Dibutuhkan dua atau lebih parameter daftar dan mengembalikan daftar baru dengan semua elemen dalam urutan yang diberikan.

Terraform compact() Hapus semua null dan string kosong ("") Nilai dalam daftar. Namun, itu tidak mengubah jenis nilai lain, juga tidak menggabungkan daftar.

Misalnya:

concat(["a"], ["b", null])         => ["a", "b", null]
compact(["a", null, "b"])          => ["a", "b"]

Anda bisa menggunakannya concat Tambahkan daftar bersama compact Menghapus string kosong dalam daftar. Fitur -fitur ini juga dapat digabungkan ketika Anda perlu menggabungkan daftar dan menghapus entri kosong.

Poin -poin penting

ini compact() Fitur di Terraform dapat menyederhanakan kode Anda dengan menghapus apa pun null atau nilai string kosong dalam daftar untuk membuat konfigurasi Anda lebih aman, rawan kesalahan dan lebih mudah dipelihara.

rencana pengembangan website



metode pengembangan website

jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website

#Bersihkan #dan #sederhanakan #daftar

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *