Bagian pertama dari serial ini menyinggung sedikit sekali tentang Ansible. Mari kita mulai meluncur masuk lebih dalam lagi. Kali ini kita  akan mulai dengan sedikit sejarah.

Ansible ternyata adalah sebuah alat fiksi yang terdapat di dalam sebuah novel karangan Ursula K. Le Guin berjudul Rocannon’s World dan dibuat sekitar tahun 1966. Dalam novel tersebut Ansible diceritakan berfungsi sebagai sebuah alat komunikasi instan yang mampu mengirim dan menerima pesan lebih cepat dari cahaya.

Nama Ansible tersebutlah yang kemudian diadopsi oleh Michael DeHaan menjadi sebuah perkakas serba bisa yang mampu mengatur dan merubah infrastruktur TI dikemudian hari.

Michael DeHaan ini sebelum nya membangun juga sebuah tools yang bernama Cobbler. Memiliki fungsi yang hampir mirip dengan Ansible yaitu sebagai sebuah Linux Provisioning System. Tugas nya adalah memfasilitasi proses installasi sistem operasi komputer / server secara otomatis lewat jaringan. Dapat kita banyangkan bahwa Cobbler ini mampu menyiapkan sebuah data center lengkap dengan semua pengaturnya tanpa kita harus menyentuh server nya satu-per-satu.

Kalau kita lihat jejak rekam proyek yang dibangun oleh Michael DeHaan ini maka dapat sedikit kita simpulkan bahwa beliau ini tertarik dengan otomasi pembangunan infrastruktur.

Pada tahun 2013, Michael DeHaan, Timothy Gerla, dan Saïd Ziouani membentuk sebuah perusahan bernama AnsibleWorks, Inc yang ditujukan untuk memberikan support berbayar bagi proyek Ansible ini.

Saat ini ansible masih bersifat opensource namun ada pula beberapa bagian nya yang bersifat proprietary.

Jantung dari Ansible ini menggunakan Python sebagai bahasa pemrograman nya, dan menfaatkan YAML sebagai deklarasi proses dan setting apa saja yang ingin diterapkan ke infrasktruktur.

Berbeda dengan solusi yang lain seperti Chef, Puppet, Salt, dan CFEngine.  Ansible tidak memerlukan agent atau biasa disebut agentless. Sehingga kita tidak perlu melakukan installasi apa-apa di infrastruktur yang ingin kita konfigurasi. Ansible akan berkomunikasi dengan infrastruktur yang akan dikontrol melalui protokol SSH. Ansible akan mengirimkan skrip yang sebelumnya telah dikompilasi dari hasil interpretasi  file YAML, mengirimkannya ke target, mengeksekusi hasil kompilasi tersebut dan mengembalikan status eksekusi ke pengontrol nya berupa data JSON.

Pada dunia Ansible ini terdapat dua jenis entitas yaitu Control Node atau Master dan Target Node atau Inventory. Control node akan bertindak sebagai pengirim konfigurasi sedangkan Target Node adalah penerima konfigurasi. Dengan arsitektur agentless-nya Ansible tidak mengharuskan adanya Control node yang terpusat. Kita dapat membangun lebih dari satu Control node, dan ini tentu memudahkan saat proses pemulihan bencana (Disaster Recovery).

Ketika Ansible ini dibangun, developernya menentukan beberapa design goal yang menjadi acuan pengembangan, seperti:

  • Minimal, Sistem manajemen seharusnya tidak menambahkan kerumitan tambahan pada lingkungan sistem yang sudah ada.
  • Konsisten, dengan Ansible pengguna harus dapat membuat sebuah lingkungan sistem yang konsisten.
  • Aman, Ansible tidak membutuhkan agen, hanya Python dan SSH saja. Hal ini mampu mengurangi attach surface bila dibandingkan dengan solusi yang menggunakan agen. Karena agen rentan juga untuk dihijack.
  • Reliable, Skrip ansbile yang ditulis dengan baik dan hati-hati dapat dijalankan berkali-kali tanpa efek samping
  • Mudah dipelajari.

Kalau kita cermati lagi dari ke-lima design goal yang diajukan oleh pengembang Ansible teresebut, terselip lah sebuah kata-kata “Reliable”. Reliable di sini terkait sekali dengan tidak adanya efek samping dari eksekusi skrip Ansbile berkali-kali.

Apa sebenarnya arti dari kata “tidak adanya efek samping” ? Sebenarnya untuk setiap operasi yang dilakukan oleh Ansible, Ansible akan mengumpulkan status terkini dari sistem untuk kemudian dicocokan dengan jenis operasi apa yang ingin dilakukan.

Kita ambil contoh, proses installasi paket atau aplikasi dari repositori sistem operasi. Proses installasi paket tidak akan terjadi dua kali walau kita mengeksekusi operasi ansbile nya dua kali. Hal ini dapat terjadi karena sebelum Ansible benar-benar menjalankan perintah installasi, Ansible akan mengecek dulu pada data info sistem apakah paket yang akan diinstall itu sudah ada atau belum.

Ansible ini dikembangkan dengan sistem modular. Modul-modul ini lah yang kita panggil di dalam file YAML untuk kemudian dikompilasi oleh Ansbile menjadi perintah-perintah yang dimengerti sistem operasi. Dan Ansible punya sangat banyak modul-modul buiilt-in dan yang dikelola oleh komunitas.

Sampai di sini dulu bagian kedua dari tulisan saya tentang Ansible ini. Kita lanjut lagi ditulisan berikut nya.


Avatar photo

Bramandityo Prabowo

Suka makan dan tentu saja suka masak. Tertarik dengan Functional Programing, Distributed System, Network Security, Operating System Customization, Virtualization dan NoSQL. Language of choices nya adalah Python, Bash, Go, Erlang, Nimlang. Rust dan Ocaml.