Quick Start: Ansible


Ansible adalah sebuah platform open-source yang digunakan untuk otomatisasi tugas-tugas IT seperti pengelolaan konfigurasi, penyebaran perangkat lunak, manajemen infrastruktur, dan lain-lain. Ini memungkinkan administrator sistem untuk melakukan tugas-tugas ini melalui kode yang didefinisikan dengan baik, yang sering disebut sebagai “playbooks“. Ansible pada awalnya dibuat oleh Michael DeHaan pada tahun 2012. Namun pada tahun 2015 telah diakusisi oleh Red Hat.

Ansible menggunakan bahasa deskripsi yang mudah dibaca manusia (human-readable) yang disebut YAML untuk menentukan konfigurasi dan tindakan yang diperlukan. Salah satu keunggulan utama Ansible adalah kemampuannya untuk berfungsi tanpa agen di host yang dikelola, membuatnya relatif mudah diimplementasikan dan diintegrasikan dengan infrastruktur yang ada. Ansible dapat bekerja tanpa agen karena adanya protokol Secure Shell (SSH). Cara kerja Ansible sangat bergantung pada komponen SSH dalam bekerja.

Layaknya produk Red Hat yang lain. Ansible sendiri merupakan upstream dari produk Red Hat yaitu Red Hat Ansible Automation Platform. Dengan kata lain, perubahan dan pembaruan pada Ansible biasanya pertama kali muncul dalam Ansible dahulu, kemudian diintegrasikan ke dalam platform komersial Red Hat Ansible Automation Platform.

Masih bingung? Mari kita buat lebih simpel…

Untuk melakukan suatu konfigurasi suatu server pasti kita sering menggunakan SSH dalam terminal. Kontrol secara manual memanglah bagus untuk suatu proses debugging. Namun proses manual merupakan ide yang buruk ketika kita melakukan suatu tugas repetitif, misalnya memperbarui semua paket yang telah diinstal pada Linux ke versi terbaru. Disinilah Ansible mengambil peran. Ansible pada dasarnya sebuah abstraksi layaknya ketika menggunakan terminal. Abstraksi ini juga membantu kita untuk melakukan manajemen beberapa host atau server sekaligus

Perbandingan cara kerja SSH dan Ansible

Mulai mencoba

Pertama tentu saja kita perlu melakukan instalasi Ansible. Seperti yang dijelaskan di awal, Ansible bersifat agentless, sehingga hanya perlu dipasang di control node. Control node tersebut merupakan PC atau laptop yang kita gunakan. Ansible merekomendasikan untuk menggunakan pipx, sehingga terlebih dahulu lakukan instalasi pipx. Lakukan instalasi Ansible dengan command berikut:

$ pipx install --include-deps ansible

Buat folder untuk menyimpan file yang akan kita butuhkan.

$ mkdir ansible_quickstart && cd ansible_quickstart

Untuk menyelesaikan langkah-langkah berikut, Anda akan membutuhkan alamat IP atau nama domain lengkap (FQDN) dari setidaknya satu sistem host. Untuk tujuan demonstrasi, host tersebut bisa berjalan secara lokal dalam sebuah kontainer atau mesin virtual. Anda juga harus memastikan bahwa kunci SSH publik Anda ditambahkan ke file authorized_keys di setiap host. Anda bisa mengikuti tutorial ini terlebih dahulu.

Buat inventory.ini, gunakan vi atau nano.

$ vi inventory.ini
[test_server] ; anda bisa menggunakan nama yang lain
192.168.28.1 ; sesuaikan dengan FQDN host anda

Lakukan verifikasi:

$ ansible-inventory -i inventory.ini --list

Coba lakukan ping ke host, tambahkan -u nama_user jika username server berbeda dengan di control node:

$ ansible test_server -m ping -i inventory.ini
192.168.28.1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Kita telah berhasil menambahkan inventori host. Selanjutnya kita akan membuat playbook.

Masukkan teks berikut ke playbook.yaml dengan menggunakan vi atau nano. Perhatikan spacing dengan teliti karena YAML sensitif dengan hal ini!

- name: My first play
  hosts: test_server
  tasks:
    - name: Ping my hosts
      ansible.builtin.ping:
    - name: Print message
      ansible.builtin.debug:
        msg: Hello world

Selanjutnya jalankan playbook tadi. Seperti tadi, tambahkan -u jika username berbeda.

$ ansible-playbook -i inventory.ini playbook.yaml

PLAY [My first play] ***********************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.28.1]

TASK [Ping my hosts] ***********************************************************
ok: [192.168.28.1]

TASK [Print message] ***********************************************************
ok: [192.168.28.1] => {
    "msg": "Hello world"
}

PLAY RECAP *********************************************************************
192.168.28.1              : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Kita sudah berhasil menjalankan playbook. Selanjutnya kita akan mencoba melakukan otomatisasi untuk update paket di Linux berbasis Debian.

Tambahkan baris kode di bawah ke playbook.yaml. Kode ini akan menggunakan modul Ansible apt untuk melakukan update dan upgrade di Linux berbasis Debian. Anda juga bisa menggunakan modul yang lain untuk menulis playbook:

- name: Update and Upgrade Packages
  hosts: test_server
  tasks:
    - name: Update apt package cache
      apt:
        update_cache: yes
    - name: Upgrade all packages
      apt:
        upgrade: yes
        force_apt_get: yes

Jalankan lagi Ansible:

$ ansible-playbook -i inventory.ini playbook.yaml

PLAY [My first play] ***********************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.28.1]

TASK [Ping my hosts] ***********************************************************
ok: [192.168.28.1]

TASK [Print message] ***********************************************************
ok: [192.168.28.1] => {
    "msg": "Hello world"
}

PLAY [Update and Upgrade Packages] *********************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.28.1]

TASK [Update apt package cache] ************************************************
ok: [192.168.28.1]

TASK [Upgrade all packages] ****************************************************
changed: [192.168.28.1]

PLAY RECAP *********************************************************************
192.168.28.1              : ok=6    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Sekarang kita juga telah berhasil melaukan proses otomatisasi proses upgrade. Kita hanya perlu menjalankan Ansible ketika kita membutuhkan untuk proses upgrade tanpa “mengotori” tangan melalui SSH manual.