Unter gewissen Umständen ignoriert ansible Zeilenumbrüche in jina2 (.j2) templates.
Das Problem lässt sich jedoch einfach beheben.
Wenn man bei ansible in einem jinja2 template in der selben Zeile if/else Konstrukte hat, z.B.:
.my.cnf.j2
# .my.cnf [client] host={% if db_hostname is defined %}{{ db_hostname }}{% else %}localhost{% endif %} user={% if item.value.mysql_user is defined %}{{ item.value.mysql_user }}{% else %}{{ item.value.user }}{% endif %} password={% if item.value.mysql_password is defined %}{{ item.value.mysql_password }}{% elif item.value.password is defined %}{{ item.value.password }}{% else %}{% endif %} |
Werden die nachfolgenden Zeilenumbrüche ignoriert. Aus der obigen Datei würde dann Beispielsweise:
# .my.cnf host=MYHOSTuser=myuserpassword=secret |
Dies ist ein bekannter Bug in Ansible und wird auch bei stackoverflow diskutiert.
Die Lösung ist hier, einfach zuoberst im template file die Zeile:
#jinja2: trim_blocks:False |
zu setzen und Zeilenumbrüche werden wieder gemacht.
Im Beispiel hier also:
.my.cnf.j2
#jinja2: trim_blocks:False # .my.cnf [client] host={% if db_hostname is defined %}{{ db_hostname }}{% else %}localhost{% endif %} user={% if item.value.mysql_user is defined %}{{ item.value.mysql_user }}{% else %}{{ item.value.user }}{% endif %} password={% if item.value.mysql_password is defined %}{{ item.value.mysql_password }}{% elif item.value.password is defined %}{{ item.value.password }}{% else %}{% endif %} |