Konfigurasi #
Ansible bisa langsung digunakan setelah instalasi tanpa konfigurasi tambahan — tapi tanpa konfigurasi yang tepat, kamu akan sering mengetik opsi yang sama berulang kali di command line. File ansible.cfg adalah tempat kamu mendefinisikan perilaku default Ansible: di mana inventory berada, user SSH yang digunakan, berapa banyak koneksi paralel, dan puluhan opsi lainnya.
File Konfigurasi ansible.cfg #
Ansible membaca konfigurasi dari beberapa lokasi, dengan prioritas dari atas ke bawah:
Urutan pencarian ansible.cfg (prioritas tertinggi ke terendah):
1. ANSIBLE_CONFIG (environment variable)
2. ./ansible.cfg (di direktori saat ini) ← paling umum untuk per-project
3. ~/.ansible.cfg (di home directory user) ← konfigurasi personal
4. /etc/ansible/ansible.cfg ← konfigurasi global sistem
Untuk project Ansible, letakkan ansible.cfg di root direktori project. Ini memastikan konfigurasi yang benar selalu digunakan saat kamu bekerja di dalam direktori tersebut.
# Cek file konfigurasi mana yang sedang aktif
ansible --version | grep "config file"
# config file = /home/user/myproject/ansible.cfg
Struktur Dasar ansible.cfg #
File ansible.cfg menggunakan format INI dengan beberapa section. Berikut template yang umum digunakan sebagai titik awal:
[defaults]
# Lokasi inventory default
inventory = inventory/
# User SSH yang digunakan untuk terhubung ke managed node
remote_user = ubuntu
# Lokasi private key SSH
private_key_file = ~/.ssh/id_ed25519
# Jumlah koneksi paralel (default: 5)
forks = 10
# Nonaktifkan host key checking (berguna untuk lab, JANGAN di produksi)
# host_key_checking = False
# Lokasi untuk menyimpan retry file
retry_files_enabled = False
# Format output
stdout_callback = yaml
[privilege_escalation]
# Apakah Ansible perlu sudo untuk menjalankan task
become = True
become_method = sudo
become_user = root
[ssh_connection]
# Gunakan SSH pipelining untuk mempercepat eksekusi
pipelining = True
# Opsi SSH tambahan
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=accept-new
Opsi [defaults] yang Penting #
inventory #
[defaults]
# Bisa berupa file tunggal
inventory = hosts.ini
# Atau direktori berisi beberapa file inventory
inventory = inventory/
# Atau path absolut
inventory = /opt/ansible/inventory/production
Saat menggunakan direktori, Ansible akan membaca semua file di dalamnya dan menggabungkannya menjadi satu inventory.
remote_user #
[defaults]
# User yang digunakan untuk koneksi SSH
remote_user = ubuntu # untuk AWS Ubuntu AMI
# remote_user = ec2-user # untuk AWS Amazon Linux
# remote_user = centos # untuk CentOS di beberapa cloud
Nilai ini bisa di-override per-host atau per-grup di inventory, atau saat menjalankan playbook dengan flag -u.
forks #
[defaults]
# Berapa managed node yang dikelola secara paralel
forks = 20 # Tingkatkan untuk infrastruktur besar
Nilai yang terlalu tinggi bisa membebani control node dan jaringan. Mulai dengan 10-20 dan sesuaikan berdasarkan observasi.
stdout_callback #
[defaults]
# Format output yang lebih mudah dibaca
stdout_callback = yaml # Output YAML yang rapi
# stdout_callback = json # Output JSON
# stdout_callback = debug # Output verbose untuk debugging
Opsi [privilege_escalation] #
Banyak task Ansible membutuhkan privilege root — menginstal paket, mengubah file sistem, mengelola service. Opsi ini mengatur cara Ansible mendapatkan privilege tersebut.
[privilege_escalation]
# Aktifkan privilege escalation secara default
become = True
# Method yang digunakan (sudo paling umum)
become_method = sudo
# User target setelah escalation
become_user = root
# Apakah perlu password untuk sudo
# Jika user punya NOPASSWD di sudoers, set False
become_ask_pass = False
Di lingkungan produksi, pastikan user Ansible dikonfigurasi denganNOPASSWDdi sudoers hanya untuk perintah-perintah yang benar-benar diperlukan, bukanALL. Ini membatasi blast radius jika credential Ansible bocor.
Opsi [ssh_connection] untuk Performa #
Konfigurasi SSH yang tepat bisa secara signifikan mempercepat eksekusi playbook.
[ssh_connection]
# Pipelining: kirim beberapa module dalam satu koneksi SSH
# Bisa mempercepat eksekusi 2-3x lipat
pipelining = True
# ControlMaster: reuse koneksi SSH yang sudah ada
# ControlPersist: pertahankan koneksi selama 60 detik setelah tidak digunakan
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
# Timeout koneksi (detik)
connect_timeout = 30
pipelining = Truetidak kompatibel denganrequirettydi sudoers. Jika managed node menggunakanrequiretty, nonaktifkan di sudoers atau matikan pipelining.
Konfigurasi via Environment Variable #
Hampir semua opsi di ansible.cfg bisa di-override menggunakan environment variable. Format umumnya adalah ANSIBLE_ diikuti nama opsi dalam huruf kapital.
# Override forks
export ANSIBLE_FORKS=20
# Override remote user
export ANSIBLE_REMOTE_USER=ubuntu
# Nonaktifkan host key checking sementara
export ANSIBLE_HOST_KEY_CHECKING=False
# Override inventory
export ANSIBLE_INVENTORY=/path/to/inventory
Environment variable berguna untuk CI/CD pipeline di mana kamu tidak ingin mengubah file ansible.cfg tapi perlu mengoverride beberapa nilai.
Contoh ansible.cfg untuk Development #
# ansible.cfg untuk lingkungan development/lab
[defaults]
inventory = inventory/
remote_user = ubuntu
private_key_file = ~/.ssh/id_ed25519
forks = 5
host_key_checking = False # OK untuk lab, JANGAN di produksi
retry_files_enabled = False
stdout_callback = yaml
[privilege_escalation]
become = True
become_method = sudo
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=30s
Contoh ansible.cfg untuk Produksi #
# ansible.cfg untuk lingkungan produksi
[defaults]
inventory = inventory/production/
remote_user = ansible-deploy
private_key_file = /opt/ansible/.ssh/deploy_key
forks = 20
host_key_checking = True # SELALU aktifkan di produksi
retry_files_enabled = False
stdout_callback = yaml
log_path = /var/log/ansible/ansible.log
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=yes
connect_timeout = 30
Ringkasan #
ansible.cfgdibaca dari beberapa lokasi — letakkan di root direktori project untuk konfigurasi per-project.- Section [defaults] mengatur inventory default, user SSH, jumlah forks, dan format output.
- Section [privilege_escalation] mengatur bagaimana Ansible mendapatkan akses sudo di managed node.
- Section [ssh_connection] dengan
pipelining = TruedanControlMasterbisa mempercepat eksekusi secara signifikan.- Gunakan
host_key_checking = Falsehanya di lab — selalu aktifkan di produksi untuk keamanan.- Environment variable bisa digunakan untuk override konfigurasi tanpa mengubah file, berguna untuk CI/CD.