ansible
Catatan teknis seputar web development, DevOps, dan integrasi AI.
15 artikel
- 01.36devops
Playbook Upgrade Hybrid: npm In-Container Plus Fallback Image
Playbook upgrade dua fase: npm di dalam kontainer plus fallback image custom, diverifikasi lewat versi yang benar-benar dilayani endpoint.
TL;DR: Gara-gara paket npm naik tapi versi yang dilayani tetap kuno, penulis sadar versi paket cuma klaim. Playbook upgradenya dirombak jadi dua fase: install npm dulu, terus cek /api/version, kalau gagal baru build image dari source. Ada health gate plus rollback otomatis, dan serial: 1 bikin blast radius cuma satu host.
#ansible#docker#npm - 06.14devops
Onboard Server KTM ke Ansible dan Swap Image 9router
Host KTM resmi dikelola Ansible: playbook upgrade 9router berlaku lagi setelah Docker Hub mengejar versi, dan swap ke image vendor 0.5.86 berjalan mulus.
TL;DR: Gue sempat mikir playbook error pas upgrade KTM ke 0586, ternyata registry Docker Hub aja yang ketinggalan di 0575. Makanya sempat build manual 0581, tapi akhirnya image vendor terbaru udah nongol dan playbook jalan mulus. Image custom lama masih nyangkut di disk dan tinggal dihapus manual nanti.
#docker#ansible#automation - 18.14devops
Ketika Custom Docker Image Membuat Playbook Upgrade Tidak Berlaku
Fleet-wide custom Docker image membuat playbook upgrade berbasis digest tidak berlaku; verifikasi bergeser ke endpoint aplikasi, upgrade path jadi clone→build→transfer.
TL;DR: Gara-gara build image 9router-custom sendiri, playbook lama yang bandingin digest Docker Hub jadi nggak berguna karena digestnya nggak akan pernah ada. Sekarang verifikasi lewat endpoint /api/version, upgrade-nya manual: build lokal, kirim via scp, terus docker load di server tujuan. Downtime cuma 15 detik per host, data aman.
#docker#ansible#automation - 21.18devops
Dry Run Ansible Crash di Task Report, Bukan di Task Utamanya
Task command di-skip saat --check, registered var jadi undefined, dan filter default di ujung chain nggak sempat nolong. Tempel default-nya dekat sumbernya.
TL;DR: Dry run Ansible --check gagal gara-gara task debug di akhir, padahal biang keroknya variabel register yang nggak keisi karena task sebelumnya ke-skip. default('?') nggak nolong karena dievaluasi terakhir, setelah filter last crash duluan. Fix-nya satu baris: tempel default(['(no output)']) sebelum last, langsung ijo lagi.
#ansible#automation#devops - 20.43devops
Upgrade Paket npm di dalam Container Docker yang Masih Jalan
Image Docker masih versi lama sementara npm sudah tiga rilis di depan. Solusinya: upgrade in-container via Ansible dengan health gate.
TL;DR: Gara-gara image decolua/9router:latest nggak di-update padahal npm udah rilis 0.5.81, solusinya tinggal npm i -g langsung di dalem container yang jalan terus restart. Catatan: CMD tetap eksekusi kode bundled di /app, jadi versi bisa masih lama. Restart aman karena writable layer kebawa, tapi re-create bikin perubahan hilang.
#docker#ansible#npm - 17.28devops
Rollout Node Exporter KTM Fleet dan Jebakan MaxAuthTries
Prometheus TargetDown di server ke-10 fleet: node_exporter nggak ada, Ansible gagal deploy karena SSH MaxAuthTries terbakar oleh urutan kunci ed25519. Fix = hardening SSH dulu (key-only, urutan kunci), baru monitoring — semua idempoten.
TL;DR: Monitor nyala merah alert TargetDown server kesepuluh, kira cuma kurang scrape config tapi SSH gagal total karena node_exporter nggak ada dan Ansible kena batas MaxAuthTries dari terlalu banyak kunci ed25519. Akhirnya benerin urutan playbook: hardening SSH dulu (hanya kunci, urutin biar nggak kebakar limit), baru deploy node_exporter. Sekarang idempoten, server baru jalanin playbook sama aja.
#ansible#prometheus#node-exporter - 17.23devops
Mendaftarkan KTM: Ketika Server Ke-10 Justru Membongkar Ilusi Otomatisasi
Server ke-10 fleet bongkar ilusi otomatisasi: SSH MaxAuthTries terbakar, cloud-init timpa hardening, node_exporter nggak ter-deploy. Pelajaran: fleet discipline berarti pipeline idempoten, bukan manual one-off.
TL;DR: Tambah server ke-10 gagal karena SSH MaxAuthTries 6 habis dipakai kunci salah urutannya, plus cloud-init override PasswordAuthentication lewat file drop-in yang menang leksikal. Server baru juga nggak pasang node_exporter jadi monitoring buta. Pelajarannya: playbook harus idempoten kelola config cloud-init eksplisit, jangan asumsikan rollout lama pasti jalan.
#ansible#ssh#hardening - 10.18devops
Task Ansible yang gagal karena direktori conf.d tidak ada
Playbook mitigation berhenti di server kesembilan: journald.conf.d ternyata tidak pernah ada. Satu task file state=directory menutup asumsi itu.
TL;DR: Playbook gagal di server kesembilan karena folder /etc/systemd/journald.conf.d nggak ada; delapan server lain kebetulan punya, jadi lolos terus. Fix-nya simpel banget: tambah satu task file state=directory sebelum task salin, beres. Hasilnya journal turun dari 720M ke 288M, aman di bawah cap 300M.
#ansible#systemd#journald - 10.08devops
Playbook reboot yang berani menolak reboot
Reboot satu server produksi itu mudah; yang sulit adalah pagarnya. Pre-flight lock, modul reboot, dan post-check uptime yang berani gagal.
TL;DR: Reboot satu server ternyata bukan cuma manggil modul reboot Ansible; playbook-nya dikasih pagar biar nggak nyasar. Dia nolak jalan kalau unattended-upgrades atau lock apt masih aktif, plus wajib konfirmasi dan --limit satu host biar nggak sembilan server ke-reboot sekaligus. Setelah reboot, uptime dibandingkan sebelum-sesudah buat membuktikan reboot-nya beneran kejadian.
#ansible#linux#reboot