Sebelum masuk lebih dalam ke Ansible, ada beberapa skill dasar dan tools yang perlu kalian siapkan terlebih dahulu, mulai dari Linux CLI, SSH, YAML, hingga setup environment dan instalasi Ansible itu sendiri.

Selamat datang di series Belajar Ansible! Series ini akan mengajak kalian menguasai Ansible dari nol hingga level siap produksi, mulai dari konsep fundamental, penulisan playbook, hingga integrasi dengan ekosistem modern seperti CI/CD dan cloud. Namun seperti pepatah, "pohon tidak akan tumbuh subur tanpa akar yang kuat". Sebelum menyentuh ansible-playbook atau menulis YAML yang indah, ada beberapa skill dasar dan tools yang wajib kalian miliki dan siapkan terlebih dahulu.
Mengapa prasyarat ini begitu penting? Ansible bukan aplikasi yang bisa langsung dipakai tanpa bekal. Ansible adalah configuration management tool yang berjalan di atas SSH, ditulis dalam Python, dan dikonfigurasi menggunakan YAML. Artinya, jika kalian belum familiar dengan tiga hal tersebut, perjalanan belajar kalian akan terasa sangat tersendat dan membingungkan. Bayangkan ingin menjadi seorang kapten kapal tapi belum tahu cara membaca kompas — ya, sehebat apapun kapalnya, tetap akan tersesat.
Episode 0 ini akan menjadi peta jalan untuk memastikan kalian semua siap. Kita akan membahas tiga skill fundamental (Linux CLI, konsep jaringan & SSH, serta YAML), lalu menyiapkan seluruh perangkat lunak dan perangkat keras yang dibutuhkan, dan ditutup dengan instalasi Ansible beserta verifikasinya. Setelah episode ini selesai, kalian sudah benar-benar siap melangkah ke episode 1 yang membahas sejarah dan latar belakang mengapa Ansible dibutuhkan.
Kita mulai dari skill. Tanpa skill ini, setup tools secanggih apapun tidak akan berguna. Berikut tiga pilar skill yang harus kalian kuasai setidaknya di level dasar.
Ansible lahir dan tumbuh besar di ekosistem Linux. Meskipun secara teknis Ansible bisa mengelola Windows (melalui WinRM), mayoritas use case di dunia nyata adalah mengelola server Linux. Karena itu, kemampuan mengoperasikan Linux melalui CLI (Command Line Interface) adalah syarat mutlak.
Apa saja yang harus kalian kuasai?
1. Navigasi & manajemen file. Kalian harus nyaman berpindah direktori, melihat isi, membuat, menyalin, dan menghapus file. Ini adalah kemampuan paling dasar yang akan kalian pakai setiap hari, termasuk saat menaruh file playbook Ansible.
pwd # cetak direktori kerja saat ini
ls -la # lihat isi direktori (termasuk hidden file)
cd /etc/ansible # pindah ke direktori /etc/ansible
mkdir -p ~/lab-ansible # buat direktori bertingkat
cp inventory.yml backup/ # salin file2. User & group. Ansible sering dijalankan dengan akun pengguna tertentu, dan mengelola hak akses user di managed node adalah pekerjaan sehari-hari seorang administrator. Kalian perlu mengenal perintah seperti useradd, usermod, groupadd, id, dan whoami.
3. Permission file (chmod & chown). Ini yang paling sering bikin bingung pemula. Setiap file di Linux punya pemilik, grup, dan izin akses untuk tiga kelompok: owner, group, dan others. Izin tersebut direpresentasikan sebagai r (read/baca), w (write/tulis), dan x (execute/eksekusi).
chmod 644 script.sh # owner: rw-, group: r--, others: r--
chmod 755 deploy.sh # owner: rwx, group: r-x, others: r-x
chmod +x deploy.sh # tambahkan hak execute (simbolik)
chown ansible:ansible /opt/app/config.yml # ganti owner & group
ls -l # verifikasi hasil perubahanTip
Angka pada chmod adalah hasil penjumlahan bit oktal: r=4, w=2, x=1. Jadi 755 artinya 7(4+2+1) untuk owner, 5(4+1) untuk group, dan 5(4+1) untuk others. Ini adalah standar yang wajib kalian hafal di luar kepala.
4. Sudo (privilege escalation). Banyak task otomasi (misalnya menginstall package atau mengubah service) memerlukan hak root. Di Ansible, mekanisme ini dikenal sebagai become — dan di sisi CLI kalian mengenalnya sebagai sudo.
sudo apt update # jalankan perintah sebagai root
sudo -i # masuk ke shell root interaktif
sudo -u www-data whoami # jalankan sebagai user tertentu
sudo visudo # edit konfigurasi sudoersWarning
Kesalahan umum pemula: menuliskan path atau perintah tanpa memahami permission. Contoh klasik adalah error Permission denied saat membaca file konfigurasi, atau chmod 777 berlebihan pada file yang seharusnya aman. Selalu gunakan hak akses seminimal mungkin yang diperlukan (least privilege).
Ansible tidak mengelola server secara lokal — ia mengelola server jarak jauh. Setiap kali Ansible menjalankan task, ia membuat koneksi ke managed node. Oleh karena itu, pemahaman dasar jaringan dan terutama SSH (Secure Shell) adalah non-negotiable.
Beberapa konsep jaringan yang perlu kalian pahami:
22 untuk SSH, 80 untuk HTTP, 443 untuk HTTPS.server1.example.com daripada mengingat IP.22 diblokir firewall, Ansible tidak akan pernah bisa terhubung.Otentikasi SSH bisa dilakukan dengan password, tapi praktik terbaik adalah menggunakan SSH key pair (pasangan kunci). Alasan utamanya: lebih aman (kunci private tidak pernah dikirim lewat jaringan) dan memungkinkan otomatisasi tanpa intervensi manusia — hal yang sangat krusial karena Ansible harus terhubung ke puluhan bahkan ribuan server tanpa dimintai password satu per satu.
# 1. Generate key pair (public + private)
ssh-keygen -t ed25519 -C "devops@example.com" -f ~/.ssh/id_ed25519
# 2. Lihat public key (inilah yang boleh dibagikan)
cat ~/.ssh/id_ed25519.pub
# 3. Salin public key ke managed node (sekali saja)
ssh-copy-id -i ~/.ssh/id_ed25519.pub devops@10.0.0.11
# 4. Uji koneksi tanpa password
ssh devops@10.0.0.11Important
Jangan pernah membagikan atau menyimpan kunci private (id_ed25519) sembarangan. Kunci private adalah identitas digital kalian — jika bocor, orang lain bisa masuk ke server kalian. Public key (id_ed25519.pub) justru boleh disebarkan ke mana saja karena hanya bisa meng-enkripsi, bukan membuka kunci.
Saat pertama kali SSH ke server, kalian akan melihat peringatan seperti berikut:
The authenticity of host '10.0.0.11 (10.0.0.11)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yesSaat kalian mengetik yes, fingerprint server tersebut disimpan ke file ~/.ssh/known_hosts. Ini adalah mekanisme perlindungan terhadap serangan man-in-the-middle — di mana server palsu menyamar menjadi server asli. Karena Ansible berjalan tanpa interaksi manusia, otomatisasi sering menonaktifkan verifikasi ini pada lab lokal (bukan di production!) menggunakan opsi host_key_checking = False di ansible.cfg, atau mendaftarkan host keys terlebih dahulu.
Warning
Menonaktifkan host_key_checking aman hanya untuk lingkungan lab/development. Di production, matikan host key checking tanpa pendaftaran yang benar sama saja dengan membuka pintu bagi serangan man-in-the-middle. Jangan biasakan ini di production!
Di sisi server (managed node), konfigurasi SSH diatur dalam file /etc/ssh/sshd_config. Beberapa direktif yang paling sering kalian atur:
Port 22
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication noTip
Untuk server yang akan dikelola Ansible, sangat disarankan mengatur PubkeyAuthentication yes dan PasswordAuthentication no. Ini memaksa semua akses menggunakan kunci SSH — lebih aman dan ramah otomasi. Jangan lupa sudo systemctl restart sshd setelah mengubah file ini.
Ini mungkin skill yang paling diremehkan tapi paling sering menjadi sumber error di Ansible. YAML (YAML Ain't Markup Language) adalah format serialisasi data yang mengutamakan keterbacaan manusia. Seluruh konfigurasi Ansible — inventory, playbook, role, hingga ansible.cfg yang ditulis dalam YAML — menggunakan format ini.
Konsep inti YAML yang harus kalian pahami:
-.# Key-value sederhana
name: web-server
# List / array
packages:
- nginx
- curl
- htop
# Dictionary / map
web_server:
domain: example.com
port: 80
tls:
enabled: true
cert_path: /etc/ssl/cert.pem
# List berisi dictionary (paling umum di Ansible)
users:
- name: arman
uid: 1001
- name: budi
uid: 1002Caution
Aturan emas YAML: jangan pernah menggunakan karakter tab untuk indentasi, dan pastikan konsisten (semua 2 spasi atau semua 4 spasi) dalam satu file. Error paling umum di playbook Ansible adalah Syntax Error while loading YAML yang penyebabnya sering kali cuma tab atau indentasi tidak konsisten. Bila ragu, gunakan linter atau ekstensi editor.
Untuk memudahkan membedakan konsep, berikut perbandingan singkatnya:
| Konsep | Deskripsi | Contoh |
|---|---|---|
| Key-Value | Pasangan kunci dan nilai | name: arman |
| List | Kumpulan nilai berurutan dengan - | - nginx |
| Dictionary | Kumpulan key-value ber-indentasi | tls:\n enabled: true |
| Nested | Kombinasi list & dictionary | list berisi map users |
Setelah skill terpenuhi, sekarang saatnya menyiapkan perangkat. Arsitektur Ansible membagi peran menjadi dua sisi: Control Node (mesin tempat Ansible diinstall dan perintah dieksekusi) dan Managed Nodes (server target yang dikelola).
| No | Tool | Type | Level | Keterangan |
|---|---|---|---|---|
| 1. | Laptop / PC / Mini PC | Hardware | Wajib | Mesin utama untuk menjalankan Control Node |
| 2. | Control Node (Linux/macOS/WSL2) | Software | Wajib | Tempat Ansible diinstall; butuh Python 3.9+ & OpenSSH client |
| 3. | Managed Nodes (2-3 VM Linux) | Software | Wajib | Target yang dikelola; Ubuntu/Debian/RHEL/Rocky Linux |
| 4. | Hypervisor / Virtualisasi | Software | Opsional | VirtualBox, Proxmox, multipass, atau Cloud VPS untuk membuat VM |
| 5. | Text Editor | Software | Wajib | VS Code + ekstensi Ansible & Red Hat YAML |
| 6. | Python 3.9+ | Software | Wajib | Runtime untuk Ansible di Control Node |
Ini adalah mesin tempat kalian mengetik ansible-playbook. Karakteristiknya:
python3 --version # pastikan >= 3.9
ssh -V # cek versi OpenSSH client
uname -a # cek OS & kernel (Linux)
which pipx # cek apakah pipx sudah terinstallIni adalah "kawanan" server yang akan dikelola Ansible. Untuk belajar, kalian cukup menyiapkan 2-3 virtual machine (VM) yang menjalankan Ubuntu, Debian, RHEL, atau Rocky Linux. Cara membuatnya bebas: bisa menggunakan VirtualBox (lokal, gratis), Proxmox (bare-metal hypervisor), multipass (CLI sederhana ala Ubuntu), atau Cloud VPS (DigitalOcean, AWS EC2, Vultr, dsb) jika kalian ingin merasakan environment produksi.
Tip
Yang wajib diingat: setiap managed node harus memiliki (1) Python 3, (2) SSH server aktif, dan (3) IP yang dapat dijangkau dari Control Node. Minimal requirement Ansible bahkan hanya butuh Python 3 di sisi target — ini nanti kita bahas lebih dalam saat membahas konsep agentless di episode 1.
Pastikan juga setiap VM sudah diisi dengan public key SSH dari Control Node (menggunakan ssh-copy-id) sehingga koneksi berjalan tanpa password.
Ansible adalah configuration as code — kalian akan banyak menulis dan membaca YAML. Text editor yang baik menyelamatkan kalian dari kesalahan indentasi dan typo. Rekomendasi standar industri adalah Visual Studio Code dengan dua ekstensi:
Note
Kuncinya bukan fanatisme terhadap editor tertentu. Jika kalian lebih nyaman dengan Neovim, Sublime, atau JetBrains, tetap silakan — yang penting editor kalian bisa menampilkan indentasi YAML dengan jelas dan mendukung highlight.
Sekarang bagian yang paling dinanti: menginstall Ansible di Control Node. Metode yang direkomendasikan oleh dokumentasi resmi adalah menggunakan pipx atau Python virtual environment (venv) — bukan menggunakan pip install global, karena itu akan mengotori environment Python sistem dan bisa memicu konflik dependency (fenomena yang dikenal sebagai dependency hell).
pipx menginstall aplikasi Python dalam environment terisolasi, tapi memasang binernya ke PATH sehingga bisa dijalankan langsung dari mana saja. Ini cara paling bersih untuk tool CLI seperti Ansible.
# Install pipx (Ubuntu/Debian)
sudo apt update
sudo apt install -y pipx
pipx ensurepath
# Install Ansible (package lengkap: ansible-core + collections populer)
pipx install --include-deps ansible
# Muat ulang shell agar PATH baru dikenali
exec $SHELLJika kalian sudah terbiasa dengan venv, metode ini juga sangat direkomendasikan — terutama jika kalian ingin project Ansible terisolasi per repository. Ini juga menjadi standar di banyak perusahaan.
cd ~/lab-ansible
# Buat virtual environment
python3 -m venv .venv
# Aktifkan environment
source .venv/bin/activate
# Install Ansible
pip install ansibleImportant
Ingat: environment venv harus diaktifkan setiap kali membuka terminal baru sebelum menjalankan ansible. Kalian akan tahu environment aktif bila prompt terminal diawali (.venv). Lupa mengaktifkannya adalah salah satu kesalahan paling umum setelah setup.
Setelah terinstall, verifikasi dengan ansible --version. Output yang benar harus menunjukkan versi Ansible, Python, dan lokasi file konfigurasi default.
ansible --version
ansible [core 2.16.3]
config file = None
configured module search path = ['/home/devops/.ansible/plugins/modules']
ansible python module location = /home/devops/.venv/lib/python3.11/site-packages/ansible
ansible collection path = /home/devops/.ansible/collections:/usr/share/ansible/collections
executable location = /home/devops/.venv/bin/ansible
python version = 3.11.6 (main, Nov 14 2023) [GCC 12.2.0] (/home/devops/.venv/bin/python3)
jinja version = 3.1.2
libyaml = TrueTip
Perhatikan bagian python version pada output di atas. Ini membuktikan bahwa Ansible berjalan di atas environment Python yang kita buat — bukan Python sistem. Jika angka versinya 3.9 atau lebih tinggi, kalian sudah siap melangkah.
Sebagai penutup hands-on, mari pastikan Control Node bisa berkomunikasi dengan managed node melalui SSH. Kita buat file inventory sederhana dan gunakan modul ping (bukan ICMP ping — ini ping level Ansible yang menguji apakah Control Node bisa mengeksekusi modul Python di target).
[webservers]
10.0.0.11 ansible_user=devops
10.0.0.12 ansible_user=devops
[dbservers]
10.0.0.13 ansible_user=devopsansible -i inventory.ini all -m ping10.0.0.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.0.0.12 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.0.0.13 | SUCCESS => {
"changed": false,
"ping": "pong"
}Jika semua node merespons "pong", artinya koneksi SSH, otentikasi kunci, dan eksekusi Python di managed node sudah berjalan dengan sempurna. Kalian resmi siap belajar Ansible!
Caution
Jika ada node yang gagal, jangan panik. Cek secara berurutan: (1) IP & port terjangkau? (ping, nc -zv <ip> 22), (2) public key sudah terpasang? (ssh-copy-id), (3) firewall tidak memblokir port 22? (4) SSH server aktif? (sudo systemctl status sshd). Proses debug sistematis seperti ini justru melatih mentalitas SRE yang baik.
Di episode 0 ini kita sudah menyiapkan pijakan yang kokoh: menguasai tiga skill fundamental (Linux CLI, jaringan & SSH, dan YAML), menyiapkan Control Node dan Managed Nodes beserta tools pendukungnya, menginstall Ansible dengan metode modern (pipx/venv), dan bahkan melakukan uji koneksi pertama menggunakan modul ping.
Poin penting yang harus kalian bawa:
pipx atau venv), bukan global pip.ansible --version dan tes ping sebelum mulai.Pastikan semua skill dan tools di atas sudah kalian siapkan, karena episode berikutnya akan membahas konsep secara lebih mendalam. Di episode 1 selanjutnya, kita akan membahas sejarah, latar belakang, dan mengapa dunia modern membutuhkan Ansible — mulai dari evolusi automation dari shell scripting manual hingga Infrastructure as Code, kenapa Ansible memilih pendekatan agentless, dan bagaimana posisinya dibandingkan tool lain seperti Puppet, Chef, dan Terraform. Pastikan tetap semangat, karena perjalanan belajar Ansible baru saja dimulai! 😁