Ansible From Zero To Hero


Selamat datang di dunia Ansible! Dalam artikel ini, saya akan membawa Anda melalui perjalanan dari nol hingga menjadi pahlawan dalam automatisasi infrastruktur. Dengan Ansible, saya dapat mengelola dan mengkonfigurasi sistem dengan mudah dan efisien. Mari saya mulai petualangan saya sendiri.

*Note Sebelum melakukan semuanya konfigurasi ansible agar dapat mengkontrol lebih dari 1.




1. Membuat Automation Dengan Ansible Menjalankan Perintah Install Telnet Pada Minimum 2 Servers.

Disini saya sudah menyiapkan playbook untuk menginstall sebuah package, yang dimana package yang ingin di install di simpan dalam sebuah variable, jadi penggunaanya pada saat ingin mengeksekusi program ditambahkan nama package pada command nya, dalam hal ini saya akan mencontohkannya untuk menginstall Telnet.

  • name: Install Package: Ini adalah nama dari tugas playbook, yang menjelaskan apa yang dilakukan oleh playbook ini.
  • hosts: all: Ini menentukan bahwa playbook ini akan diterapkan pada semua host yang didefinisikan dalam inventori Ansible.
  • become: yes: Ini mengindikasikan bahwa playbook ini akan menjalankan tugas sebagai superuser (root) pada host target.
  • vars:: Ini adalah bagian dimana variabel yang digunakan dalam playbook didefinisikan. Dalam hal ini, variabel package_name yang akan diterapkan sebagai nama paket yang akan di install.
  • tasks:: Ini adalah bagian dimana tugas-tugas didefinisikan yang akan dilakukan oleh playbook.
  • - name: Install Package: Ini adalah nama dari tugas playbook, yang menjelaskan tugas yang dilakukan.
  • package:: Ini adalah modul Ansible yang akan digunakan untuk menginstal paket.
  • name: "{{ package_name }}": Ini adalah nama paket yang akan diinstal. Variabel package_name diambil dari bagian vars.
  • state: present: Ini menentukan bahwa paket harus ada pada sistem dan diinstal jika belum terinstal.

Untuk mengeksekusinya dapat menggunakan perintah seperti dibawah ini.

Perintah diatas akan menjalankan playbook install_package.yaml dengan variabel package_name ditetapkan sebagai "telnet", dan menggunakan file inventori /etc/ansible/hosts. Playbook akan menginstal paket "telnet" pada semua host yang ditentukan dalam file inventori.


2. Membuat Automation Dengan Ansible Menjalankan Command Memeriksa Filesystem Usage Pada Target Hosts.

Untuk melakukan hal ini saya sudah menyiapkan playbook untuk menjalankan perintah shell pada setiap server tujuan, sama seperti sebelumya perintah yang ingin dijalankan di simpan dalam sebuah variable, jadi nantinya pada saat ingin mengeksekusi program ditambahkan nama perintah yang ingin di eksekusi pada command nya, dalam hal ini saya mencontohkannya untuk menjalankan perintah untuk mengecek filesystem usage dengan command df -Th.

  • hosts: all: Ini menentukan bahwa playbook akan diterapkan pada semua host yang didefinisikan dalam file inventori Ansible. Dalam hal ini, kata kunci "all" digunakan untuk menentukan bahwa playbook akan diterapkan pada semua host dalam file inventori.
  • tasks:: Ini adalah bagian dari playbook dimana tugas-tugas didefinisikan yang akan dilakukan oleh playbook.
  • - name: Run command: Ini adalah nama dari tugas playbook, yang menjelaskan tugas yang dilakukan. Dalam hal ini, tugas adalah untuk menjalankan perintah shell.
  • shell: "{{ cmd }}": Ini menentukan bahwa perintah shell akan dieksekusi menggunakan modul Ansible "shell". Variabel cmd akan digunakan sebagai perintah shell yang akan dieksekusi.
  • register: result: Ini menentukan bahwa hasil dari tugas "shell" akan disimpan ke dalam variabel result. Ini memungkinkan hasil dari tugas ini dapat digunakan pada tugas-tugas berikutnya dalam playbook.
  • vars:: Ini adalah bagian dari playbook dimana variabel yang digunakan dalam playbook didefinisikan. Dalam hal ini, variabel cmd didefinisikan sebagai variabel yang akan digunakan dalam perintah shell yang dieksekusi.
  • - name: Display output: Ini adalah nama dari tugas playbook, yang menjelaskan tugas yang dilakukan. Dalam hal ini, tugas adalah untuk menampilkan output dari perintah shell yang telah dieksekusi pada tugas sebelumnya.
  • debug:: Ini menentukan bahwa modul Ansible "debug" akan digunakan untuk menampilkan output dari variabel result.stdout_lines. Variabel ini berisi baris-baris output dari perintah shell yang telah dieksekusi pada tugas sebelumnya.

