ansible PlayBook

自动化运维 2019-07-31 46 次浏览 次点赞

**一、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][1]

本文由 laowang 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论