一、ansible-playbook介绍:

playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来将,所谓的task无法是调用ansible的一个module。将多个paly组织在一个playbook中,即可以让他们联通起来按事先编排的机制同唱一台大戏。

1、playbook基础组件:

hosts

1
playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。

user

1
remote_user则用于指定远程主机上的执行任务的用户。

任务列表:

1
play的主体部分是task list. task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。

action

1
任务执行过程

handlers

1
用于当前关注的资源发生变化时采取一定指定的操作

2、实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@node1 playbook]# cat web.yml
- hosts: test  \\主机组,在/etc/ansible/hosts定义
  remote_user: root  \\远端执行任务的用户
  tasks: \\任务
  - name: install httpd  \\任务描述
    command: yum -y install httpd  \\调用ansible的command模块安装httpd
  - name: provide httpd.conf \\任务描述
    copy: src="/root/httpd.conf" dest="/etc/httpd/conf/httpd.conf" \\调用ansible的copy模块,httpd安装完成后将事先准备好的httpd.conf文件复制到/etc/httpd/conf目录下
    tags: conf  \\给此任务打标记,可单独执行标记的任务,使用 ansible-playbook -C 命令执行
    notify:  \\文件内容变更通知
    - server restart  \\通知到指定的任务
  - name: server start  \\任务描述
    service: name=httpd state=started enabled=true \\调用ansible的service模块的属性定义安装完成httpd以后httpd服务的管理
  handlers: \\定义接受关注的资源变化后执行的动作
  - name: server restart  \\任务描述
    service: name=httpd state=restarted   \\当关注的资源发生变化后调用service模块,采取的响应的动作
执行过程如下:
 [root@node1 playbook]# ansible-playbook web.yml 
 
PLAY [test] ******************************************************************* 
 
GATHERING FACTS *************************************************************** 
ok: [172.16.2.13]
 
TASK: [install httpd] ********************************************************* 
changed: [172.16.2.13]
 
TASK: [provide httpd.conf] **************************************************** 
changed: [172.16.2.13]
 
TASK: [server start] ********************************************************** 
changed: [172.16.2.13]
 
NOTIFIED: [server restart] **************************************************** 
changed: [172.16.2.13]
 
PLAY RECAP ******************************************************************** 
172.16.2.13                : ok=5    changed=4    unreachable=0    failed=0

二、ansible的roles介绍:

ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。

rules的组成:

1
2
3
4
5
6
7
8
9
10
root@node1 playbook]# tree  roles/
roles/ \\ansible所有的信息都放到此目录下面对应的目录中
└── nginx  \\角色名称
    ├── default  \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
    ├── files  \\存放有copy或script等模块调用的文件
    ├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
    ├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
    ├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
    ├── templates \\template模块会自动在此目录中寻找Jinja2模板文件
    └── vars  \\应当包含一个main.yml文件,用于定义此角色用到的变量

roles介绍完了,那么我们就利用ansible的roles来配置nginx

1、首先按照上面的要求创建要用到的目录

1
[root@node1 playbook]# mkdir -pv roles/nginx/{tasks,files,templates,handlers,vars,meta,default}

2、准备nginx配置文件

1
2
3
4
5
6
7
准备nginx.conf配置文件,使用模板文件配置
[root@node1 playbook]# cd roles/nginx/templates/
[root@node1 ~]# ansible all -m setup | grep ansible_processor_cores
        "ansible_processor_cores": 1,  \\获取ansible的要调用的相关函数
[root@node1 playbook]# cd roles/nginx/templates/   \\模板文件一定要放到此目录     
[root@node1 templates]# vim nginx.conf 
worker_processes {{  ansible_processor_cores }};  \\调用获取到的函数
1
2
3
准备nginx的default.conf文件
[root@node1 playbook]# ls -l roles/nginx/files/
-rw-r--r--. 1 root root 1290 Nov 12  2014 default.conf

3、准备nginx的rpm包

1
2
3
[root@node1 playbook]# ls -l  roles/nginx/files/
-rw-r--r--. 1 root root   1290 Nov 12  2014 default.conf
-rw-r--r--. 1 root root 319456 Mar 29 20:44 nginx-1.4.7-1.el6.ngx.x86_64.rpm

4、在tasks目录中配置任务列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@node1 playbook]# cd  roles/nginx/tasks/
[root@node1 tasks]# vim  main.yml 
  - name: copy nginx.rpm
    copy: src=nginx-1.4.7-1.el6.ngx.x86_64.rpm  dest=/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
  - name: install nginx
    shell: yum -y  install /tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
  - name: provides nginx.conf
    template: src=nginx.conf  dest=/etc/nginx/nginx.conf
    tags: nginxconf
    notify:
    - server restart
  - name: provides default.conf
    copy: src=default.conf dest=/etc/nginx/conf.d/default.conf 
    tags: nginxconf
  - name: server start
    service: name=nginx enabled=true state=started

5、在handlers目录中配置定义handler信息

1
2
3
4
[root@node1 playbook]# cd roles/nginx/handlers/
[root@node1 handlers]# vim  main.yml 
- name: server restart
  service: name=nginx  state=restarted

6、在roles同一级目录中创建site.yml文件

1
2
3
4
5
[root@node1 playbook]# cat site.yml 
- hosts: nginx
  remote_user: root
  roles:
  - nginx

7、应用配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@node1 playbook]# ansible-playbook site.yml 
 
PLAY [nginx] ****************************************************************** 
 
GATHERING FACTS *************************************************************** 
ok: [172.16.2.13]
 
TASK: [nginx | copy nginx.rpm] ************************************************ 
ok: [172.16.2.13]
 
TASK: [nginx | install nginx] ************************************************* 
changed: [172.16.2.13]
 
TASK: [nginx | provides nginx.conf] ******************************************* 
changed: [172.16.2.13]
 
TASK: [nginx | provides default.conf] ***************************************** 
changed: [172.16.2.13]
 
TASK: [nginx | server start] ************************************************** 
changed: [172.16.2.13]
 
NOTIFIED: [nginx | server restart] ******************************************** 
changed: [172.16.2.13]
 
PLAY RECAP ******************************************************************** 
172.16.2.13                : ok=7    changed=5    unreachable=0    failed=0

8、在node2主机上查看nginx是否已启动

1
2
[root@node2 ~]# ss -tpln | grep 80
LISTEN     0      128                       *:80                       *:*      users:(("nginx",8934,8),("nginx",8936,8))

9、roles目录总体结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@node1 playbook]# tree roles/
roles/
└── nginx
    ├── default
    ├── files
    │  ├── default.conf
    │  └── nginx-1.4.7-1.el6.ngx.x86_64.rpm
    ├── handlers
    │  └── main.yml
    ├── meta
    ├── tasks
    │  └── main.yml
    ├── templates
    │  └── nginx.conf
    └── vars

到此ansible常用的知识已介绍完毕,仅个人学习总结,大家有疑问的话可以一起交流。

注:转载自:linux运维部落 » ansible-playbook

ansible-playbook的更多相关文章

  1. Ansible playbook API 开发 调用测试

    Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...

  2. ansible playbook实践(四)-如何调试写好的playbook文件

    有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...

  3. ansible playbook批量改ssh配置文件,远程用户Permission denied

    最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...

  4. ansible笔记(11):初识ansible playbook(二)

    ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...

  5. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  6. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  7. 写Ansible playbook添加zabbix被监控的对象

    本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...

  8. Ansible playbook基础组件介绍

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

  9. ansible playbook基本操作

    一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...

  10. ansible入门四(Ansible playbook基础组件介绍)

    本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...

随机推荐

  1. linux下dos环境和unix环境转换

    DOS转UNIX::setfileformat=unix UNIX转DOS::setfileformat=dos and :set ff=unix

  2. React知识点总结1

    最近打算把react知识点总结下: React特点 1.虚拟DOM 在内存中操作DOM,在内存中创建数据结构,只会更新有差异的地方 2.组件化 页面分成若干个组件,每个组件包含逻辑结构和样式 组件仅包 ...

  3. AIX 环境下ODM库同步

    IBM AIX v5.3操作系统环境下有时会出现ODM库与rootvg硬盘上数据不同步的情况.使用命令lsvg -l datavg检查文件系统类型,发现显示为"???"这就表示OD ...

  4. GridView控件RowDataBound事件中获取列字段途径

    今天不知道怎么回事怎么也找不到gridview列中的控件,关键是其为编辑时隐藏域中的控件,取值就很成问题了,网上搜了很到,找到这个比较经典的东东了,可能大家都知道,但很少对比整理到一起,有多种方法可以 ...

  5. VB.NET TextBox 只允许输入1-100之间的整数 简洁篇

    Dim Str As String = "" Private Sub txtRecond_KeyUp(sender As System.Object, e As System.Wi ...

  6. centos分区

    /boot :用来存放与 Linux 系统启动有关的程序,比如启动引导装载程序等,建议大小为 100MB . /usr :用来存放 Linux 系统中的应用程序,其相关数据较多,建议大于 3GB 以上 ...

  7. spring mvc 第四天【注解实现springmvc 配合使用Exception Resolver 的配置】

    Tips:这里使用具体springmvc的异常处理只是拿一个简单的案例来说明问题,并不做实用,如有需求可做更改: 这里演示的仅是能够实现service验证的一种方案,如有更好的请留言我会努力学习!! ...

  8. hdu4578 Transformation

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 题目大意:n个数(初始为0)m个操作,操作类型有4种,操作1把区间的每个数+a,操作2把区间的每 ...

  9. 直接用<img> 的src属性显示base64转码后的字符串成图片

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...

  10. poj 3692 Kindergarten (最大独立集)

    Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4903   Accepted: 2387 Desc ...