Untuk mengeksekusinya dapat menggunakan perintah seperti dibawah ini.


  • ansible-playbook: Ini adalah utilitas command line dari Ansible yang digunakan untuk menjalankan playbook.
  • -i /etc/ansible/hosts: Ini menentukan file inventori Ansible yang digunakan untuk menentukan host-host yang akan diterapkan oleh playbook. Dalam hal ini, file inventori berada pada lokasi /etc/ansible/hosts.
  • -e cmd="df -Th": Ini adalah parameter ekstra yang digunakan untuk memberikan nilai pada variabel cmd pada playbook. Dalam hal ini, variabel cmd akan diisi dengan perintah shell "df -Th".
  • command_shell.yaml: Ini adalah nama dari playbook yang akan dijalankan. Playbook ini akan mengandung tugas-tugas yang akan dilakukan pada host yang didefinisikan dalam file inventori.


3. Membuat Automation Dengan Ansible Untuk Membuat User Pada Target Hosts.

Sama seperti sebelumya kali ini saya sudah menyiapkan playbook dan berikut adalah isi dari playbooknya.

  • - name: Create user: Ini adalah nama dari playbook yang diberikan oleh pengguna untuk membuat pengguna.
  • hosts: all: Ini menentukan host-host yang akan diterapkan oleh playbook. Dalam hal ini, "all" berarti bahwa playbook akan diterapkan pada semua host yang didefinisikan dalam file inventori Ansible.
  • become: yes: Ini memerintahkan Ansible untuk menjalankan tugas sebagai superuser (root).
  • become_user: root: Ini menentukan bahwa Ansible harus menjalankan tugas sebagai user root.
  • vars:: Ini adalah bagian dari playbook yang digunakan untuk menentukan variabel-variabel yang akan digunakan dalam tugas-tugas playbook.
  • username: <username>: Ini adalah variabel yang digunakan untuk menentukan nama pengguna baru yang akan dibuat.
  • - name: Create a new user: Ini adalah nama dari tugas yang digunakan untuk membuat pengguna baru.
  • user:: Ini adalah modul Ansible yang digunakan untuk membuat, memodifikasi, dan menghapus pengguna.
  • name: "{{ username }}": Ini adalah nama dari pengguna baru yang akan dibuat. Nilai dari variabel username akan digunakan sebagai nama pengguna.
  • state: present: Ini menentukan bahwa pengguna baru harus ada pada sistem. Jika pengguna sudah ada, tidak akan dilakukan apa-apa. Jika pengguna belum ada, maka pengguna akan dibuat.

Untuk mengeksekusinya dapat menggunakan perintah seperti di bawah ini.


  • ansible-playbook: Ini adalah perintah utama untuk menjalankan playbook Ansible.
  • -e username="supri": Ini adalah opsi yang digunakan untuk menentukan nilai variabel username pada saat menjalankan playbook. Dalam hal ini, nama pengguna baru yang akan dibuat adalah "supri".
  • create_user.yaml: Ini adalah nama dari file playbook yang akan dijalankan oleh Ansible.


4. Membuat Automation Dengan Ansible Menjalankan Command Telnet Ke Server Tujuan Ke Port 22.

Untuk ini juga saya sudah ada playbook yang cocok berikut adalah playbooknya.

- name: telnet: Ini adalah nama dari playbook.

hosts: all: Ini adalah bagian yang menentukan target host yang akan diterapkan playbook. Dalam hal ini, all menunjukkan bahwa playbook akan diterapkan pada semua host yang didefinisikan dalam inventori Ansible.

gather_facts: false: Ini adalah bagian yang menentukan apakah Ansible harus mengumpulkan informasi tentang host sebelum menjalankan tugas. Dalam hal ini, nilai false menunjukkan bahwa Ansible tidak perlu mengumpulkan informasi tentang host sebelum menjalankan tugas.

become: true: Ini adalah bagian yang menentukan apakah Ansible harus berubah ke privilese root sebelum menjalankan tugas. Nilai true menunjukkan bahwa Ansible harus berubah ke privilese root sebelum menjalankan tugas.

vars:: Ini adalah bagian yang menentukan variabel yang akan digunakan dalam playbook. Dalam hal ini, variabel host dan port didefinisikan dan diatur dengan nilai localhost dan 22 respectively.

tasks:: Ini adalah bagian yang menentukan tugas yang akan dilakukan oleh Ansible. Dalam hal ini, ada dua tugas yang didefinisikan.

- shell: |: Ini adalah tugas pertama yang menjalankan perintah shell. Dalam tugas ini, perintah telnet digunakan untuk mencoba menghubungkan ke host pada port yang ditentukan. Perintah timeout digunakan untuk menentukan waktu maksimal yang akan diterima oleh perintah telnet. Hasil dari perintah telnet akan diteruskan ke perintah grep yang akan memfilter hasil dan membandingkan dengan teks tertentu. Jika grep menemukan teks yang sesuai, maka output akan diteruskan ke perintah echo. Output dari echo akan diteruskan ke file dengan nama $out.

ignore_errors: false: Ini adalah bagian yang menentukan apakah Ansible harus mengabaikan error yang mungkin terjadi saat menjalankan tugas. Nilai false menunjukkan bahwa Ansible harus menangani setiap error yang mungkin terjadi.

