4、ansible的templates
jinja2模板:该模板文件里面可以包含普通字符串,也可以使用变量,部署该文件时需要使用template模块,文件里面的变量会对应转换成变量所对应的值。
bash
https://jinja.palletsprojects.com/en/3.1.x/ #官方文档
http://docs.jinkan.org/docs/jinja2/ #中文文档
jinjia2中的条件判断:
bash
#写法1
{% if EXPR %}
...
{% endif %}
#写法2
{% if EXPR %}
...
{% else %}
...
{% endif %}
#写法3
{% if EXPR %}
...
{% elif EXPR %}
...
{% else %}
...
{% endif %}
jinjia2中的for循环:
bash
{% for i in EXPR %}
...
{% endfor %}
示例1:
bash
[devops@master chap03]$ cat test1.j2
{{ username }}
{{ ansible_facts.default_ipv4.address }}
[devops@master chap03]$ cat template.yml
---
- name: test template
hosts: master
vars:
- username: test1
tasks:
- name: test template
template:
src: ./test1.j2
dest: /tmp/test1.txt
[devops@master chap03]$ ansible-playbook template.yml
[devops@master chap03]$ cat /tmp/test1.txt
test1
192.168.168.10
示例2:
bash
[devops@master chap03]$ cat test2.j2
{% if var1 != 'hello' %}
var1 is hi
{% endif %}
{% if var2 > 3 %}
var2 > 3
{% elif var2 == 3 %}
var2 == 3
{% else %}
var2 < 3
{% endif %}
{% for i in range(1,4) %}
{{ i }} {{ i+10 }}
{% endfor %}
{% for i in var3 %}
{{ i.ip }} : {{ i.port }}
{% endfor %}
[devops@master chap03]$ cat template2.yml
---
- name: test template
hosts: master
vars:
var1: hi
var2: 4
var3:
- ip: 192.168.168.10
port: 22
- ip: 192.168.168.21
port: 80
tasks:
- template:
src: ./test2.j2
dest: /tmp/template.yml
[devops@master chap03]$ ansible-playbook template2.yml
[devops@master chap03]$ cat /tmp/template.yml
var1 is hi
var2 > 3
1 11
2 12
3 13
192.168.168.10 : 22
192.168.168.21 : 80
示例3:
bash
[devops@master chap03]$ cat hosts.j2
{% for host in groups.all %}
{{ hostvars[host]['ansible_facts']['fqdn'] }} {{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }}
{% endfor %}
[devops@master chap03]$ cat hosts.yml
---
- name: test template hosts
hosts: all
tasks:
- name: template hosts
template:
src: ./hosts.j2
dest: /tmp/hosts
[devops@master chap03]$ ansible-playbook hosts.yml
[devops@master chap03]$ ansible all -a 'cat /tmp/hosts'
master | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21
node02 | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21
node01 | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21