1、剧本(playbook)简介
PlayBook即"剧本","兵书"之意,PlayBook是由以下部分组成的
play(host): 定义的是主机的角色。(主角还是配角)
Book(task): 定义的是具体执行的任务。(角色的台词和动作)
playbook: 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作)。
剧本的格式是一个YAML文件格式。
2、剧本(playbook)的组成
1、host : 指定的需要操作的主机
2、vars : 指定的是变量(非必须)
3、tasks : 具体要执行的任务
4、remote_user : 执行时使用的用户
实战练习:
先用vim创建一个3.yaml的文件
[root@localhost ~]# vim 3.yaml
然后在3.yaml里写入事先准备的剧本
- hosts: web01
tasks:- name: 测试ls
shell: 'ls' - name: 测试安装文件
shell: 'touch i.txt' - name: 安装nginx
yum:
name: nginx
state: preset
- name: 测试ls
最后用ansible-playbook命令执行
[root@localhost ~]# ansible-playbook 3.yaml
3、剧本(playbook)的变量
1、主机清单
2、变量
2.1、全局变量
- hosts: web01
vars:
package_name: nginx
2.2、局部变量
- name: 安装Nginx
vars:
package_name: mariadb
yum:
name: "{{ package_name }}"
state: present
2.3、配置清单中的变量
[web01:vars]
package_name=redis
2.4、在命令行中设置变量
[root@localhost ansible]# ansible-playbook test.yaml -e 'package_name=mamecache'
2.5、变量的优先级
在命令行中设置变量 > 局部变量 > 全局变量 > 配置清单
案例:使用剧本部署超级玛丽
- hosts: web01
vars:
package_name: nginx
tasks:
- name: 上传代码
unarchive:
src: /root/mario.tar.gz
dest: /usr/share/nginx/html
remote_src: no
- name: 安装Nginx
yum:
name: "{{ package_name }}"
state: present
- name: 启动Nginx
service:
name: "{{ package_name }}"
state: restarted
4、流程控制
4.1、条件判断(when)
案例:在CentOS系统中,安装Nginx
- hosts: web01
tasks:
- name: 安装Nginx
yum:
name: nginx
state: present
when: ansible_distribution == "CentOS"
and : 并且
or : 或者
案例:判断Nginx服务是否启动
- hosts: web01
tasks:
- name: nginx服务监测
script: './1.sh'
register: check_nginx
- name: 查看check_nginx变量
debug: var=check_nginx
- name: 启动Nginx
service:
name: nginx
state: started
when: check_nginx.rc == 0
[root@localhost ansible]# cat 1.sh
#!/bin/bash
function main() {
RES=`systemctl is-active nginx`
if [ $RES == 'unknown' ];then
return 1
else
return 0
fi
}
main
4.2、循环流程(with_item、items)
案例:要求安装nginx、mariadb等软件
- hosts: web01
tasks:
- name: 安装Nginx
yum:
name: "{{ item }}"
state: present
with_items:
- nginx
- mariadb
案例:要求安装Nginx、卸载mariaDB
- hosts: web01
tasks:
- name: 安装Nginx
yum:
name: "{{ item.name }}"
state: "{{ item.state }}"
with_items:
- {"name":"nginx","state":"present"}
- {"name":"mariadb","state":"absent"}
安装:nginx、mariadb
卸载:redis
5、在某种条件下执行任务
案例:要求在安装完成之后再启动Nginx
- hosts: web01
tasks:
- name: 安装Nginx
yum:
name: "{{ item.name }}"
state: "{{ item.state }}"
with_items:
- {"name":"nginx","state":"present"}
notify: 启动Nginx
handlers:
- name: 启动Nginx
service:
name: nginx
state: restarted
6、标签
- hosts: web01
tasks:
- name: 安装Nginx
yum:
name: "{{ item.name }}"
state: "{{ item.state }}"
with_items:
- {"name":"nginx","state":"present"}
tags: nginx
- name: 安装mariadb
yum:
name: mariadb
state: present
tags: mairadb
[root@localhost ansible]# ansible-playbook test.yaml -t mairadb,nginx
[root@localhost ansible]# ansible-playbook test.yaml -t mairadb