
Ansible mendukung evaluasi bersyarat sebelum menjalankan tugas tertentu pada host target. Jika kondisi yang ditetapkan benar, Ansible akan melanjutkan dan melakukan tugas. Jika kondisinya tidak benar (tidak terpenuhi), Ansible akan melewati tugas yang ditentukan.
Untuk menerapkan kondisi di Ansible, kami menggunakan kata kunci when. Kata kunci mengambil ekspresi Boolean berdasarkan nilai atau variabel dari tugas atau fakta sebelumnya yang dikumpulkan dari host jarak jauh.
Panduan ini akan mengajarkan Anda bagaimana menerapkan kondisi di playbook Ansible menggunakan kata kunci when.
Mungkin Saat Bersyarat: Penggunaan Dasar
Kata kunci when menggunakan sintaks sederhana:
when: (boolean condition)
Pastikan untuk melewati kondisi yang bernilai benar atau salah.
Sebagai contoh:
when: ansible_pkg_mgr == "yum"
when: ansible_user_shell" == "/bin/bash"
Jika Anda ingin menggabungkan beberapa kondisi, Anda dapat menggunakan operator logika seperti dan, atau, dan tidak.
when: (condition1) and (condition2)
when: (condition1) or (condition2)
Untuk memahami bagaimana menggunakan kata kunci Ansible when, kita akan menggunakan contoh-contoh praktis.
Contoh 1
Contoh pertama akan membuat user jika user yang ditentukan tidak ada di host jarak jauh.
---
- hosts: all
gather_facts: no
become: true
tasks:
- name: checkifdirectoryexist
stat:
path: /home/ubuntu
register: dir
- name: createfileifdirectoryexists
file:
path: /home/ubuntu/file.txt
state: touch
when: dir.stat.exists
Contoh di atas dimulai dengan memeriksa apakah direktori home user ubuntu tersedia. Kami kemudian menggunakan kondisi ketika untuk membuat file teks jika direktori tersedia.
Contoh 2
Contoh berikutnya mematikan semua host jarak jauh Ubuntu menggunakan kondisi ketika.
---
- hosts: all
gather_facts: yes
become: true
tasks:
- name: shutdownUbuntuservers
command: /sbin/shutdown-tnow
when: ansible_facts['os_family']=="Ubuntu"
Dalam contoh di atas, kami menggunakan fakta yang dikumpulkan untuk mengevaluasi apakah server berasal dari keluarga Ubuntu. Jika benar, matikan server.
Contoh 3
Pada contoh di bawah ini, kami menggabungkan dua kondisi yang menggunakan operator dan.
---
- hosts: all
gather_facts: yes
become: true
tasks:
- name: Installapacheserver
ansible.builtin.package:
name: httpd
state: latest
when: (ansible_facts['os_family']=="Debian")and
(ansible_facts['ansible_distribution_major_version']==10)
Contoh di atas memeriksa apakah host adalah host Debian dan apakah versi distribusinya sama dengan Debian 10.
Contoh 4
Kami menginstal server web Apache di buku pedoman di bawah ini jika keluarga host adalah host Debian atau Ubuntu.
Buku pedoman menggunakan logika atau operator.
---
- hosts: all
gather_facts: yes
become: true
tasks:
- name: Installapacheserver
ansible.builtin.package:
name: httpd
state: latest
when: (ansible_facts['os_family']=="Debian")or
(ansible_facts['os_family']=="Ubuntu")
Contoh 5
Perhatikan playbook di bawah ini yang mengupdate server Nginx ke versi terbaru dengan menggunakan operator not.
---
- hosts: all
- shell: /sbin/nginx-v2>&1
register: version
gather_facts: yes
become: true
tasks:
- name: Installapacheserver
ansible.builtin.package:
name: nginx
state: latest
when: ('"nginx/1.19.0"notinversion.stdout')
Jika output dari server Nginx bukan versi saat ini, instal versi paket saat ini.
Kesimpulan
Dalam panduan ini, kami membahas cara bekerja dengan conditional di Ansible menggunakan kata kunci when.
Terima kasih telah membaca!