ansible-playbook模板化(jinja2)

1. ansible-playbook模板化(jinja2)条件与循环
  1.1) jinja使用结构图

  

2. 编写jinja2的循环
  2.1) 编写jinja2模板

 1 [root@test-1 jinja2]# vim /ansible/jinja2/test.yaml 
 2 [root@test-1 jinja2]# cat /ansible/jinja2/test.yaml 
 3 ---
 4 - hosts: web1
 5   vars:
 6     hello: ansible
 7 
 8 
 9   tasks:
10     - template: src=f.j2 dest=/tmp/f.j2

  2.2) 编写f.j2的jinja2的条件循环文件

1 [root@test-1 jinja2]# vim /ansible/jinja2/f.j2 
2 [root@test-1 jinja2]# cat /ansible/jinja2/f.j2 
3 {% set list=['one','two','three'] %}
4 {% for i in list %}
5   {{i}}
6 {% endfor %}

  2.3) 语法检测

1 [root@test-1 jinja2]# ansible-playbook --syntax-check test.yaml 
2 
3 playbook: test.yaml

  2.4) 执行jinja2的执行文件test.yaml

 1 [root@test-1 jinja2]# ansible-playbook test.yaml 
 2 
 3 PLAY [web1] *************************************************************************************************************************************************************
 4 
 5 TASK [Gathering Facts] **************************************************************************************************************************************************
 6 ok: [192.168.200.133]
 7 ok: [192.168.200.132]
 8 
 9 TASK [template] *********************************************************************************************************************************************************
10 changed: [192.168.200.133]
11 changed: [192.168.200.132]
12 
13 PLAY RECAP **************************************************************************************************************************************************************
14 192.168.200.132            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
15 192.168.200.133            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

  2.5) 验证是否创建成功

 1 [root@test-1 jinja2]# ansible web1 -m shell -a "ls /tmp/f.j2"
 2 192.168.200.133 | CHANGED | rc=0 >>
 3 /tmp/f.j2
 4 
 5 192.168.200.132 | CHANGED | rc=0 >>
 6 /tmp/f.j2
 7 
 8 [root@test-1 jinja2]# ansible web1 -m shell -a "cat /tmp/f.j2"
 9 192.168.200.133 | CHANGED | rc=0 >>
10   one
11   two
12   three
13 
14 192.168.200.132 | CHANGED | rc=0 >>
15   one
16   two
17   three

3. 编写jinja2的循环加if判断
  3.1) 编写配置文件

 1 [root@test-1 jinja2]# vim /ansible/jinja2/test.yaml 
 2 [root@test-1 jinja2]# cat /ansible/jinja2/test.yaml 
 3 ---
 4 - hosts: web1
 5   vars:
 6     hello: ansible
 7 
 8 
 9   tasks:
10     - template: src=f.j2 dest=/tmp/f.j2

3.2) 编写f.j2的jinja2的条件循环加if判断文件

1 [root@test-1 jinja2]# vim  /ansible/jinja2/f.j2 
2 [root@test-1 jinja2]# cat  /ansible/jinja2/f.j2 
3 {% set list=['one','two','three'] %}
4 {% for i in list %}
5    {% if  i == 'two' %}
6       -> two
7    {% endif  %}
8 {% endfor %}

3.3) 语法检测

1 [root@test-1 jinja2]# ansible-playbook --syntax-check test.yaml 
2 
3 playbook: test.yaml

3.4) 执行配置文件

 1 [root@test-1 jinja2]# ansible-playbook test.yaml 
 2 
 3 PLAY [web1] *************************************************************************************************************************************************************
 4 
 5 TASK [Gathering Facts] **************************************************************************************************************************************************
 6 ok: [192.168.200.133]
 7 ok: [192.168.200.132]
 8 
 9 TASK [template] *********************************************************************************************************************************************************
10 changed: [192.168.200.132]
11 changed: [192.168.200.133]
12 
13 PLAY RECAP **************************************************************************************************************************************************************
14 192.168.200.132            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
15 192.168.200.133            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

3.5) 验证是否创建成功

1 [root@test-1 jinja2]# ansible web1 -m shell  -a "cat /tmp/f.j2"
2 192.168.200.132 | CHANGED | rc=0 >>
3             -> two
4       
5 192.168.200.133 | CHANGED | rc=0 >>
6             -> two

4. 编写jinja2的循环加多分支if判断
  4.1) 编写配置文件

 1 [root@test-1 jinja2]# vim /ansible/jinja2/test.yaml 
 2 [root@test-1 jinja2]# cat /ansible/jinja2/test.yaml 
 3 ---
 4 - hosts: web1
 5   vars:
 6     hello: ansible
 7 
 8 
 9   tasks:
10     - template: src=f.j2 dest=/tmp/f.j2

  4.2) 编写f.j2的jinja2的条件循环加,多分支if判断文件

 1 [root@test-1 jinja2]# vim /ansible/jinja2/f.j2 
 2 [root@test-1 jinja2]# cat /ansible/jinja2/f.j2 
 3 {% set list=['one','two','three'] %}
 4 {% for i in list %}
 5    {% if  i == 'two' %}
 6       -> 2
 7    {% elif i == 'three' %}
 8       -> 3
 9    {% endif  %}
10 {% endfor %}

  4.3) 语法检测

1 [root@test-1 jinja2]# ansible-playbook --syntax-check test.yaml 
2 
3 playbook: test.yaml

  4.4) 执行配置文件

 1 [root@test-1 jinja2]# ansible-playbook test.yaml 
 2 
 3 PLAY [web1] *************************************************************************************************************************************************************
 4 
 5 TASK [Gathering Facts] **************************************************************************************************************************************************
 6 ok: [192.168.200.133]
 7 ok: [192.168.200.132]
 8 
 9 TASK [template] *********************************************************************************************************************************************************
10 changed: [192.168.200.132]
11 changed: [192.168.200.133]
12 
13 PLAY RECAP **************************************************************************************************************************************************************
14 192.168.200.132            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
15 192.168.200.133            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

4.5) 验证创建是否成功

1 [root@test-1 jinja2]# ansible web1 -m shell  -a "cat /tmp/f.j2"
2 192.168.200.133 | CHANGED | rc=0 >>
3             -> 2
4             -> 3
5    
6 192.168.200.132 | CHANGED | rc=0 >>
7             -> 2
8             -> 3
原文地址:https://www.cnblogs.com/scajy/p/11561496.html