Press ESC to close

Menggunakan Template Jinja2 di Ansible

WhatsAppTelegramFacebookXThreadsCopy Link

Pernahkah Anda merasa repot harus menulis file konfigurasi yang berbeda untuk setiap server di Ansible? Atau bingung bagaimana cara membuat satu file template yang bisa menyesuaikan nilai variabel secara otomatis? Tenang, Anda tidak sendirian.

Banyak pengguna baru Ansible sering menemui kesulitan saat ingin membuat konfigurasi yang dinamis. Mereka tahu bahwa Ansible bisa menggunakan Jinja2, tetapi tidak tahu harus mulai dari mana. Akibatnya, banyak yang menyalin file konfigurasi satu per satu — cara yang tentu saja tidak efisien.

Artikel ini akan menjadi solusi Anda. Kita akan membahas cara menggunakan Template Jinja2 di Ansible secara lengkap, mulai dari konsep dasarnya hingga praktik membuat dan menerapkan template. Setelah membaca panduan ini, Anda akan mampu:

  • Memahami fungsi dan konsep dasar Jinja2 di Ansible.
  • Membuat file template .j2 yang dinamis.
  • Menggunakan modul template untuk menerapkan hasil render ke server.
  • Menerapkan tips praktis agar tidak terjadi error saat rendering.

Apa Itu Jinja2 di Ansible?

Jinja2 adalah template engine yang digunakan oleh Ansible untuk menghasilkan file dinamis berdasarkan variabel. Dengan Jinja2, Anda bisa membuat satu file konfigurasi yang menyesuaikan isi secara otomatis tergantung nilai variabel yang Anda tentukan.

Misalnya, Anda ingin membuat file konfigurasi Nginx dengan nama domain dan port yang berbeda di setiap server. Dengan Jinja2, Anda cukup membuat satu template dan Ansible akan mengisi nilainya secara otomatis.

Format dasar dalam file Jinja2 adalah:

  • {{ variable }} → untuk menampilkan nilai variabel.
  • {% statement %} → untuk logika seperti if, for, dan sebagainya.

1. Menyiapkan Struktur Direktori Ansible

Langkah pertama, pastikan Anda memiliki struktur direktori proyek Ansible seperti berikut:

project/
├── inventory
├── playbook.yml
└── templates/
    └── nginx.conf.j2

Folder templates/ adalah tempat untuk menyimpan semua file Jinja2.


2. Membuat File Template Jinja2

Buat file baru bernama nginx.conf.j2 di dalam folder templates/.

Isi dengan contoh konfigurasi berikut:

server {
    listen {{ nginx_port }};
    server_name {{ server_name }};

    location / {
        root /var/www/{{ server_name }};
        index index.html;
    }
}

Di sini:

  • {{ nginx_port }} dan {{ server_name }} adalah variabel dinamis.
  • Nilainya akan diambil dari variabel yang Anda tentukan di playbook atau file vars.

3. Menambahkan Variabel di Playbook

Sekarang buka atau buat file playbook.yml:

---
- name: Deploy konfigurasi Nginx menggunakan template Jinja2
  hosts: webservers
  vars:
    nginx_port: 8080
    server_name: example.com
  tasks:
    - name: Salin template konfigurasi Nginx
      template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/conf.d/default.conf

Penjelasan:

  • Modul template akan membaca file .j2, menggantikan variabel dengan nilainya, lalu menulis hasil akhirnya ke lokasi dest.
  • Anda bisa mengganti nilai variabel sesuai host, group, atau kondisi tertentu.

4. Menggunakan Variabel dari Inventory atau Host Vars

Daripada menulis variabel langsung di playbook, Anda bisa mendefinisikannya di file inventory atau host_vars. Contoh:

inventory

[webservers]
server1 ansible_host=192.168.1.10 nginx_port=8080 server_name=server1.local
server2 ansible_host=192.168.1.11 nginx_port=9090 server_name=server2.local

Sekarang, template akan otomatis menyesuaikan port dan domain setiap server tanpa Anda ubah secara manual.


5. Menjalankan Playbook

Jalankan perintah berikut untuk menguji hasilnya:

ansible-playbook -i inventory playbook.yml

Jika berhasil, file /etc/nginx/conf.d/default.conf di setiap server akan berisi hasil render sesuai variabelnya.


6. Menambahkan Logika dalam Template

Selain menampilkan variabel, Jinja2 juga mendukung logika seperti if, for, dan default. Misalnya:

server {
    listen {{ nginx_port | default(80) }};
    server_name {{ server_name | default('localhost') }};

    {% if enable_ssl %}
    listen 443 ssl;
    ssl_certificate /etc/ssl/{{ server_name }}.crt;
    ssl_certificate_key /etc/ssl/{{ server_name }}.key;
    {% endif %}
}

Di sini Anda bisa:

  • Mengatur nilai default bila variabel belum diisi.
  • Menggunakan kondisi if untuk menambahkan konfigurasi tertentu seperti SSL.

Sekarang Anda sudah tahu cara menggunakan template Jinja2 di Ansible, mulai dari membuat file .j2, menambahkan variabel, hingga menerapkannya ke server. Dengan kemampuan ini, Anda bisa mengotomatisasi pembuatan file konfigurasi tanpa perlu menulis ulang untuk setiap server.

Ingin mempelajari otomasi Ansible lebih dalam?
Baca juga: Menggunakan for, while, dan until loop di Bash untuk melengkapi pemahaman Anda tentang logika otomatisasi di Linux.

WhatsAppTelegramFacebookXThreadsCopy Link