Pengenalan Ansible
Berangkat dari permasalahan kenapa Ansible di ciptakan dan kita butuh memakai nya? Ketika kita konfigurasi server Linux maka kita akan melakukan remote SSH lalu melakukan task yang ingin kita konfigurasi.
Bagaimana kalau server linux yang kita miliki berjumlah puluhan,dengan konfigurasi yang sama? ada beberapa permasalahan yang mungkin kita temui.
Capek / Pegel
Ada perintah command yang terlewat
Perintah yang di jalankan tidak terdokumentasi dengan baik.
Ansible merupakan tools untuk mengotomatisasi tugas-tugas seperti membuat dan mengkonfigurasi resource linux, windows, database dll.
Kelebihan ansible adalah sifatnya agent-less, maksudnya itu tidak perlu menginsal agent di setiap server yang ingin di otomasti. cukup install ansible di laptop/komputer admin saja.
Cara kerja Ansible yaitu tugas tugas yang akan di jalankan dibungkus dalam sebuah module, setiap module mempunyai tugas kecil secara spesifik seperti copy file, install web server, atau create user.
Di Ansible juga ada nama nya konsep Inventory, yang dimana kita dapat mendefinisikan IP/Domain dalam satu file yang nanti nya Ansible akan membaca file Inventory tersebut sebelum membaca module.
Menginstall Ansible
Ansible berjalan diatas bahasa pemrograman Python. Khusus sistem operasi windows, Ansible menyarankan menggunakan WSL.
Untuk menginstall Ansible cukup ikuti dokumentasi ini.
Prepare Linux Server
untuk Server kita coba create melalui Terraform di Google Cloud Platform.
Jika sudah terbuat selanjutnya lakukan SSH ke server yang sudah dibuat.
Check apakah server sudah terinstall Python
$ python3 --version
Ansible Inventory
Seperti yang sudah di bahas sebelumnya ansible mengetahui server mana yang akan kita manage melalui file Inventory.
Ansible mendukung banyak sekali format penulisan file Inventory, yaitu format INI dan YAML.
Selanjutnya kita coba buat file dengan nama **Inventory,**dan isikan IP Public dari server yang akan di manage
inventory
//ip server dan private key
34.128.82.28 ansible_user=muhamaddani3004 ansible_ssh_private_key_file=./ssh-key/cehamot
lalu kita coba ping untuk memastikan koneksi ke server.
$ ansible 34.128.82.28 -i ./inventory -m ping
response yang di dapat adalah Success,berarti kita telah berhasil terhubung ke server melalui ansible.
Biasanya satu file inventory memiliki list ip/domain server, agar file inventory terlihat rapih kita dapat kelompokan dalam sebuah group.
Bahkan parameter yang sudah kita buat sebelumnya "sangat tidak clean" didefinisikan berulang-ulang, bagaimana kalau kita buat group variables.
[server_test]
34.128.82.28
[server_test:vars]
ansible_user=muhamaddani3004
ansible_ssh_private_key_file=./ssh-key/cehamot
dan command ping tetap
$ ansible 34.128.82.28 -i ./inventory -m ping
command sebelumnya menggunakan pattern ansible <pattern> <options>
-m atau -i itu adalah options
Pattern merupakan target host/group yang diinginkan.
ada beberapa cara penulisan pattern yang dapat di lihat disini
Ansible Config
Ansible config digunakan untuk mengkonfigurasi behavior ansible saat kita menjalankan perintah-perintah ansible.
Ansible config di tulis dengan format INI dengan nama ansible.cfg,dan ansible config ini memiliki hirarki dalam pembacaan nya. Disini
Penulisan konfigurasi di ansible config di kelompokan dalam sebuah Section.
jadi contoh nya seperti ini,
$ ansible server_test -i inventory -m ping
pada command sebelumnya kita selalu mendefinisikan option -i <file-inventory> saat memanggil file inventory, dengan menggunakan ansible.cfg kita bisa menyederhanakan dengan menambahkan key inventory di section defaults.
[default]
inventory=./inventory
host_key_checking=False
satu hal lagi yang cukup penting menambahkan line host_key_checking yang fungsinya untuk menghindari host key checking saat pertama kali konek ke server baru.
Ansible Module
Pada materi sebelumnya kita selalu menggunakan option -m ping, option yang kita gunakan tersebut nama nya module.
Module merupakan unit code untuk menjalankan suatu tugas tertentu.
Ansible punya banyak sekali module yang dapat kita gunakan dokumentasi.
Jika module di eksekusi langsung di sebut adhoc command.
ansible.builtin.add_host – Add a host (and alternatively a group) to the ansible-playbook in-memory inventory
ansible.builtin.apt – Manages apt-packages
ansible.builtin.apt_key – Add or remove an apt key
ansible.builtin.apt_repository – Add and remove APT repositories
ansible.builtin.assemble – Assemble configuration files from fragments
ansible.builtin.assert – Asserts given expressions are true
Setiap module dapat memiliki argument untuk kebutuhan module itu sendiri, argument ini juga sering di sebut sebagai parameter.
salah satu contoh seperti ini:
$ ansible server_test -m command "date"
$ ansible server_test -m copy -a "src=./file.txt dest=/tmp/"