1.playbook简介
Playbook与ad-hoc相比,是一种完全不同的运用
playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署
playbook中可以编排有序的执行过程,甚至于做到在多组机器间
来回有序的执行特别指定的步骤,并且可以同步或异步的发起任务
使用playbook可以方便的重用这些代码,可以移植到不同的机器上面
2.playbook语法
playbook由YMAL语言编写,以下为playbook常用到的YMAL格式:
(1)文件的第一行应该以"—"三个连字符开始,表明YMAL文件的开始。
(2)在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
(3)YMAL中的列表元素以”-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进:
(4)一个字典是由一个简单的 键: 值 的形式组成(这个冒号后面必须是一个空格),字典也可以使用缩进形式来表示
例如

主机与用户
- hosts: server2 #指定主机组,可以是一个或多个组,逗号分隔。
remote_user: root #指定远程主机执行的用户名
---
- hosts: webservers
remote_user: root
become: yes #切换用户运行
become_user: mysql #指定sudo用户为mysql
Tasks 列表
Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,
即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
tasks:
- name: install apache #定义任务名
执行playbook
ansible-playbook apache.yml 直接执行
ansible-playbook apache.yml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook apache.yml --list-task 检查tasks任务
ansible-playbook apache.yml --list-hosts 检查生效的主机
ansible-playbook a.yml --start-at-task=“xxxx” #指定从某个task开始运行
3.编写playbook实现自动安装服务
(1)由于yml文件语法的要求,我们先编写一个特定的vim,一个tab等于两个空格
(2)开始编写yml文件
server2上查看
playbook语法检查
playbook执行host的检查
playbook tasks的检查
在server3上配置apache
可以这样写,用item变量,loop循环httpd和firewalld
访问server3 172.25.15.3,apache已启动
接下来想要配置server2上的httpd服务,改如何操作?
拷贝一份httpd的文件到当前目录,然后创建apache目录,把httpd.conf和playbook放入
编辑playbook
编辑配置文件,将80端口改成8080端口,再推
在server3上查看
发现并没改变端口,是因为只是将文件推过去,而没有重新启动apache服务
所以得在playbook文件中再加入触发器:handlers 并且加入notify 和触发器相对应
这样配置文件修改了后,就会触发触发器,而重新启动apache服务
再次推 推给server2,然后发现端口已经改变
在server3上先查看conf文件,是8080端口,然后手动restart httpd服务,然后在server1上修改配置为80,然后再推给server2和3,再次查看是否两个都变回了80端口
在server1上改成80端口,再次推给webserver组,看server2,3能否配置成功
查看文件md5值 (报文摘要)
成功
将httpd.conf文件改为j2格式的模板文件
修改port:变量为http_port
给playbook中加入vars变量http_port 赋值8080,并修改src的文件名,加入template
推一下
server2 httpd配置文件
server3 httpd配置文件
with_items循环
现在with_items已被loop替换
编写useradd.yml
发现密码是明文
给密码加密
现在想把另外一个文件的内容,用户和密码,批量的让useradd.yml来推可以这样写
为了安全起见,对存放用户信息的文件进行加密
查看需要密码
编辑也需密码
再次推
cp /etc/hosts hosts.j2
vim hosts.j2
vim host.yml
在server2,3上查看
编写playbook实现采集远程主机的信息
编写playbook实现haproxy负载均衡
先在server1上面进行授权
在server1上安装haproxy服务,作为一个调度器
编辑模板:实现server2和server3上的httpd服务的负载均衡
开启server2,3的httpd服务
发现此时的负载均衡效果不明显,创建server2和server3的默认发布页面
.
编写playbook实现将server4自动加入到负载均衡的集群中
在真机上重现开启一台虚拟机server4,创建普通用户并且授权
vim /etc/sudoers
做ssh免密
编辑主机文件
编辑模板,写循环