Konfigurasi

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 dengan NOPASSWD di sudoers hanya untuk perintah-perintah yang benar-benar diperlukan, bukan ALL. 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 = True tidak kompatibel dengan requiretty di sudoers. Jika managed node menggunakan requiretty, 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.cfg dibaca 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 = True dan ControlMaster bisa mempercepat eksekusi secara signifikan.
  • Gunakan host_key_checking = False hanya di lab — selalu aktifkan di produksi untuk keamanan.
  • Environment variable bisa digunakan untuk override konfigurasi tanpa mengubah file, berguna untuk CI/CD.

← Sebelumnya: Instalasi   Berikutnya: Struktur Direktori →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact