Ansible之剧本

1.剧本(playbook)
PlauBook即"剧本"
Play(host):定义主机
Book(task):定义具体任务
playbook:由一个或多个play组成,可以包含多个task
"""剧本的格式是一个YAML文件格式"""
1.1 YAML 语法
| 语法 |
YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用TAB |
| 冒号 |
以冒号结尾的除外 其他所有冒号后面所有必须有空格 |
| 缩进 |
表示列表项,使用一个短横杠加一个空格,多个项使用同样的缩进级别作为同一列表 |
2.组成
hosts :指定需要操作饿主机
vars :指定变量(非必须)
tasks :具体执行的任务
remote_user :执行时使用的用户(非必须)
eg:
- hosts: 主机名
remote_user: 操作用户
vars: 变量:变量值
tasks:
-name: 内容名称
模块名: 操作内容

3.剧本的变量
1.全局变量
- hosts: 主机名
vars:
package_name: mariadb
tasks:
yum:
name: "{{ package_name }}"
state: present
2.局部变量
- hosts: 主机名
tasks:
yum:
- name: 安装mariadb
vars:
package_name: mariadb
yum:
name: "{{ package_name }}"
state: present
3.配置清单变量
/etc/ansible/hosts
[主机名:vars]
package_name=mariadb
4.命令行中变量
ansible-playbook test.yaml -e 'package_name=mariadb'
变量的优先级:
在命令行中设置变量 > 局部变量 > 全局变量 > 配置清单
4.流程控制
1.1,条件判断(when)
判断nginx是否起动:
(1):制作一个脚本
vim 1.sh
#!/bin/bash
function main() {
RES=`systemctl is-active nginx`
if [ $RES == 'unknown' ];then
return 1
else
return 0
fi
}
main
(2):写入playbook
- 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
1.2,循环流程(while_item,item)
- 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"}

5.执行条件任务
要求:安装nginx后立即启动
- hosts: web01
tasks:
- name: 安装nginx
yum:
name: nginx
state: present
notify: 启动nginx
handlers:
- name: 启动nginx
service:
name: nginx
state: started
6.标签
- hosts: web01
tasks:
- name: 安装nginx
yum:
name: nginx
state: present
- name: 安装mariadb
yum:
name: mariadb
state: present
标签使用:
ansible-playbook test.yaml -t
mariadb,nginx
"使用时输入内容名称即可"
