Latihan 1 dari materi Infrastructure as Code di DevOps — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi function planChanges(currentState, desiredState). Kedua parameter berbentuk object: key = nama resource, value = object atributnya. Kembalikan array perubahan.
Resource ada di desiredState tapi gak di currentState: { action: "create", resource, config }, dengan config = atribut dari desiredState.
Resource ada di keduanya tapi atributnya beda: { action: "update", resource, changes }, dengan changes = atribut yang berbeda saja, berisi nilai dari desiredState.
Resource ada di currentState tapi gak di desiredState: { action: "destroy", resource }.
Resource yang identik dilewati.
Urutkan hasilnya: semua create, lalu update, lalu destroy. Urutan key tiap object persis seperti di atas.
Cek tersembunyi: { db: { size: "10GB" }, cache: { size: "1GB" } } ke { db: { size: "10GB" } } harus [{"action":"destroy","resource":"cache"}] (db identik, gak masuk hasil).
Cek tersembunyi kedua: web yang cuma berubah type (region tetap) harus menghasilkan changes berisi type saja.
Hasilnya dibandingkan sebagai teks JSON, jadi urutan item dan urutan key ikut dicek. Baris console.log di kode awal biarkan saja.
Hint
Plan adalah diff dua object: nama yang cuma ada di desired dibuat, yang ada di keduanya tapi beda diubah, yang cuma ada di current dihapus.
Siapkan tiga array (creates, updates, destroys). Loop for...in desiredState untuk create dan update, bandingkan dengan JSON.stringify, lalu loop for...in currentState untuk destroy. Gabungkan dengan urutan create, update, destroy.
for (const name in desiredState) { if (!currentState[name]) creates.push({ action: "create", resource: name, config: desiredState[name] }); else if (JSON.stringify(currentState[name]) !== JSON.stringify(desiredState[name])) { const changes = {}; for (const key in desiredState[name]) if (currentState[name][key] !== desiredState[name][key]) changes[key] = desiredState[name][key]; updates.push({ action: "update", resource: name, changes }); } } ... return [...creates, ...updates, ...destroys];
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...