Mengelola banyak server dengan Ansible: inventory, playbook, dan konsep idempotency yang mengubah cara sysadmin bekerja, lalu praktik manage fleets server di lab dengan satu perintah.

Di episode 12 kalian belajar mengotomasi tugas per-server dengan script. Episode 13 menaikkan satu level besar: bagaimana mengotomasi untuk banyak server sekaligus, secara konsisten? Jawabannya adalah Configuration Management — dan Ansible adalah pintu masuk paling ramah yang bisa kalian pilih.
Kunci yang membedakan Ansible dari sekadar kumpulan script: idempotency dan declarative state. Kalian tidak lagi menulis "cara" (lakukan ini, lalu itu), melainkan menyatakan "keadaan yang diinginkan" — dan Ansible yang memastikannya terwujud.
Ansible tidak butuh agent di server target. Ia terhubung via SSH dari control node, menjalankan modul, lalu menunggu. Ini membuat Ansible mudah dipakai di lingkungan apa pun yang bisa dijangkau SSH.
Inventory adalah daftar server yang dikelola, dengan grup dan variabel:
[webservers]
web01 ansible_host=192.168.56.11
web02 ansible_host=192.168.56.12
[dbservers]
db01 ansible_host=192.168.56.21
[linux:children]
webservers
dbserversIdempotent berarti: menjalankan task yang sama berulang kali menghasilkan keadaan yang sama — tanpa efek samping ganda. Contoh: apt install nginx jika dijalankan dua kali, hasilnya nginx tetap terpasang (bukan dua nginx). Ansible dirancang di atas prinsip ini: setiap modul memeriksa kondisi saat ini, lalu hanya mengubah jika perlu.
Playbook adalah dokumen YAML berisi play (target + tasks). Contoh instalasi nginx di semua webserver:
---
- name: Setup web server
hosts: webservers
become: true
vars:
nginx_port: 8080
tasks:
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Start dan enable nginx
ansible.builtin.systemd:
name: nginx
state: started
enabled: trueJalankan:
ansible-playbook -i inventory/hosts.ini playbooks/web.ymlPerhatikan deklarasi state: state: present (harus terpasang), state: started + enabled: true (harus berjalan & aktif saat boot). Kalian tidak menulis "apt install nginx" — kalian menyatakan "nginx harus terpasang dan berjalan". Perbedaannya terletak pada idempotency.
Handler hanya berjalan saat task melaporkan perubahan — misalnya restart service hanya jika konfigurasi berubah:
---
- name: Konfigurasi nginx
hosts: webservers
become: true
tasks:
- name: Salin konfigurasi nginx
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx
handlers:
- name: restart nginx
ansible.builtin.systemd:
name: nginx
state: restartedDengan Jinja2 template, satu file konfigurasi bisa menghasilkan nilai berbeda per server:
---
web01:
server_name: app1.example.com
web02:
server_name: app2.example.comserver {
listen 80;
server_name {{ server_name }};
root /var/www/html;
}Setelah playbook siap, kekuatan Ansible terasa: satu perintah untuk semua server.
ansible all -i inventory/hosts.ini -m ping
ansible webservers -i inventory/hosts.ini -a "uptime"
ansible-playbook -i inventory/hosts.ini playbooks/web.yml --check
ansible-playbook -i inventory/hosts.ini playbooks/web.yml-m ping — uji koneksi ke semua host.--check — dry-run: tampilkan apa yang akan berubah tanpa mengubah. Ini kesempatan untuk meninjau sebelum eksekusi nyata.Tip
Biasakan menjalankan --check sebelum eksekusi nyata pada playbook apa pun yang baru. Ini seperti "snapshot dulu, baru eksekusi" — tapi untuk seluruh fleet sekaligus. Sysadmin berpengalaman tidak pernah mengeksekusi playbook yang belum pernah dilihat hasil dry-run-nya.
Important
Ansible tidak menggantikan backup, monitoring, atau security — ia justru membuatnya lebih konsisten. Karena konfigurasi kini declarative dan bisa di-version, environment kalian jadi reproducible: server yang rusak bisa dibangun ulang dengan playbook yang sama. Inilah fondasi yang akan dipakai saat kalian masuk ke cloud (episode 14).
shell:/command: kecuali terpaksa.--check — mengeksekusi playbook yang belum pernah di-review.become: true — task yang butuh root gagal diam-diam dengan permission denied.Latihan terpadu:
# 1. Install ansible di control node (bisa laptop/server Linux)
sudo apt install -y ansible
# 2. Siapkan inventory dua server lab
# 3. Tulis playbook: install nginx + pastikan running (playbooks/web.yml di atas)
# 4. Uji koneksi
ansible all -i inventory/hosts.ini -m ping
# 5. Dry-run, lalu eksekusi
ansible-playbook -i inventory/hosts.ini playbooks/web.yml --check
ansible-playbook -i inventory/hosts.ini playbooks/web.yml
# 6. Jalankan ulang: seharusnya tidak ada perubahan (idempotent!)
ansible-playbook -i inventory/hosts.ini playbooks/web.ymlJika eksekusi kedua menampilkan ok=... changed=0, idempotency terbukti — dan kalian baru saja merasakan inti Configuration Management.
Inti yang harus dibawa pulang dari episode 13:
--check sebelum eksekusi; modul bawaan, bukan perintah manual.Di episode 14 selanjutnya kita akan membawa semuanya ke skala lebih besar: Cloud Administration — mengelola VM cloud, storage, networking, dan IAM di AWS/GCP/Azure, dengan praktik migrasi beban kerja ke cloud. Pastikan tetap semangat, karena episode ini membuka pintu ke peran cloud admin!