ansible playbook编写一、Jinja2模板简介Jinja2是什么Jinja2是基于Python的模板引擎,蕴含变量和表达式两局部,两者在模板求值时会被替换为值,模板中还有标签,管制模板的逻辑
为什么要学习Jinja2模板因为playbook的模板应用Python的Jinja2模块来解决
Jinja2模版的根本语法
模板的表达式都是蕴含在他要分隔符"{{}}"内的管制的语句都是蕴含在分隔符"{% %}"内的模板反对正文,都是蕴含在分隔符'{# #}'内,反对块正文调用变量 {{varname}}计算 {{2+2}}判断{{1 in {{1,2,3}}Jinja2模版管制语句{% if name == '诗仙' %} 李白{% elif name == '诗圣' %} 杜甫{% elif name == '诗魔' %} 白居易{% else %} 李贺{% endif %}Jinja2过滤器变量能够通过过滤器批改,过滤器与变量用管道符号( | )宰割,也能够用圆括号传递可选参数,多个过滤器能够链式调用,前一个过滤器的输入会被作业后一个过滤器的输出
例如:加密一个字符串:{{'astr'|password_hash('sha512')}}
二、playbook简介playbook是什么playbook是ansible用于配置,部署和治理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,能够让远端主机达到预期的状态
也能够说 playbook字面意思即剧本,事实中由演员按剧本表演,在ansible中由计算机进行装置,部署利用,提供对外服务,以及组织计算机解决各种各样的事件 为什么要应用palybook
执行一些简略的工作,应用ad-hoc命令能够不便的解决问题,但有时一个设施过于简单时,执行ad-hoc命令是不适合的,最好应用playbookplaybook能够重复应用编写的代码,能够放到不同机器下面,像函数一样,最大化的利用代码,在应用ansible的过程中,解决的大部分操作都是在编写playbookplaybook语法根底(1)
playbook由YAML语文编写,遵循YAML规范在同一行中,#之后的内容示意正文同一个列表中元素应该放弃雷同缩进playbook由一个或多个play组成play中host,variables,roles,tasks等对角示意办法都是键值两头以": "分隔示意YAML还有一个小的怪癖,它的文件开始行都是以 ---,这是YAML格局的一部分,表明一个文件的开始playbook形成
hosts: 定义交要执行playbook的近程主机级vars: 定义playbook运行时须要应用的变量tasks: 定义将要近程主机上执行的工作列表handlers: 定义task执行实现当前须要调用的工作playbook执行后果应用ansible-playbook运行playbook文件,输入内容为JSON格局,由不同色彩组成便于辨认
绿色代表执行胜利黄色 代表零碎状态产生扭转红色代表执行失败ansible具备幂等性,幂等性可能保障咱们反复的执行一项操作时,失去的后果是雷同的,咱们再来回顾一下幂等性的概念
"幂等性"是什么意思呢?举个例子,你想把一个文件拷贝到指标主机的某个目录上,然而你不确定此目录中是否曾经存在此文件,当你应用ansible实现这项工作时,就非常简单了,因为如果指标主机的对应目录中曾经存在此文件,那么ansible则不会进行任何操作,如果指标主机的对应目录中并不存在此文件,ansible就会将文件拷贝到对应目录中,说白了,ansible是"以后果为导向的",咱们指定了一个"指标状态",ansible会主动判断,"以后状态"是否与"指标状态"统一,如果统一,则不进行任何操作,如果不统一,那么就将"以后状态"变成"指标状态",这就是"幂等性","幂等性"能够保障咱们反复的执行同一项操作时,失去的后果是一样的。
有了幂等性的概念下面显示色彩代表的不同后果就比拟好了解了
绿色 代表执行胜利 后果曾经和指定"指标状态"统一不须要批改黄色 执行胜利,零碎状态产生扭转,批改过"指标状态"红色代表执行失败三、playbook编写应用ping模块编写 第一个playbook
[root@ansible default]# cat ping.yml --- #第一行,示意开始- hosts: all #近程主机,多个能够用逗号孙隔开 remote_user: root #近程执行的用户名 tasks: - name: ping test #工作名称,你也能够了解为备注信息,会在执行中显示,不便浏览 ping: #模块名ping[root@ansible default]# ansible-playbook ping.yml -f 5 #-f 并发过程数量,默认是5PLAY [all] ******************************************************************************************TASK [Gathering Facts] ******************************************************************************ok: [cache]ok: [web1]ok: [web2]ok: [db2]ok: [db1]TASK [ping test] ************************************************************************************ok: [cache]ok: [web1]ok: [web2]ok: [db1]ok: [db2]PLAY RECAP ******************************************************************************************cache : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 db1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 db2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 web1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 web2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 playbook语法根底(2)
...