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
Ü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()
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
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)
Dokumentation: