ansible-playbook模板化(jinja2)

Posted scajy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于ansible-playbook模板化(jinja2)的主要内容,如果未能解决你的问题,请参考以下文章

Ansible如何使用lookup插件模板化外部数据

Ansible如何使用lookup插件模板化外部数据

ansible-playbook一键化部署apache服务

Jinja 找不到模板路径

Jinja2模板语言

Flask Jinja2模板语言