ansible PlayBook
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible PlayBook相关的知识,希望对你有一定的参考价值。
**一、PlayBook的作用**
之前的模块都是使用Ad-hoc方式(Ad-hoc方式是一种可以快速输入的命令,而且不需要保存起来的命令,相当于bash中的一句
话shell)点对点命令执行,可以管理远程主机,但如果服务器数量比较多,配置信息也比较多,可以利用Ansible PlayBook
编
写剧本,以更加简便的方式实现任务处理的自动化和流程化。
**二、PlayBook组成及参数详解**
PlayBook是由一个或多个“play”组成的列表,play的主要功能是为Ansible中的task定义好的角色,指定剧本对应的服务器
组。
相当于task是一个任务,task调用Ansible的各种模块,将多个play组织在一个playbook剧本中,全部组成一个完整的流程控
制集合
1、PlayBook组件包括
target:定义PlayBook的远程主机组
variable:定义PlayBook使用的变量
task:定义远程主机上执行的任务列表
handler:定义task执行完成后需要调用的任务,例如修改配置文件之后,启动跟handler任务重启相关联的服务
2、target常用参数详解
hosts:定义远程主机组
user:执行该任务的用户
sudo:设置为yes的时候,执行任务使用root权限
sudo_user:指定sudo的普通用户
connection:默认基于SSH链接客户端
gather_facks:获取远程主机facts基础信息
3、variable常用参数详解
vars:定义格式,变量名:变量值
vars_files:指定变量文件
vars_prompt:用户交互模式自定义变量
setup:模块取远程主机的值
4、task常用参数详解
name:任务显示名称也是屏幕显示信息
action:定义执行的动作
copy:复制本地文件到远程主机
template:复制本地文件到远程主机,可以引用本地变量
service:定义服务的状态
基于Ansible PlayBook还可以收集命令、创建任务集,可以大大降低管理工作的复杂程度,PlayBook采用YAML语法结构
**三、YAML语言特性**
YAML(yet another markup language)是一种直观的能被电脑识别的数据序列化格式,是一个容易阅读,和脚本语言交互,用
来表达资料序列的编程语言。YAML使用空白字符和分行来分隔资料,适合用Python、Ruby、Perl、grep来操作。
YAML语言特性为:
可读性强
和脚本语言的交互性好
使用实现语言的数据类型
一致的信息模型
易于实现
可以基于流来处理
可扩展性强
四、Ansible PlayBook示例
(1)判断是否需要安装某个服务
检测远程主机是否由nginx服务,不存在则安装nginx服务,安装完成后并启动nginx
1.1 编写脚本
PlayBook代码如下,文件名是xxx.yml
#apache
---
- hosts: huawei
user: xiaowang
become: yes #是否允许身份切换
become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo
tasks:
- name: Apache server Install
yum: name=httpd state=installed
notify: #notify”这个action可用于在每个play的最后被触发,notify中调用handler中定义的操作
- start httpd
handlers:
- name: start httpd
service: name=httpd state=started enabled=yes
ansible-playbook apache.yml -i /etc/ansible/ssh/hosts
(2)PlayBook远程修改配置文件
安装好了之后,我们可以把http的发布页面从本地发送给远程服务器上面去
这是只需要在tasks里面添加一个任务即可
代码如下:
#apache
---
- hosts: huawei
user: xiaowang
become: yes #是否允许身份切换
become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo
tasks:
- name: Apache server Install
yum: name=httpd state=installed
notify: #notify”这个action可用于在每个play的最后被触发,notify中调用handler中定义的操作
- start httpd
- name: Apache server index.html Update
copy: src=/mnt/index.html dest=/var/www/html/ mode=644
handlers:
- name: start httpd
service: name=httpd state=started enabled=yes
(3)PlayBook自定义模版
Ansible PlayBook还可以自定义template模版文件,模板文件主要是用于服务器需求不一致、需要独立定义的情况。
templates模板:
功能:根据模块文件动态生成对应的配置文件
使用方法:
(1)templates文件必须存放在templates目录下,且以.j2为后缀
(2)templates模块只能被playbook调用
(3)yam文件需和templates目录平级,目录结构如下:
./
├── temnginx.yml
└── templates
└── nginx.conf.j2
**示例1:使用template传输配置文件**
创建templates目录
cp /etc/nginx/nginx.conf templates/nginx.conf.j2
vim testtemplate.yml
---
– hosts: huawei
become: yes
become_method: sudo
user: xiaowang
tasks:
– name: install package
yum: name=nginx
– name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
– name: start service
service: name=nginx state=started enabled=yes
ansible-playbook testtemplate.yml -i /etc/ansible/ssh/hosts
示例2:template引用系统变量
**ansible roles角色**
playbook roles角色这个词一直不知道怎么解释,这么说吧,我们常用的lnmp环境,可以分为nginx
管理、mysql管理、php 管理等,如果我们使用playbook写成一个文件,这个文件会很大,但是不方
便组织,我们可以分组,将 其按大组分类,再细分为 具体的小任务。
以上是关于ansible PlayBook的主要内容,如果未能解决你的问题,请参考以下文章