Cara Membuat Template yang Memungkinkan untuk Membuat Konfigurasi Pada Node Terkelola - Bagian 7


Dalam Bagian 7 Seri Ansible ini, Anda akan mempelajari cara membuat dan menggunakan templat di Ansible untuk membuat konfigurasi khusus pada node terkelola. Templating di Ansible adalah cara yang mudah dan ramah untuk mendorong konfigurasi khusus ke node terkelola yang menjalankan sistem berbeda dengan sedikit pengeditan file pedoman.

Apa itu Templating di Ansible?

Untuk lebih memahami apa itu template, mari kita pertimbangkan seorang manajer TI yang membuat draf email untuk mengundang departemennya menghadiri pesta koktail. Email tersebut dikirimkan ke masing-masing anggota dan juga mengundang mereka untuk ikut bersama pasangannya.

Email telah disesuaikan sedemikian rupa sehingga isi email tetap sama, namun penerima dan nama pasangannya berbeda-beda. Email menjadi templat, sedangkan penerima dan masing-masing pasangannya adalah variabel.

Itu adalah contoh umum. Ansible menggunakan Jinja2 yang merupakan mesin templating modern untuk kerangka kerja Python yang digunakan untuk menghasilkan konten atau ekspresi dinamis. Templating sangat berguna saat membuat file konfigurasi khusus untuk beberapa server tetapi unik untuk masing-masing server.

Jinja2 menggunakan tanda kurung kurawal ganda {{ ... }} untuk mengapit variabel yang telah ditentukan. Untuk komentar, gunakan {{# #} dan untuk pernyataan bersyarat gunakan {% … %}.

Misalkan Anda memiliki model data VLAN di jaringan Anda dengan sistem host yang ingin Anda dorong ke masing-masing VLAN seperti yang ditunjukkan.

vlans:
  - id: 10
    name: LB
  - id: 20
    name: WB_01
  - id: 30
    name: WB_02
  - id: 40
    name: DB

Untuk merender konfigurasi ini, template jinja2 terkait yang disebut vlans.j2 akan muncul seperti yang ditunjukkan. Seperti yang Anda lihat, variabel vlan.id dan vlan.name diapit kurung kurawal.

vlan {{ vlan.id }}
  name {{ vlan.name }}

Jika semuanya digabungkan dalam buku pedoman yang menempatkan mesin host berbeda, ini akan muncul seperti yang ditunjukkan:

    - hosts
  tasks:
    - name: Rendering VLAN configuration
      template:
         src: vlans.j2
         dest: "vlan_configs/{{ inventory_hostname }}.conf"

Contoh 1: Mengonfigurasi Server Web di Distro Berbeda

Dalam contoh ini, kita akan membuat file index.html yang akan menampilkan informasi tentang nama host & OS dari 2 server web yang menjalankan CentOS & Ubuntu .

Mempersiapkan

Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 -  IP address: 173.82.115.165

Server web Apache telah diinstal di kedua server.

Untuk CentOS 7

Untuk Ubuntu 18.04

Jadi mari kita buat playbook test_server.yml seperti yang ditunjukkan:

---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777

Templat file Jinja kami adalah index.html.j2 yang akan dimasukkan ke file index.html di setiap server web. Selalu ingat untuk meletakkan ekstensi .j2 di akhir untuk menandakan bahwa itu adalah file jinja2.

Sekarang mari kita buat file template index.html.j2.

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

Templat ini adalah file HTML dasar dengan ansible_hostname dan ansible_os_family merupakan variabel bawaan yang akan diganti dengan nama host dan sistem operasi masing-masing server web di browser.

Sekarang, mari kita jalankan pedomannya.

ansible-playbook test_server.yml

Sekarang mari kita memuat ulang halaman web untuk server web CentOS 7 dan Ubuntu.

Untuk CentOS 7

Untuk Ubuntu 18.04

Seperti yang Anda lihat, informasi berbeda tentang nama host dan keluarga OS telah ditampilkan di setiap server. Dan betapa kerennya template Jinja2!

FILTER :

Terkadang, Anda mungkin memutuskan untuk mengganti nilai variabel dengan string yang muncul dengan cara tertentu.

Contoh 1: Membuat String Muncul dalam Huruf Besar/Huruf Kecil

Misalnya, pada contoh sebelumnya, kita dapat memutuskan untuk membuat variabel Ansible muncul dalam Huruf Besar. Untuk melakukannya, tambahkan nilai di atas variabel. Dengan cara ini nilai dalam variabel diubah ke format Huruf Besar.

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT

Demikian pula, Anda dapat mengonversi keluaran string menjadi huruf kecil dengan menambahkan argumen yang lebih rendah.

{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat

Contoh 2: Ganti String dengan yang Lain

Selain itu, Anda dapat mengganti string dengan yang lain.

Misalnya:

Judul filmnya adalah {{ movie_name }} => Judul filmnya adalah Ring.

Untuk mengganti output dengan string lain, gunakan argumen ganti seperti yang ditunjukkan:

Judul filmnya adalah {{ movie_name | replace (“Ring“, ”Heist ”) }} => Judul filmnya adalah Heist.

Contoh 3: Daftar dan Kumpulan Filter

Untuk mengambil nilai terkecil dalam array, gunakan filter min.

{{ [ 2, 3, 4, 5, 6, 7 ] | min }}	=>	2

Demikian pula, untuk mengambil angka terbesar, gunakan filter maks.

{{ [ 2, 3, 4, 5, 6, 7 ] | max }}	=>	7

Untuk menampilkan nilai unik, gunakan filter unik.

{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} =>	2, 3

Gunakan filter acak untuk mendapatkan angka acak antara 0 dan nilai.

{{ 50 | random }} =>  Some random number

LOOP :

Sama seperti dalam bahasa pemrograman, kita memiliki loop di Jinja2 yang Mungkin.

Misalnya, untuk menghasilkan file yang berisi daftar angka, gunakan perulangan for seperti yang ditunjukkan pada contoh di bawah ini:

Contoh 1:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{{ number }}
{% end for %}

Anda juga dapat menggabungkan perulangan for dengan pernyataan if-else untuk memfilter dan mendapatkan nilai tertentu.

Contoh 2:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{% if number == 5 %}
         {{ number }}
{% endif%}
{% endfor %}

Dan itu saja untuk kuliah ini. Bergabunglah dengan kami di topik berikutnya di mana kami akan mencoba bekerja dengan variabel dan fakta yang mungkin.