21/11/2024

Ansible – 13 Jinja2 Templating

Örnegin bir dosyamizda icinde degiskenler olan bir metin olsun yada ayarlar ve bunu her hosta göre kullanmak istiyoruz.

Sistem {{ ansible_facts.hostname }} e giris yaptiniz.
IP : {{ ansible_facts.default_ipv4.address }}
Herhangi bir problem icin sistem yöneticisine EMail ile bilgi verin.
E-Mail : {{ admin_email }}

Bu metin farkedeceginiz gibi her sistem de farkli olmalidir.

- name: Using Jinja2
  hosts: linux
  become: yes
  vars:
    admin_email: admin@testing.com
  tasks:
    - name: Deploy motd
      template:
        dest: /etc/motd
        src: motd.j2

Default deger

Bazen bir degisken her yere uymayabilir, o zaman defualt deger verebiliriz.

{{ admin_email | default ('buyuk_admin@testing.com') }}

Jinja2 comment

Jinja2 icinde de comment yazabiliriz.

{# Your comment here #}

Loop

Istersek looplari da kullanabiliriz.

{% for item in checks %} 
{{ loop.index }}: {{ item }}
{% endfor %}

Looplarda görülecegi gibi özel bir syntax var

Örnek olarak yapilacak checkleri text olarak yazalim sistemde.

- name: Using Jinja2
  hosts: linux
  become: yes
  vars:
    admin_email: admin@testing.com
    checks: 
      - disk usage
      - ram usage
      - update status
      - firewall rules
  tasks:
    - name: Deploy checklist
      template:
        dest: /tmp/checklist.txt
        src: checklist.j2

checklist.j2 dosyasi ise :

Please report status to {{ admin_email }}
-------------------------------------------
{# For loop #}
{% for item in checks %} 
{{ loop.index }}: {{ item }}
{% endfor %}
-------------------------------------------
END
bu pipeline calisinca ciktisi(/tmp/checklist.txt icerigi) asagida ki gibi olacaktir
Please report status to admin@testing.com
-------------------------------------------
1: disk usage
2: ram usage
3: update status
4: firewall rules
-------------------------------------------
END