Cara Bekerja dengan Variabel dan Fakta yang Mungkin - Bagian 8


Kami telah menyebutkan variabel dalam seri Ansible ini dan hanya untuk sedikit menyegarkan pikiran Anda. Variabel, seperti halnya dalam banyak bahasa pemrograman, pada dasarnya adalah kunci yang mewakili suatu nilai.

Apa yang dimaksud dengan Nama Variabel yang Valid?

Nama variabel mencakup huruf, angka, garis bawah, atau gabungan keduanya atau semuanya. Namun perlu diingat bahwa nama variabel harus selalu diawali dengan huruf dan tidak boleh mengandung spasi.

Mari kita lihat beberapa contoh nama variabel yang valid dan tidak dapat diterima:

Contoh Nama Variabel yang Valid:

football 
foot_ball
football20 
foot_ball20

Contoh Nama Variabel Tidak Valid:

foot ball
20 
foot-ball

Mari kita bahas jenis-jenis variabel:

1. Variabel Pedoman

Variabel Playbook cukup mudah dan lugas. Untuk mendefinisikan variabel dalam playbook, cukup gunakan kata kunci vars sebelum menulis variabel Anda dengan lekukan.

Untuk mengakses nilai variabel, letakkan di antara kurung kurawal ganda yang diapit tanda kutip.

Berikut ini contoh buku pedoman sederhana:

- hosts: all
  vars:
    greeting: Hello world! 

  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ greeting }}"

Pada playbook di atas, variabel greeting diganti dengan nilai Hello world! saat playbook dijalankan. Playbook hanya mencetak pesan Halo dunia! saat dijalankan.

Selain itu, Anda dapat memiliki daftar atau array variabel seperti yang ditunjukkan:

Playbook di bawah menunjukkan variabel yang disebut benua. Variabel ini memiliki 5 nilai berbeda – nama benua. Masing-masing nilai ini dapat diakses dengan mudah menggunakan indeks 0 sebagai variabel pertama.

Contoh pedoman di bawah mengambil dan menampilkan Asia (Indeks 1).

- hosts: all
  vars:
    continents:
      - Africa
      - Asia
      - South America
      - North America
      - Europe
      
  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ continents [1] }}"

Daftar variabel juga dapat disusun seperti yang ditunjukkan:

vars:
    Continents: [Africa, Asia, South America, North America, Europe]

Untuk mencantumkan semua item dalam daftar, gunakan modul with_items. Ini akan mengulang semua nilai dalam array.

- hosts: all
  vars:
    continents: [Africa, Asia, South America, North America, Europe]

  tasks:
  - name: Ansible array variables example
    debug: 
      msg: "{{ item }}"
    with_items:
      - "{{ continents }}"

Tipe lain dari variabel Ansible adalah variabel kamus.

Variabel Kamus juga didukung dalam buku pedoman. Untuk mendefinisikan variabel kamus, cukup identifikasikan pasangan nilai kunci tepat di bawah nama variabel kamus.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 10.200.50.1
   vlans:
       id: 10
       port: 2

Pada contoh di atas, vlans adalah variabel kamus sedangkan id dan port adalah pasangan nilai kunci.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 
   vlans:
      id: 10
      port: 20

 tasks:
   name: Configure default gateway
   system_configs:
   default_gateway_ip: “{{ default_gateway  }}“


   name: Label port on vlan 10
   vlan_config:
	vlan_id: “{{ vlans[‘id’]  }}“
     port_id: 1/1/ {{ vlans[‘port’]  }}

Untuk port_id, karena kita memulai nilai dengan teks dan bukan variabel, tanda kutip tidak diperlukan untuk mengapit kurung kurawal.

2. Variabel Khusus

Ansible menyediakan daftar variabel yang telah ditentukan sebelumnya yang dapat direferensikan dalam templat dan buku pedoman Jinja2 tetapi tidak dapat diubah atau ditentukan oleh pengguna.

Secara kolektif, daftar variabel Ansible yang telah ditentukan sebelumnya disebut sebagai Fakta yang mungkin dan dikumpulkan saat pedoman dijalankan.

Untuk mendapatkan daftar semua variabel Ansible, gunakan modul setup dalam perintah ad-hoc Ansible seperti yang ditunjukkan di bawah ini:

ansible -m setup hostname

Ini menampilkan output dalam format JSON seperti yang ditunjukkan:

ansible -m setup localhost

Dari outputnya terlihat beberapa contoh variabel khusus Ansible antara lain:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

Ada banyak variabel khusus lain yang mungkin, ini hanyalah beberapa contoh.

Variabel berikut dapat digunakan dalam template Jinja2 seperti yang ditunjukkan:

<html>
<center>
   <h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
   <h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>

3. Variabel Persediaan

Terakhir, dalam daftar, kami memiliki variabel inventaris yang mungkin. Inventaris adalah file dalam format INI yang berisi semua host yang akan dikelola oleh Ansible.

Di inventaris, Anda dapat menetapkan variabel ke sistem host dan kemudian menggunakannya dalam buku pedoman.

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=ubuntu http_port=8080

Hal di atas dapat direpresentasikan dalam file YAML playbook seperti yang ditunjukkan:

---
   web_servers:
     web_server_1:
        ansible_user=centos
	   http_port=80

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

Jika sistem host berbagi variabel yang sama, Anda dapat menentukan grup lain dalam file inventaris agar tidak terlalu rumit dan menghindari pengulangan yang tidak perlu.

Misalnya:

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=centos http_port=80

Di atas dapat disusun sebagai:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

Dan dalam file YAML playbook, ini akan didefinisikan seperti yang ditunjukkan:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

Fakta yang Mungkin

Saat menjalankan playbook, tugas pertama yang dilakukan Ansible adalah pelaksanaan tugas pengaturan. Saya cukup yakin Anda pasti pernah menemukan hasilnya:

TASK:  [Gathering facts] *********

Fakta yang mungkin tidak lain hanyalah properti sistem atau informasi tentang node jarak jauh yang telah Anda sambungkan. Informasi ini mencakup arsitektur Sistem, versi OS, informasi BIOS, waktu dan tanggal sistem, waktu aktif sistem, alamat IP, dan informasi perangkat keras, dan masih banyak lagi.

Untuk mengetahui fakta tentang sistem apa pun cukup gunakan modul setup seperti yang ditunjukkan pada perintah di bawah ini:

ansible -m setup hostname

Misalnya:

ansible -m setup database_server

Ini mencetak sekumpulan besar data dalam format JSON seperti yang ditunjukkan:

Fakta yang mungkin berguna dalam membantu administrator sistem operasi mana yang harus dijalankan, misalnya, bergantung pada sistem operasi, mereka dapat mengetahui paket perangkat lunak mana yang perlu diinstal, dan bagaimana konfigurasinya, dll.

Fakta Khusus

Tahukah Anda juga bahwa Anda dapat membuat fakta khusus sendiri yang dapat dikumpulkan oleh Ansible? Ya kamu bisa. Jadi bagaimana Anda melakukannya? Mari beralih dan lihat caranya.

Langkah pertama adalah membuat direktori /etc/ansible/facts.d pada node yang dikelola atau node jarak jauh.

Di dalam direktori ini, buat file dengan ekstensi .fact. File ini akan mengembalikan data JSON ketika playbook dijalankan pada node kontrol Ansible, yang mencakup fakta-fakta lain yang diambil Ansible setelah playbook dijalankan.

Berikut ini contoh file fakta khusus bernama tanggal_waktu.fakta yang mengambil tanggal dan waktu.

mkdir -p /etc/ansible/facts.d
vim /etc/ansible/facts.d/date_time.fact

Tambahkan baris berikut di dalamnya.

#!/bin/bash
DATE=`date`
echo "{\"date\" : \"${DATE}\"}"

Simpan dan keluar dari file.

Sekarang tetapkan izin eksekusi:

chmod +x /etc/ansible/facts.d/date_time.fact

Sekarang, saya membuat buku pedoman tentang node kontrol Ansible yang disebut check_date.yml.

---

- hosts: webservers

  tasks:
   - name: Get custom facts
     debug:
      msg: The custom fact is {{ansible_local.date_time}}

Tambahkan file fakta ke variabel ansible_local. ansible_local menyimpan semua fakta khusus.

Sekarang jalankan playbook dan amati kemungkinan mengambil informasi yang disimpan di file fakta:

ansible_playbook check_date.yml

Kesimpulan

Ini membawa kita ke akhir tutorial tentang bekerja dengan variabel dan fakta yang mungkin.