Tutorial ansible roles
Last updated: April 16, 2020
Apa itu Ansible Role ?
Di Ansible, "roles" merujuk pada unit organisasi yang digunakan untuk mengelompokkan dan mengatur konfigurasi, tugas, dan file yang terkait dalam lingkungan Ansible. Roles digunakan untuk memecah konfigurasi menjadi komponen yang lebih kecil dan dapat digunakan kembali, sehingga mempermudah pengelolaan konfigurasi sistem yang kompleks.
Kegunaan Ansible Role
Kegunaan Roles di Ansible adalah sebagai berikut:
-
Modularitas: Roles memungkinkan Anda untuk membagi konfigurasi sistem menjadi bagian-bagian yang lebih kecil dan terorganisir. Setiap role dapat mewakili fungsionalitas atau peran yang berbeda dalam sistem, seperti web server, database server, atau load balancer. Hal ini membuat konfigurasi lebih mudah diorganisir, dipelihara, dan dimodifikasi.
-
Reusabilitas: Roles memungkinkan penggunaan kembali konfigurasi yang telah ditentukan. Dengan memisahkan peran dan tanggung jawab masing-masing role, Anda dapat dengan mudah menggabungkan dan menerapkan role yang sama ke host yang berbeda dalam infrastruktur Anda. Ini membantu menghemat waktu dan upaya dalam pengelolaan konfigurasi.
-
Pembagian tanggung jawab: Roles memungkinkan tim yang bekerja sama membagi tanggung jawab dalam pengembangan konfigurasi. Setiap anggota tim dapat bertanggung jawab atas pengembangan, pemeliharaan, dan pengujian role tertentu. Dengan demikian, memudahkan kolaborasi dan mempercepat pengembangan infrastruktur.
-
Pengorganisasian File: Roles membantu mengorganisasi file dan direktori yang terkait dengan konfigurasi sistem. Setiap role memiliki struktur direktori sendiri, termasuk file-file seperti tugas (tasks), template, file konfigurasi, modul, dan sebagainya. Hal ini membantu mengatur dan membedakan berbagai komponen konfigurasi dalam proyek Anda.
Studi kasus ansible role
Prasyarat
Sebelum masuk ke materi ini, pastikan sudah mengintsall ansible dan menyiapkan setidaknya 2 server 1 sebagai controller dan 1 sebagai managed server yang akan di install Apache2. Saya sudah menyiapkan server dengan menggunakan Vagrant, kalian bisa ikuti di materi sebelumnya.
Membuat Working direktori
Sebelum memulai, pertama buat terlebih dahulu direktori yang akan digunakan sebagai tempat untuk menyimpan beberapa konfigurasi ansible.
lrmn7@ubuntu-controller:~$ mkdir ansible-role
lrmn7@ubuntu-controller:~$ cd ansible-role
Membuat inventory ansible
Kemudian buat inventory ansible
vim inventory
[managed]
ubuntu-managed
Membuat konfigurasi ansible
Silahkan buat konfigurasi ansible sesuai dibawah ini, pastikan usernya menyesuaikan user kalian yang sudah diberi hak akses sudo baik di controller atau managed server:
vim ansible.cfg
[defaults]
inventory = ./inventory
remote_user = lrmn7
Membuat roles
Silahkan buat folder roles dengan struktur file seperti dibawah ini
- 📁roles
- 📁files
- 📁html
- 📄index.html
- 📁handlers
- 📄main.yml
- 📁tasks
- 📄main.yml
- 📁templates
- 📄roles.conf.j2
Berikut adalah isi file roles/file/html/index.html
Belajar ansible roles
Kemudian, ini adalah isi file roles/handlers/main.yml
---
# handlers file for roles
- name: restart apache2
service:
name: apache2
state: restarted
Selanjutnya, ini adalah isi file roles/tasks/main.yml
- name: Ensure apache2 is installed
apt:
name: apache2
state: latest
- name: Ensure apache2 is started and enabled
service:
name: apache2
state: started
enabled: true
- name: Vhost file is installed
template:
src: roles/templates/roles.conf.j2
dest: /etc/apache2/sites-available/roles.conf
owner: root
group: root
mode: 0644
- name: Enable vhost
command: a2ensite roles.conf
notify:
- restart apache2
- name: HTML content is installed in managed hosts
copy:
src: roles/files/html/index.html
dest: "/var/www/html/index.html"
Langkah selanjutnya isi file roles/templates/roles.conf.j2
<VirtualHost *:80>
ServerAdmin webmaster@roles.lrmn7
ServerName roles.lrmn7
ErrorLog ${APACHE_LOG_DIR}/roles.lrmn7-error.log
CustomLog ${APACHE_LOG_DIR}/roles.lrmn7-access.log combined
DocumentRoot /var/www/html/roles.lrmn7/
<Directory /var/www/html/roles.lrmn7/>
Options -Indexes +FollowSymLinks +Includes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Membuat playbook roles.yml
Silahkan buat file roles.yml
dan isi seperti dibawah ini
- name: Use role playbook
hosts: managed
become: true
pre_tasks:
- name: pre_tasks message
debug:
msg: "Ensure web server configuration."
roles:
- roles
post_tasks:
- name: post_tasks message
debug:
msg: "Web server is configured."
Jika sudah semua, maka struktur direktorinya akan seperti ini
- 📁roles
- 📁files
- 📁html
- 📄index.html
- 📁handlers
- 📄main.yml
- 📁tasks
- 📄main.yml
- 📁templates
- 📄roles.conf.j2
- 📄ansible.cfg
- 📄inventory
- 📄roles.yml
Jalankan ansible playbook
Silahkan jalankan ansible playbook dengan mengetikan perintah
ansible-playbook roles.yml
Maka ansible akan menjalankannya
lrmn7@ubuntu-controller:~/ansible-role$ ansible-playbook roles.yml
PLAY [Use role playbook] ************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [ubuntu-managed]
TASK [pre_tasks message] ************************************************************************************************************************
ok: [ubuntu-managed] => {
"msg": "Ensure web server configuration."
}
TASK [roles : Ensure apache2 is installed] ******************************************************************************************************
ok: [ubuntu-managed]
TASK [roles : Ensure apache2 is started and enabled] ********************************************************************************************
ok: [ubuntu-managed]
TASK [roles : Vhost file is installed] **********************************************************************************************************
ok: [ubuntu-managed]
TASK [roles : Enable vhost] *********************************************************************************************************************
changed: [ubuntu-managed]
TASK [roles : HTML content is installed in managed hosts] ***************************************************************************************
ok: [ubuntu-managed]
RUNNING HANDLER [roles : restart apache2] *******************************************************************************************************
changed: [ubuntu-managed]
TASK [post_tasks message] ***********************************************************************************************************************
ok: [ubuntu-managed] => {
"msg": "Web server is configured."
}
PLAY RECAP **************************************************************************************************************************************
ubuntu-managed : ok=9 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Cek server ubuntu-managed
Langkah terakhir silahkan ketikan perintah
curl ubuntu-managed
Jika tampil seperti dibawah maka tutorial kali ini berhasil
lrmn7@ubuntu-controller:~/ansible-role$ curl ubuntu-managed
Belajar ansible roles