一 playbook简介
二 变量的使用
三 tags(标记)
四 标签与触发器结合用tags handlers
五 条件判断
六 循环
七 include and roles
一 playbook简介
1.playbook是什么
– playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期状态
– 也可以说,playbook字面意思即剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情
2.为什么要使用playbook
– 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但有时一个设施过于复杂时,执行ad-hoc命令是不合适的,最好使用playbook
– playbook可以反复使用编写的代码,可以放到不同的机器上面,像函数一样,最大化利用代码,在使用ansible的过程中,处理的大部分操作都是在编写playbook
3.playbook语法格式
– playbook由YAML语言编写,遵循YAML标准
– 在同一行中,#之后的内容表示注释
– 同一个列表中的元素应该保持相同的缩进
– playbook由一个或多个play组成
– play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以": "分隔表示
– YAML还有一个小的怪癖,它的文件开始行都应该是 ---,这是YAML格式的一部分,表明一个文件的开始
4.playbook构成
– hosts: 定义将要执行playbook的远程主机组
– vars: 定义playbook运行时需要使用的变量
– tasks: 定义将要在远程主机上执行的任务列表
– handlers: 定义task执行完成以后需要调用的任务
5.playbook执行结果
使用ansible-playbook运行playbook文件,输出内容为JSON格式,由不同颜色组成便于识别
– 绿色代表执行成功
– ***代表系统代表系统状态发生改变
– 红色代表执行失败
二 变量的使用
(1)变量的使用之直接调用变量
vim user01.yml
---
- hosts: db
remote_user: root
vars:
username: lisi
tasks: #task下的-name是说明
- name: useradd "{{username}}"
user:
name: "{{username}}"
- name: change password
shell: echo 456|passwd --stdin "{{username}}"
(2)变量的使用(密码变量+过滤器的用法)----解决密码明文的问题
vim user01.yml
---
- hosts: db
remote_user: root
vars:
username: lisi
tasks:
- name: useradd "{{username}}"
user:
name: "{{username}}"
password: "{{'123'|password_hash('sha512')}}"
(3)变量的使用之变量参数
(3.1)参数用json格式)
#ansible-playbook user01.yml -e '{"username":"plj","pwd":"123qqq...A"}'
(3.2)一个文件 传参yaml格式)
---
- hosts: cache
remote_user: root
vars:
username: lisi
pwd: 123
tasks:
- name: useradd "{{username}}"
user:
name: "{{username}}"
password: "{{pwd|password_hash('sha512')}}"
#编写yaml格式语句
vim args.yaml
---
username: plj
pwd: 123qqq...A
ansible-playbook user01.yml -e @args.yaml
三 tags(标记)
给指定的任务定义一个调用标识只想用其中的一个功能模
修改Apache默认网页/端口及开机自启
vim user01.yml
---
- hosts: web
remote_user: root
tasks:
- name: install httpd
yum:
name: httpd
state: installed
- name: 更改默认端口
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen'
line: 'Listen 8080'
- name: 修改默认首页
copy:
src: /index.html
dest: /var/www/html/
tags: defindex
- name: 启动服务
service:
name: httpd
state: started
enabled: yes
#ansible-playbook httpd.yml -t defindex
四 标签与触发器结合用tags handlers
更改配置文件重启服务
vim web.yml
---
- hosts: web
remote_user: root
tasks:
- copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 0644
tags: httpconf #标签
notify: #触发
- restart httpd
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
五 条件判断
(1)when
有些时候需要在满足特定的条件后再触发某一项操作,或在特定的条件下终止某个行为,这个时候需要进行条件判断,when正是解决这个问题的最佳选择,远程中的系统变量facts作为when的条件,可以通过setup模块查看
(2)register(保存一个操作的执行结果)
有时候我们还需要更复杂的例子,如判断前一个命令的执行结果去处理后面的操作,这时候就需要register模块来保存前一个命令的返回状态,在后面进行调用
############
vim load.yml
---
- hosts: web
remote_user: root
tasks:
- shell: uptime |awk '{printf("%.2f",$(NF-2))}' #打印一分钟的负载
register: result #保存上一条命令的执行结果到result中
- service:
name: httpd
state: stopped
when: result.stdout|float > 0.7 #stdout屏幕标准输出,转换成小数进行比较,当负载大于0.7时停止apache服务
##########测试效果
(1)web主机上执行awk 'BEGIN{while(1){}}'
(2)watch -n 1 uptime #查看负载
(3)管理主机上curl进行访问测试查看效果
######################################
六 循环
##########with_items
with_items是playbook标准循环,可以用于迭代一个列表或字典,通过{{ item }}获取每次迭代的值
#批量添加用户,设备不同的密码,并添加到不同的组
vim user01.yml
---
- hosts: cache
remote_user: root
tasks:
- name: add user
user:
name: "{{item.name}}"
group: "{{item.group}}"
password: "{{item.pwd|password_hash('sha512')}}"
with_items:
-
name: zhangsan
group: ftp
pwd: zhd
-
name: lisi
group: man
pwd: xj
-
name: wangwu
group: daemon
pwd: 82hs
-
name: sunxiao
group: adm
pwd: kj
-
name: xx
group: root
pwd: a
####################################
七 include and roles
(1)include(包含的是文件)
在编写playbook的时候随着项目越来越大,playbook越来越复杂,修改也很麻烦。这时可以把一些play、task 或handler放到其他文件中,通过include指令包含进来是一个不错的选择
(2)rules(包含的是文件夹)
– ars:变量层
– tasks:任务层
– handlers:触发条件
– files:文件
– template:模板
– default:默认,优先级最低