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