Cara Membuat Drama dan Buku Pedoman yang Mungkin - Bagian 5
Dalam Bagian 5 Seri Ansible ini, kami akan menjelaskan cara membuat Permainan Ansible dan Playbook menggunakan modul Ansible.
Ansible dikirimkan dengan skrip mandiri yang disebut modul yang digunakan dalam playbook untuk pelaksanaan tugas khusus pada node jarak jauh.
Modul berguna untuk mengotomatiskan tugas-tugas seperti pengelolaan paket, pengarsipan, dan penyalinan file, dan masih banyak lagi. Mereka memungkinkan Anda melakukan penyesuaian pada file konfigurasi dan mengelola perangkat seperti router, switch, penyeimbang beban, firewall, dan sejumlah perangkat lainnya.
Tujuan subtopik ini adalah memberi Anda gambaran umum tentang berbagai tugas yang dapat diselesaikan dengan Modul yang mungkin:
Manajemen Paket di Linux
Manajemen paket adalah salah satu tugas paling penting dan sering dilakukan oleh administrator sistem. Ansible dikirimkan bersama modul yang membantu Anda menjalankan tugas manajemen paket baik di sistem berbasis RedHat dan Debian.
Mereka relatif mudah ditebak. Terdapat modul apt untuk manajemen paket APT berbasis Debian, modul yum lama untuk manajemen paket YUM dan modul dnf yang terkait dengan distribusi RHEL yang lebih baru .
Berikut adalah beberapa contoh bagaimana modul dapat digunakan dalam buku pedoman:
Contoh 1: Menginstal Server Web Apache di RHEL 8
---
- name: install Apache webserver
hosts: webservers
tasks:
- name: install httpd
dnf:
name: httpd
State: latest
Contoh 2: Menginstal Server Web Apache di Debian 10
---
- name: install Apache webserver
hosts: databases
tasks:
- name: install Apache webserver
apt:
name: apache2
State: latest
Modul Layanan
Modul layanan memungkinkan administrator sistem untuk memulai, menghentikan, memperbarui, meningkatkan, dan memuat ulang layanan pada sistem.
Contoh 1: Memulai Server Web Apache
---
- name: Start service httpd, if not started
service:
name: httpd
state: started
Contoh 2: Menghentikan Server Web Apache
---
- name: Stop service httpd
service:
name: httpd
state: stopped
Contoh 3: Memulai Ulang Antarmuka Jaringan enp2s0
---
- name: Restart network service for interface eth0
service:
name: network
state: restarted
args: enp2s0
Salin Modul
Seperti namanya, modul salin menyalin file dari satu lokasi di mesin jarak jauh ke lokasi berbeda di mesin yang sama.
Contoh 1: Menyalin File dari Lokal ke Remote Linux
---
- name: Copy file with owner and permissions
copy:
src: /etc/files/tecmint.conf
dest: /srv/tecmint.conf
owner: tecmint
group: tecmint
mode: '0644'
Playbook menyalin file konfigurasi tecmint.conf dari direktori /etc/files/ ke direktori /srv/ sebagai tecmint pengguna dengan izin 0644.
Izin juga dapat direpresentasikan menggunakan representasi simbolik seperti yang ditunjukkan pada baris terakhir.
Contoh 2: Menyalin File dari Lokal ke Remote Linux
---
- name: Copy file with owner and permissions
copy:
src: /etc/files/tecmint.conf
dest: /srv/tecmint.conf
owner: tecmint
group: tecmint
mode: u=rw, g=r, o=r
Izin pada contoh sebelumnya dapat direpresentasikan seperti yang ditunjukkan pada baris terakhir, Pengguna diberi izin baca dan tulis, grup diberi izin menulis, dan izin lainnya dunia diberi izin membaca.
Modul Berkas
Modul file digunakan untuk melakukan banyak operasi file termasuk membuat file & direktori, menetapkan izin file, dan mengatur symlink.
Contoh 1: Lakukan Izin File Linux
---
- name: Change file ownership, group, and permissions
file:
path: /etc/tecmint.conf
owner: tecmint
group: tecmint
mode: '0644'
Pemutaran di atas membuat file bernama tecmint.conf di direktori /etc yang menyetel izin ke 0644.
Contoh 2: Hapus File Linux
---
- name: Remove file (delete file)
file:
path: /etc/tecmint.conf
state: absent
Ini menghapus atau menghapus file tecmint.conf.
Contoh 3: Buat Direktori
---
- name: create a directory if it doesn’t exist
file:
path: /etc/mydirectory
State: directory
mode: '0777'
Ini akan membuat direktori di direktori /etc yang mengatur izin ke 0777.
Contoh 4: Menghapus Direktori Secara Rekursif
---
- name: Recursively deleting a directory
file:
path: /etc/tecmint.conf
state: absent
Permainan di atas secara rekursif menghapus direktori.
Modul Lineinfile
Modul lineinfile berguna ketika Anda ingin mengubah satu baris dalam sebuah file. Itu dapat menggantikan jalur yang ada.
Contoh 1: Memanipulasi File di Linux
---
- name: Ensure SELinux is set to enforcing mode
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=disabled
Permainan di atas menetapkan nilai SELINUX menjadi dinonaktifkan.
SELINUX=disabled
Contoh 2: Mengubah File di Linux
---
- name: Add a line to a file if the file does not exist, without passing regexp
lineinfile:
path: /etc/hosts
line: 10.200.50.51 linux-console.net
create: yes
Ini menambahkan entri 10.200.50.51 linux-console.net ke file /etc/hosts.
Modul Arsip
Modul Arsip digunakan untuk pembuatan arsip terkompresi dari satu atau beberapa file. Ini mengasumsikan sumber kompresi ada di tujuan target. Setelah diarsipkan, file sumber nantinya dapat dihapus atau dihapus menggunakan pernyataan remove=True
.
Contoh 1: Buat File Arsip
- name: Compress directory /path/to/tecmint_dir/ into /path/to/tecmint.tgz
archive:
path: /path/to/tecmint_dir
dest: /path/to/tecmint.tgz
This compresses the /path/to/tecmint_dir directory to /path/to/tecmint.tgz
Contoh 2: Buat File Arsip dan Hapus
- name: Compress regular file /path/to/tecmint into /path/to/foo.gz and remove it
archive:
path: /path/to/tecmint
dest: /path/to/tecmint.tgz
remove: yes
Dalam pemutaran di atas, file sumber /path/to/tecmint dihapus setelah pengarsipan selesai.
Contoh 3: Membuat File Arsip
- name: Create a bz2 archive of /path/to/tecmint
archive:
path: /path/to/tecmint
format: bz2
Ini akan membuat file terkompresi dalam format bz2 dari file /path/to/tecmint.
Modul Git
Modul ini mengelola git checkout dari repositori perangkat lunak.
Contoh 1: Periksa Repositori Git
- git:
repo: 'https://foosball.example.org/path/to/repo.git'
dest: /srv/checkout
version: release-0.22
Modul Komando
Salah satu modul yang paling umum digunakan, modul perintah mengambil nama perintah dan kemudian diikuti dengan daftar argumen. Perintahnya diteruskan dengan cara yang sama seperti Anda mengetik di shell Linux.
Contoh 1: Jalankan Perintah
- name: Executing a command using the command module
command: cat helloworld.txt
Contoh 2: Periksa Uptime Linux Jarak Jauh
---
- name: Check the remote host uptime
hosts: servers
tasks:
- name: Execute the Uptime command over Command module
register: uptimeoutput
command: "uptime"
- debug:
var: uptimeoutput.stdout_lines
Modul perintah mengambil waktu aktif server jarak jauh.
Variabel untuk Mengambil Hasil Perintah yang Berjalan
Biasanya, pedoman Ansible digunakan untuk menjalankan tugas pada host terkelola tanpa menampilkan output pada baris perintah. Namun, ada kalanya Anda mungkin diminta untuk menangkap keluaran atau hasilnya. Di bagian ini, kami memandu Anda tentang cara menangkap keluaran pedoman dalam sebuah variabel dan kemudian menampilkannya.
Register yang memungkinkan digunakan untuk menangkap keluaran tugas dan menyimpannya sebagai variabel. Variabel tersebut selanjutnya akan berisi stdout tugas.
Sebagai contoh, mari kita asumsikan bahwa Anda ingin memeriksa penggunaan disk dari node yang dikelola di masing-masing direktori root menggunakan perintah df -Th /
. Anda akan menggunakan modul 'command'
untuk mendefinisikan perintah dan 'register'
untuk menyimpan output std dalam sebuah variabel.
Untuk menampilkan perintah, Anda akan menggunakan modul 'debug'
bersama dengan nilai kembalian stdout.
---
- hosts: all
become: yes
tasks:
- name: Execute /boot usage on Hosts
command: 'df -Th /'
register: df
- debug: var=df.stdout
Sekarang, mari kita jalankan pedomannya. Dalam hal ini, kami menamai playbook kami check_disk_space.yml.
ansible-playbook check_disk_space.yml
Seperti yang Anda lihat, hasilnya campur aduk dan menyulitkan untuk ditindaklanjuti.
Untuk menyelaraskan keluaran dan membuatnya lebih mudah dibaca, ganti nilai kembalian stdout dengan stdout_lines.
---
- hosts: all
become: yes
tasks:
- name: Execute /boot usage on Hosts
command: 'df -Th /'
register: df
- debug: var=df.stdout_lines
Gunakan Persyaratan untuk Mengontrol Eksekusi Putar
Sama seperti dalam bahasa pemrograman, pernyataan kondisional digunakan ketika lebih dari satu hasil yang mungkin terjadi. Mari kita lihat beberapa pernyataan kondisional yang umum digunakan dalam buku pedoman Ansible.
Pernyataan kapan
Terkadang, Anda mungkin ingin melakukan tugas pada node tertentu dan bukan pada node lain. Pernyataan kondisional 'when'
cukup mudah digunakan dan diimplementasikan dalam buku pedoman. Saat menggunakan klausa 'when'
cukup deklarasikan kondisi yang berdekatan dengan klausa seperti yang ditunjukkan:
when: condition
Jika kondisinya terpenuhi, maka tugas dilakukan pada sistem jarak jauh.
Mari kita lihat beberapa contoh:
Contoh 1: Menggunakan Operator When
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian”
Permainan di atas menginstal server web Nginx pada host yang menjalankan distro keluarga Debian.
Anda juga dapat menggunakan operator OR
dan AND
di samping pernyataan kondisional kapan.
Contoh 2: Menggunakan Operator AND dengan Kapan
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian” and
ansible_distribution_version == “18.04”
Saat menggunakan operator AND
, kedua pernyataan harus dipenuhi agar tugas dapat dijalankan.
Permainan di atas menginstal Nginx pada Nodes yang menjalankan OS keluarga Debian yaitu versi 18.04. Jelas sekali, ini adalah Ubuntu 18.04.
Contoh 3: Menggunakan Operator OR dengan Kapan
Dengan operator OR
, tugas dijalankan jika salah satu kondisi terpenuhi.
---
- hosts: all
tasks:
- name: Install Nginx on Debian
apt: name=nginx state=present
when: ansible_os_family == “Debian” or
Ansible_os_family == “SUSE”
Permainan di atas menginstal server web Nginx pada OS keluarga Debian atau SUSE atau keduanya.
CATATAN: Selalu pastikan untuk menggunakan tanda persamaan ganda ==
saat menguji suatu kondisi.
Persyaratan dalam loop
Persyaratan juga dapat digunakan dalam satu lingkaran. Katakanlah misalnya Anda memiliki daftar beberapa paket yang perlu diinstal pada node jarak jauh.
Pada playbook di bawah ini, kita memiliki array bernama packages yang berisi daftar paket yang perlu diinstal. Tugas-tugas ini akan dilakukan satu demi satu jika klausa wajib disetel ke True.
---
- name: Install Software packages
hosts: all
vars:
packages:
• name: nginx
required: True
• name: mysql
required: True
• name: apache
required: False
tasks:
• name: Install “{{ item.name }}”on Debian
apt:
name: “{{ item.name }}”
state: present
When: item.required == True
loop: “{{ packages }}”
Konfigurasikan Penanganan Kesalahan
Terkadang, tugas gagal saat menjalankan buku pedoman. Anggaplah Anda menjalankan 5 tugas di 3 server seperti yang ditunjukkan pada pedoman di bawah. Jika kesalahan terjadi pada tugas 3 (Memulai MySQL) di server 2, Ansible akan berhenti menjalankan tugas yang tersisa di server 2 dan mencoba menyelesaikan tugas yang tersisa di server lainnya.
---
- name: Install Software packages
hosts: server1, server2, server3
tasks:
- name: Install dependencies
<< some code >>
- name: Install MySQL database
<< some code >>
- name: Start MySQL
<< some code >>
- name: Install Nginx
<< some code >>
- name: Start Nginx
<< some code >>
Jika Anda menginginkan konsistensi dalam eksekusi playbook, misalnya menghentikan eksekusi playbook, jika salah satu server gagal, tambahkan opsi.
---
- name: Install Software packages
hosts: server1, server2, server3
any_errors_fatal: true
tasks:
Dengan cara ini, jika satu tugas gagal di satu server, Ansible akan menghentikan eksekusi seluruh pedoman di semua server dan keluar.
Jika Anda ingin playbook mengabaikan kesalahan dan melanjutkan menjalankan rangkaian tugas lainnya, gunakan opsi ignore_errors: True.
---
- name: Install Software packages
hosts: server1, server2, server3
tasks:
- name: Install dependencies
<< some code >>
ignore_errors: True
Buat Playbook untuk Mengonfigurasi Sistem ke Keadaan Tertentu
Di bagian ini, kita melihat beberapa opsi tambahan yang tersedia saat menjalankan playbook.
Mari kita mulai dengan mode Periksa atau opsi Lari uji coba. Opsi uji coba atau mode pemeriksaan digunakan saat menjalankan buku pedoman untuk memeriksa apakah ada kesalahan yang akan ditemui dan apakah ada perubahan yang akan dilakukan pada host yang dikelola. Namun, hal ini tidak membuat perubahan apa pun pada node jarak jauh.
Misalnya, untuk menjalankan dry run playbook bernama httpd.yml
yang menginstal dan memulai pengoperasian server web Apache:
ansible-playbook httpd.yml --check
Opsi lain yang perlu kita perhatikan adalah opsi --start-at-task
. Ini digunakan ketika menentukan nama tugas yang harus dimulai atau dimulainya buku pedoman.
Mari kita ambil contoh: Buku pedoman di bawah ini menjelaskan 2 tugas: Permainan pertama menginstal server web Apache dan yang kedua menginstal utilitas htop.
---
- name: Install httpd
hosts: all
tasks:
yum:
name: httpd
state: Installed
- name: Install htop
yum:
name: htop
state: started
Jika Anda ingin melewatkan instalasi server web Apache dan sebagai gantinya menginstal utilitas htop, jalankan:
ansible-playbook playbook.yml --start-at-task “Install htop”
Terakhir, Anda dapat menandai tugas atau permainan Anda dengan menambahkan opsi tag ke buku pedoman Anda seperti yang ditunjukkan. Ini berguna ketika Anda memiliki pedoman yang cukup besar dan Anda ingin menjalankan tugas tertentu dari keseluruhan pedoman.
---
- name: Install httpd
tags: Install and start
hosts: all
tasks:
yum:
name: httpd
state: Installed
tags: Install
• service:
name: httpd
state: started
ansible-playbook playbook.yml -tags "Install"
Untuk menghilangkan tag gunakan opsi --skip-tags
seperti yang ditunjukkan.
ansible-playbook playbook.yml --skip-tags "Install"
Kesimpulan
Dalam topik ini, kami membawa Anda mempelajari modul-modul yang umum digunakan di Ansible, cara mengambil stdout dari eksekusi playbook untuk dianalisis, menggunakan kondisional di playbook, dan cara mengelola kesalahan yang mungkin terjadi saat menjalankan tugas. Terakhir, kami merangkum konfigurasi pedoman dan bagaimana Anda dapat menggunakan opsi tambahan untuk memutuskan tugas mana yang akan dijalankan jika Anda tidak ingin menjalankan seluruh pedoman.