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 Playbook Conditionals
通常,play的结果可能取决于变量的值,facts(有关远程系统的知识)或先前的任务结果. 在某些情况下,变量的值可能取决于其他变量. 此外,可以创建其他组,以根据主机是否与其他条件匹配来管理主机. ...
- Ansible Playbook Variables
虽然自动化存在使得更容易使事情重复,但所有的系统可能不完全一样. 在某些系统上,您可能需要设置一些与其他操作略有不同的行为或配置. 此外,一些观察到的远程系统的行为或状态可能需要影响如何配置这些系统. ...
- (三)ansible playbook
一,YAML语法 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- 写Ansible playbook添加zabbix被监控的对象
本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible入门四(Ansible playbook基础组件介绍)
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible - playbook(剧组)
目录 ansible - playbook(剧组) 常用命令 五种传参方式 常用元素详解 tags handlers template when 循环 嵌套循环 ansible - playbook( ...
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
随机推荐
- Codeforces 1337D Xenia and Colorful Gems
题意 给你3个数组\(a, b\)和\(c\),最小化\((x-y)^2+(y-z)^2+(z-x)^2\),其中\(x \in a, y \in b, z \in c\). 解题思路 这题其实第一眼 ...
- CentOS 7上更改MySQL数据库存储目录浅析
个人之前总结过两篇文章"MySQL更改数据库数据存储目录"和"Ubuntu上更改MySQL数据库数据存储目录",都是在工作中遇到相关案例后的一个简单总结.当 ...
- Centos7安装后进不去,死活就要填licence,该怎么办?
遇到这个问题不要麻爪,跟着我做: 1 回车 2 回车 c 回车 c 回车 然后就进入系统了. 要使它联网,点右上角的开关按钮,将PCI Ethernet选择为connect状态. 我的centos7是 ...
- leetcode刷题-62不同路径2
题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...
- Struts 2 漏洞专题 | S2-008
漏洞简介 为了防止攻击者在参数内调用任意方法,默认情况下将标志xwork.MethodAccessor.denyMethodExecution设置为true,并将SecurityMemberAcces ...
- ThinkPHP6.0 判断是否有文件上传
有必要考虑不是post请求或没有指定enctype="multipart/form-data"的情况.如果是post请求还是设置了正确的编码,没有文件上传时 request()-& ...
- LiteOS间歇计算技术:IOT终端真正感受“电量自由”
摘要:LiteOS间歇计算为什么能使物联网终端实现长续航? 物联网设备.场景复杂多样,小到智能穿戴的耳机,大到大型基建设备,更有我们陌生而又熟悉场景,例如深海探测.森林监控.野生动物跟踪等等能量采集场 ...
- Android组件化 + MVP + MVVM
前言 组件化和插件化已经提出了很久了,到现在也是比较稳定的一种架构方案了,在三年前,组件化和插件提出来没多久,前公司就已经在项目中使用了,只是当时还只是菜鸟,没有资格参与到架构的建设中,只是在大佬搭好 ...
- Iterator泛型指针
Iterator泛型指针 每个标准容器都提供一个名为: begin()的操作函数,返回一个iterator指向第一个元素: end()操作函数,返回一个iterator指向最后一个元素的下一位置: 定 ...
- [Java并发编程之美]第1章 线程基础 补充知识
1.2线程创建与运行 创建线程有三种方式: 继承Thread类并重写run方法: 实现Runnable接口的run方法,new Thread时将该类对象作为参数传入: 实现Callable接口的cal ...