一 playbook的简介
本章对ansible的palybook做了讲解,涉及了playbook的语法、变量、模板、判断、循环等,了解了如何编写playbook文件
playbook的强大只有在使用Ad-Hoc之后,才能深深的感受playbook的强大!
Ad-Hoc:注重解决一些简单或者平时工作中临时遇到的任务,解决一些非固化的任务!
playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的批量部署!
playbook中可以编排有序的执行过程,甚至于做到在多组机器间来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务,使用playbook可以方便的重用这些代码,可以移植到不同的机器上面!
二 playbook的语法
重点:强调这种语言以数据做为中心,而不是以标记语言为重点
Ansible任务配置文件被叫做Playbook,称之为剧本,而每一个编写的人都是剧本的作者或者说是编剧!
一个剧本:有主线,有任务,有衔接,有场景等等,在这里体现的淋漓尽致!
playbook由YMAL语言编写,常见的配置文件的格式还有xml(早期,现在仍然活跃),和json格式(主流)!
以下为playbook常用到的YMAL格式
(1)文件的第一行应该以"---"三个连字符开始,且需顶行首写,表明YMAL文件的开始
(2)在同一行中,#之后的内容表示注释,类似于shell,python和ruby
(3)YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进
(4)一个字典是由一个简单的键: 值 的形式组成(这个冒号后面必须是一个空格),字典也可以使用缩进形式来表示
-
字串不一定要用双引号标识;
-
在缩排中空白字符的数目并不是非常重要,只要相同阶层的元素左侧对齐就可以了;
-
允许在文件中加入选择性的空行,以增加可读性;
-
在一个档案中,可同时包含多个文件,并用“---”分隔;
-
选择性的符号“...”可以用来表示档案结尾
小技巧:yaml文件的格式对空格是很敏感的,一般需要顶格书写,段落划分为两个空格,为了方便编写.yml文件,做如下调整
在devops用户家目录下新建隐藏文件
[devops@localhost anisble]$ cat ~/.vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et
三 案例的结合
需求1:temp组安装apache并且开启服务
apache.yml
---
# 针对这个任务的资源清单!
- hosts: test
tasks:
#(1)这个任务的描述
- name: install httpd
# 调用yum模块-->下面是该模块相关的参数
yum:
name: httpd
state: present
#(2)另外一个任务的描述
- name: start httpd
# 调用service模块,启动服务
service:
name: httpd
state: started
总结1:某个模块的相关参数以键值对的形式对应,对应":"
总结2:hosts、tasks、vars位于同一级别!
总结3:列表对应[]-->"-",元组对应{}-->“:”
ansible-playbook命令的相关参数
ansible-playbook apache.yml #直接执行
ansible-playbook apache.yml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook apache.yml -C #注意与上面的区别
ansible-playbook apache.yml --list-task #检查tasks任务
ansible-playbook apache.yml --list-hosts #检查生效的主机
ansible-playbook apache.yml --start-at-task="启动apache服务" #指定从某个task开始运行
总结4:playbook主要有四部分构成
target section # 定义将要执行playbook的远程主机组
variable section # 定义playbook运行时需要使用的变量
task section # 定义将要在远程主机上执行的任务列表
handler section # 定义task执行完成以后需要调用的任务
Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。每一个task必须有一个名称name(标识的作用),这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
总结5:playbook对应的目录层有五个
一般所需的目录层有:(视情况可变化)
vars 变量层
tasks 任务层
handlers 触发条件
files 文件
template 模板
讨论一下其它事情:软件安装之后再卸载是无法删除依赖!
# 安装httpd对系统做的事情-->曾经的伤害!
rpm -q --scripts httpd #查看安装过程以及安装前后所执行的所有脚本,很重要!
rpm -qi httpd # -q查询 -i安装
需求2:由于管理端事先需要对服务进行定制,所以在上面的基础上进行配置文件的分发!
# 针对这个任务的资源清单!
- hosts: test
tasks:
#(1)这个任务的描述
- name: install httpd
# 调用yum模块-->下面是该模块相关的参数
yum:
name: httpd
state: present
#(2)scp apache的配置文件
- name: configure httpd
copy:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 0644
#(3)另外一个任务的描述
- name: restart httpd
# 调用service模块,启动服务
service:
name: httpd
state: restarted
# 对这个的理解-->执行命令的相对位置!
src: files/httpd.conf
需求3:当配置文件发生变化时,重启服务
---
# 针对这个任务的资源清单!
- hosts: test
tasks:
#(1)这个任务的描述
- name: install httpd
# 调用yum模块-->下面是该模块相关的参数
yum:
name: httpd
state: present
#(2)scp apache的配置文件-->保持与原本的一致
- name: configure httpd
copy:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 0644
# 注意:要与下方的保持一致,notify也是一个模块!
notify: restarted httpd
#(2)另外一个任务的描述
- name: start httpd
# 调用service模块,启动服务
service:
name: httpd
state: started
#(3)触发机制,只有修改了配置文件才会触发-->相当于调转!
handlers:
- name: restarted httpd
service:
name: httpd
state: restarted