register: ps: Ini adalah playbook Ansible yang digunakan untuk melakukan uji coba koneksi ke host menggunakan Telnet. Playbook ini akan dijalankan pada semua host yang didefinisikan dalam inventori Ansible.

gather_facts: false mengatakan Ansible untuk tidak mengumpulkan informasi tentang host sebelum memulai tugas.

become: true memastikan bahwa tugas akan dieksekusi sebagai superuser.

Variabel yang didefinisikan dalam vars seperti host dan port digunakan selama tugas untuk menentukan host dan port yang akan diuji.

Tugas pertama dalam playbook menggunakan perintah shell untuk melakukan uji coba koneksi ke host menggunakan Telnet. Jika koneksi berhasil, maka pesan "telnet [host] [port]: connection Successfully" akan dicetak. Jika koneksi ditolak, maka pesan "telnet [host] [port]: connection refused" akan dicetak. Jika koneksi terputus, maka pesan "telnet [host] [port]: connection timed out" akan dicetak.

Tugas kedua menggunakan perintah debug untuk menampilkan hasil dari tugas sebelumnya. Ini memungkinkan Anda untuk melihat apakah koneksi berhasil atau gagal dan apa pesan yang sesuai.

Untuk mengeksekusinya dapat menggunakan perintah seperti dibawah ini.


5. Menginstall Ansible Tower

Karena saya menggunakan RedHat 9 jadi saya belum menemukan cara untuk menginstall Ansible Tower di RedHat 9.


6. Perbedaan Automation Platform AWX dan ANSIBLE TOWER 

Automation Platform AWX dan Ansible Tower adalah dua solusi yang digunakan untuk mengelola dan memantau proses automatisasi infrastruktur IT. Berikut adalah beberapa perbedaan utama antara kedua solusi tersebut:

  • Open Source vs. Komersial: Automation Platform AWX adalah versi open source dari Ansible Tower, yang merupakan produk komersial. Ini berarti bahwa Ansible Tower memiliki fitur tambahan dan dukungan komersial yang tidak tersedia dalam AWX.
  • User Interface: Ansible Tower memiliki antarmuka pengguna yang lebih baik dibandingkan AWX. Antarmuka pengguna Ansible Tower memiliki tampilan yang lebih modern dan bersih, serta lebih mudah digunakan dibandingkan AWX.
  • Integrasi dengan sistem lain: Ansible Tower memiliki integrasi yang lebih baik dengan sistem lain seperti Red Hat CloudForms, Microsoft System Center, dan VMware vCenter, sementara AWX memiliki integrasi yang lebih terbatas.
  • Skalabilitas: Ansible Tower didesain untuk menangani skala besar dan memiliki fitur tambahan seperti clustering dan load balancing, sementara AWX lebih cocok untuk lingkungan kecil atau menengah.
  • Dukungan: Ansible Tower memiliki dukungan komersial dari Red Hat, sementara AWX tidak memiliki dukungan komersial.

Secara keseluruhan, Ansible Tower adalah pilihan yang lebih baik bagi perusahaan besar yang mencari solusi automatisasi IT yang kuat dan berkualitas, sementara AWX lebih cocok bagi organisasi kecil atau start-up yang mencari solusi automatisasi dengan biaya rendah.


7. Ansible Fundamental

Ansible adalah alat otomatisasi infrastruktur IT yang memungkinkan Anda mengelola perangkat dan aplikasi dengan mudah dan efisien. Berikut adalah beberapa konsep dasar Ansible yang perlu Anda pahami untuk memahami bagaimana cara kerja Ansible:

  • Playbook: Playbook adalah dokumen yang berisi instruksi Ansible untuk melakukan tugas tertentu. Playbook ditulis dalam bahasa yang dikenal sebagai YAML (Yet Another Markup Language) dan menjelaskan tugas-tugas yang harus dilakukan, termasuk instalasi perangkat lunak, konfigurasi sistem, dan banyak lagi.
  • Inventory: Inventory adalah daftar perangkat yang akan dikontrol oleh Ansible. Inventori dapat dalam bentuk file teks yang menggambarkan perangkat, alamat IP, dan informasi lainnya yang diperlukan untuk mengontrol perangkat.
  • Modul/Task: Modul adalah bagian dasar dari Ansible yang melakukan tugas tertentu, seperti menginstal perangkat lunak, membuat direktori, atau mengubah konfigurasi sistem. Tugas adalah instruksi dalam playbook yang menggunakan modul untuk melakukan tugas tertentu.

Untuk menjalankan playbook, Anda menggunakan perintah ansible-playbook pada terminal. Ansible akan membaca playbook dan mengeksekusi tugas-tugas yang didefinisikan dalam playbook, menggunakan informasi dari inventory untuk mengontrol perangkat. Dengan Ansible, Anda dapat membuat proses automatisasi yang teratur, efisien, dan mudah diulang untuk mengelola perangkat dan aplikasi Anda.


Fahmi Maulana Fadila

Peserta Program Beasiswa Protonema 2022/2023










Subscribe to receive free email updates:

0 Response to "Ansible From Zero To Hero"

Posting Komentar