Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:ansible_templating_jinja2

In Ansible templates "jinja2" verwenden und debuggen

Mit der Makro Sprache „jinja2 (siehe https://jinja.palletsprojects.com/en/3.0.x/ ) wird in Ansible dynamisch Code angepasst und Templates erzeugt.

Siehe dazu ⇒ https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html

In Python Interpreter der Ansible Tower Umgebung testen

Über „jinja2.Template“ läßt sich zuvor auch testen ob es dann im Ansible Template so funktioniert wie erwartet.

Umgbung zuvor einstellen

source /var/lib/awx/venv/ansible/bin/activate

Python starten und Lib laden:

python
 
>>> import jinja2
 
 
# String zerlegen
 
>>> jinja2.Template(r'{{ "-".join(Text) }}').render(Text='ABCDE')
u'A-B-C-D-E'
 
 
>>>exit()

Beispiele

Variablen auslesen und in einer Zeile ausgeben

Playbook:

...
vars:
   dba_mail_list:
    -  xxxxx@mmmm.xx
    - yyyyy@mmmmm.xx
..

Im Template in einer Zeile mit Join durch Leerzeichen getrennt ausgeben:

>
{{ dba_mail_list | join(' ') }}

Ergibt dann im Ergebnis:

xxxxx@mmmm.xx yyyyy@mmmmm.xx

Facts verwenden und mit den Ergebnis rechnen

Suchen in den Ansible Fact Json mit ansible_mounts|json_query('[?mount == `/opt`].size_total') , darauf achten das das Ergebnis ein Record ist, daher mit „size_total[0]“ auf den eigentlichen Wert zugreifen!

 - hosts : apex01.pipperr.local
   vars:
    - size_total: "{{ ansible_mounts|json_query('[?mount == `/opt`].size_total') }}"
    - size_free : "{{ ansible_mounts|json_query('[?mount == `/opt`].size_available') }}"

   tasks:
    - name: check Diskspace
      ansible.builtin.debug:
       msg: "The filesystem has {{ ( size_total[0]/1024/1024 )|round(1,'common') }}  MB space, free is {{ (size_free[0]/1024/1024)|round(2)  }} MB"
    - name: check Diskspace
      ansible.builtin.debug:
       msg: "free space {{ size_free }} must be larger then {{ (2*1024*1024*1024) }}"
      failed_when: size_free[0]  < (2*1024*1024*1024)

Datumsrechnen

 vars:
  target_time: "02:{{range(5, 55) | random}}"
  target_date: "28.03.2023"

- name: Calculate minutes to start with ansible.posix.at a job after x minutes at 02: (minutes are random to reduce load on serverfarm, not start the job on each server to the same minte)
  set_fact:
   minutes_until_target: "{{ (((target_date + ' ' + target_time)|to_datetime('%d.%m.%Y %H:%M')  ) - now() ).seconds // 60 }}"

- name: Print minutes
  debug:
    var: minutes_until_target

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
linux/ansible_templating_jinja2.txt · Zuletzt geändert: 2023/03/27 16:35 von gpipperr

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki