Inventory #
Sebelum Ansible bisa melakukan apapun, ia perlu tahu ke mana harus terhubung. Di sinilah inventory berperan. Inventory adalah daftar managed node yang dikelola oleh Ansible — server mana yang ada, bagaimana mengelompokkannya, dan variabel apa yang berlaku untuk masing-masing. Inventory adalah fondasi dari setiap operasi Ansible.
Apa itu Inventory #
Secara paling sederhana, inventory adalah sebuah file teks berisi daftar IP address atau hostname server yang akan dikelola. Tapi inventory bisa jauh lebih dari itu — ia juga mendefinisikan grup server, variabel per-host, dan hierarki yang memungkinkan kamu menjalankan playbook hanya untuk subset server tertentu.
# Inventory paling sederhana — file teks biasa
192.168.1.10
192.168.1.11
web-server.example.com
db-server.example.com
Ansible akan menggunakan daftar ini sebagai target saat kamu menjalankan playbook atau ad-hoc command.
Pengelompokan Host #
Kekuatan inventory mulai terlihat saat kamu mengelompokkan server ke dalam grup. Grup memungkinkan kamu menjalankan playbook hanya untuk tipe server tertentu — misalnya hanya server web, atau hanya server database.
# Inventory dengan grup — format INI
[webservers]
web-01.example.com
web-02.example.com
web-03.example.com
[dbservers]
db-01.example.com
db-02.example.com
[cacheservers]
cache-01.example.com
Dengan inventory ini, kamu bisa menargetkan grup spesifik saat menjalankan playbook:
# Hanya jalankan di server web
ansible-playbook -i inventory.ini deploy.yml --limit webservers
# Jalankan di semua server
ansible-playbook -i inventory.ini site.yml
Grup dalam Grup #
Inventory juga mendukung grup dari grup menggunakan syntax :children. Ini sangat berguna untuk mendefinisikan lingkungan yang berbeda atau region yang berbeda.
[webservers]
web-01
web-02
[dbservers]
db-01
db-02
# Grup "production" berisi semua server web dan db
[production:children]
webservers
dbservers
[staging]
staging-web-01
staging-db-01
Sekarang kamu bisa menjalankan playbook untuk semua server production sekaligus, atau hanya untuk server staging:
ansible-playbook -i inventory.ini site.yml --limit production
ansible-playbook -i inventory.ini site.yml --limit staging
Variabel dalam Inventory #
Inventory juga bisa menyimpan variabel yang berlaku untuk host atau grup tertentu. Ini memungkinkan playbook yang sama berperilaku berbeda tergantung server targetnya.
[webservers]
web-01 http_port=80 nginx_worker=4
web-02 http_port=8080 nginx_worker=2
[webservers:vars]
# Variabel yang berlaku untuk semua host di grup webservers
ansible_user=ubuntu
nginx_version=1.24
[dbservers:vars]
ansible_user=admin
db_port=5432
Menyimpan terlalu banyak variabel langsung di file inventory membuat inventory sulit dibaca dan dikelola. Untuk variabel yang kompleks, gunakan direktorihost_vars/dangroup_vars/yang terpisah. Ini akan dibahas lebih dalam di section Inventory Management.
Format Inventory #
Ansible mendukung dua format inventory: INI dan YAML. Format INI lebih ringkas, sedangkan YAML lebih eksplisit dan cocok untuk inventory yang kompleks.
# Format YAML — lebih eksplisit
all:
children:
webservers:
hosts:
web-01.example.com:
http_port: 80
web-02.example.com:
http_port: 8080
dbservers:
hosts:
db-01.example.com:
db-02.example.com:
vars:
db_port: 5432
Untuk inventory kecil hingga menengah, format INI sudah cukup dan lebih mudah dibaca secara cepat. Format YAML lebih baik saat struktur inventory mulai kompleks.
Inventory Statis vs Dinamis #
Inventory yang sudah dibahas di atas adalah inventory statis — server didefinisikan secara manual dalam file. Ini cocok untuk infrastruktur yang relatif stabil.
Untuk infrastruktur cloud yang dinamis — server dibuat dan dihapus secara otomatis — inventory dinamis lebih cocok. Inventory dinamis adalah skrip atau plugin yang mengambil daftar server dari sumber eksternal (AWS, GCP, Azure, vSphere) secara real-time.
Inventory Statis:
File teks → Ansible tahu server yang ada
Inventory Dinamis:
AWS API → Plugin inventory → Ansible tahu server yang ada
(server baru otomatis masuk, server yang dihapus otomatis keluar)
Konsep ini akan dibahas lebih mendalam di section Inventory Management.
Grup Bawaan: all dan ungrouped #
Ansible selalu menyediakan dua grup bawaan yang tidak perlu didefinisikan:
all → berisi semua host di inventory
ungrouped → berisi host yang tidak masuk grup manapun
Kamu bisa menggunakan grup all untuk menjalankan playbook ke semua server sekaligus, atau ungrouped untuk menarget server yang belum dikategorikan.
# Jalankan di semua server
ansible-playbook -i inventory.ini site.yml --limit all
# Cek semua host yang terdaftar
ansible-inventory -i inventory.ini --list
Ringkasan #
- Inventory adalah daftar managed node yang akan dikelola Ansible — bisa berupa file teks, YAML, atau skrip dinamis.
- Grup memungkinkan kamu mengelompokkan server berdasarkan fungsi (webservers, dbservers) atau lingkungan (production, staging).
- Grup dalam grup menggunakan
:childrenuntuk mendefinisikan hierarki yang lebih kompleks.- Variabel inventory bisa didefinisikan per-host atau per-grup langsung di file inventory, tapi lebih baik dipisah ke
host_vars/dangroup_vars/.- Dua format yang didukung: INI (ringkas, cocok untuk inventory sederhana) dan YAML (eksplisit, cocok untuk inventory kompleks).
- Inventory dinamis digunakan untuk infrastruktur cloud yang server-nya berubah secara otomatis.