如果服务器数量很多,配置信息比较多,可利用Ansible Playbook 编写剧本,从而以更加简单得方式实现任务处理得自动化与流程化
playbook是由一个或多个模块组成,使用不同得模块完成一件事情
playbook通过yaml语法识别描述的状态文件,扩展名是yaml
PlayBooks组件包括以下内容:
target:定义PlayBook的远程主机
variable:定义PlayBook使用的变量
task:定义远程主机上执行的任务列表
habdler:定义task执行完成后需要调用的任务,例如配置文件被改动,则启动handler任务重启相关联的服务
target常用参数:
hosts: 远程主机组
user:执行该任务的用户
sudo:设置为yes,使用root权限
sudo_user:指定sudo普通用户
connection:默认基于SSH连接客户端
gather_facks:获取远程主机的facts基础信息
variable:常用参数:
vars:格式、变量名:变量值
vars_files:指定变量文件
vars_prompt:用户交互模式自定义变量
setup:模块取远程主机值
task常用参数:
name:任务名称(屏幕展示信息)
action:定义执行的动作
copy:复制本地文件到远程主机
template:复制本地文件到远程主机,可以引用本地变量
service:定义服务状态
1、YAML 三板斧
- 缩进
YAML使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用TAB(默认,因为一个tab=4空格)
解决方案:
[root@m01 ~]# vim .vimrc
set tabstop=2
保存并推出,使用tab就是缩进2个空格
- 冒号
以冒号结尾的除外,其他所有冒号后面所有必须有空格
- 短横线
表示列表项,使用一个短横杠加一个空格
多项使用同样的缩进级别的同一列表
2、Playbook的核心元素
hosts:主机清单
tasks:任务
vars:变量
handlers:特定条件触发的任务
template:包含了模块语法的文本文件
ansible playbook 安装apache示例
[root@m01 ~]# cd /etc/ansible/ [root@m01 ansible]# mkdir ansible_playbook
为了统一管理所有ansible脚本都放到/etc/ansible/ansible_playbook
[root@m01 etc]# vim /etc/ansible/hosts #检查客户端配置
1、准备apache的配置文件
[root@m01 ansible_playbook]# mkdir -p /etc/ansible/ansible_playbook/conf
从其他项目中复制http.conf到 /etc/ansible/ansible_playbook/conf 下
修改配置文件 :端口
[root@m01 conf]# sed -i 's#Listen 80#Listen 8080#g' httpd.conf
编写apache安装启动剧本:
[root@m01 ansible_playbook]# cd /etc/ansible/ansible_playbook [root@m01 ansible_playbook]# vim apache.yaml
- hosts: web #主机组 tasks: # 任务 - name: Install Httpd #运行名称 yum: name=httpd state=installed - name: Configure Http.conf copy: src=./conf/httpd.conf dest=/etc/httpd/conf/httpd.conf notify: Restart Http Service #监控http.conf有无发生改变,如果变化,就触发 Restart Http Service - name: Start Http Service service: name=httpd state=started enabled=yes handlers: #触发任务 - name: Restart Http Service service: name=httpd state=restarted #重启
保存并推出:
命令格式:
ansible-playbook [option] filename
ansible-playbook 常用命令:
-C #模拟运行
--list-hosts #列出剧本主机清单
--list-tags #列出剧本标记
--list-tasks #列出剧本任务
--syntax-check #检测语法
[root@m01 ansible_playbook]# ansible-playbook --syntax-check apache.yaml #检查语法
[root@m01 ansible_playbook]# ansible-playbook --list-hosts apache.yaml #主机清单
[root@m01 ansible_playbook]# ansible-playbook --list-tasks apache.yaml #任务
[root@m01 ansible_playbook]# ansible-playbook -C apache.yaml #模拟运行剧本
[root@m01 ansible_playbook]# ansible-playbook -C apache.yaml PLAY [web] ************************************************************************************ TASK [Gathering Facts] ************************************************************************ ok: [192.168.1.67] TASK [Install Httpd] ************************************************************************** changed: [192.168.1.67] TASK [Start Http Service] ********************************************************************* changed: [192.168.1.67] PLAY RECAP ************************************************************************************ 192.168.1.67 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@m01 ansible_playbook]# ansible-playbook apache.yaml #运行剧本
[root@m01 ansible_playbook]# ansible-playbook apache.yaml PLAY [web] ************************************************************************************ TASK [Gathering Facts] ************************************************************************ ok: [192.168.1.67] TASK [Install Httpd] ************************************************************************** changed: [192.168.1.67] TASK [Start Http Service] ********************************************************************* changed: [192.168.1.67] PLAY RECAP ************************************************************************************ 192.168.1.67 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0