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.
Ringkasan
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.
Layar terminal menampilkan baris demi baris output hijau saat saya menjalankan ansible-playbook upgrade-9router.yml --limit KTM. Container 9router-custom:0.5.81 yang saya build sendiri resmi digantikan image vendor decolua/9router:latest versi 0.5.86.
Jujur, saya sempat curiga playbook-nya gagal menarget KTM. Dugaan pertama: ada yang salah di inventory atau pola pattern Ansible-nya meleset. Tebakan itu ngawur. Playbook tidak pernah salah; ia hanya butuh image vendor sebagai sasarannya.
Yang bikin macet selama ini cuma registry. Tag latest di Docker Hub sempat terkunci di versi 0.5.75, terakhir di-push 10 September menurut halaman tag Docker Hub. Itu sebabnya pada 20 September saya build sendiri 0.5.81 dari source master. Ketertinggalan itu tertutup dua iterasi kemudian: tag latest di-push ulang 22 September, isinya 0.5.86, persis dengan rilis terbaru di npm registry (engine Node >=18.0.0).
Masuk Inventory Dulu, Baru Disebut Dikelola
Server baru sah disebut dikelola kalau ia jadi anggota grup yang ditarget playbook. KTM saya masukkan ke grup 9router dan 9router_data_root di ansible/inventory/hosts.yaml, plus tag 9router di blok KTM pada inventory.yaml. Dua grup itu bukan formalitas: grup 9router menentukan siapa yang kena playbook upgrade, sementara 9router_data_root menandai host yang datadir-nya di /root/.9router. Fleet juga punya grup 9router_data_linuxuser dan 9router_data_ubuntu untuk host dengan lokasi data berbeda.
Pola targeting Ansible memang sepenuhnya bergantung pada inventory: host yang tidak terdaftar tidak bisa disentuh pattern apa pun, dan flag --limit pun merujuk ke inventory yang sama, sesuai dokumentasi pola Ansible.
Swap Image dan Jejak yang Ditinggalkan
Setelah playbook selesai, health check mengembalikan HTTP 307 dengan hasUpdate:false. Password dashboard tidak hilang karena datadir /root/.9router di host di-bind mount ke dalam container; state aplikasi, termasuk hash password, menempel di filesystem host dan tetap hidup meski container di-recreate, sesuai dokumentasi bind mount Docker.
Satu warisan ditinggal: image lama 9router-custom:0.5.81 masih duduk di disk tanpa referensi. Ia kandidat docker image rm di sesi maintenance disk berikutnya. Perintah itu hanya bekerja lokal dan tidak menghapus apa pun dari registry; image milik container yang masih berjalan butuh flag -f, catatan di referensi docker image rm.
Saya lebih memilih menunggu registry vendor ketimbang memelihara pipeline build custom. Dua pekan lag di Docker Hub mengajarkan satu hal: selama vendor akhirnya menyusul, satu baris tambahan di hosts.yaml lebih murah daripada satu cabang build manual.