ansible-playbook
一、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的更多相关文章
- Ansible playbook API 开发 调用测试
Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible ...
- ansible playbook实践(四)-如何调试写好的playbook文件
有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...
- ansible playbook批量改ssh配置文件,远程用户Permission denied
最近手里的数百台服务器需要改/etc/ssh/sshd_config的参数,禁止root直接登陆,也就是说 [root@t0 ~]# cat /etc/ssh/sshd_config | grep R ...
- ansible笔记(11):初识ansible playbook(二)
ansible笔记():初识ansible playbook(二) 有前文作为基础,如下示例是非常容易理解的: --- - hosts: test211 remote_user: root tasks ...
- ansible笔记(10):初识ansible playbook
ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- 写Ansible playbook添加zabbix被监控的对象
本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...
- Ansible playbook基础组件介绍
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
- ansible playbook基本操作
一.ansible playbook简单使用 相当于是把模块写入到配置文件里面 vim /etc/ansible/test.yml //写入如下内容: --- - hosts: 127.0.0.1 r ...
- ansible入门四(Ansible playbook基础组件介绍)
本节内容: ansible playbook介绍 ansible playbook基础组件 playbook中使用变量 一.ansible playbook介绍 playbook是由一个或多个“pla ...
随机推荐
- 接口与继承ppt作业
问:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来? 答:子类拥有父的成员变量和成员方法,如果不调用,则从父类继承而来的成员变量和成员方法得不到正确的初始化.不 ...
- Application、 session、iewstate,以及repeater 的commang用法
Session:在不同的浏览器之间传值,像银行之类的网站为了安全把用户名密码保存在session里面.每一台电脑访问服务器,都会是独立的一套session,key值都一样,但是内容都是不一样的 以 ...
- Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...
- C#字符串(截取)
1.按照逗号进行截取,并存放在一个数组中 eq:截取字符串,并放在数组中:string[] strArray = strPaths.Split(','); 获取某一个值 string s1=strAr ...
- python---socketserver模块
在<python---socket模块>中通过socket模块实现了串行处理的socket通信 在python中可以通过socketserver模块实现并发通信,而socketserver ...
- 时间服务器:NTP 服务器
15.1 关于时区与网络校时的通讯协议 使得每一部主机的时间同步化. DHCP 客户端/服务器端所需要的租约时间限制. 网络侦测时所需要注意的时间点.刚刚谈到的登录文件分析功能.具有相关性的主 ...
- Memcached安装配置及访问
1.Memcached键值对访问,对于网页来说,key需要使用uri. 2.Memcached的相关配置 memcached:缓存服务器,但本身无法决定缓存任何数据 一半依赖于客户端,一半依赖于服务端 ...
- STP的作用和操作
STP的作用 STP通过阻塞端口来消除环路,并能够实现链路备份的目的 STP的操作 选举一个根桥 比较交换机的桥ID,越小越优先 桥ID 是8个字节,2个字节的优先级+6个字节的MAC地址 2.每个 ...
- IE6-8下自定义标签的表现
IE6-8是支持自定义标签,但只支持<xxx-yyy />这样的形式,它会翻译成<xxx-yyy></xxx-yyy> 如果你想内套子标签会失败, <ms-k ...
- hadoop-2.2.0 的编译安装及HA配置
一 准备工作 准备工作中要求有 1.centOs 6.4,添加hadoop用户,配置集群内的/etc/hosts文件. 2.安装hadoop用户的ssh,并打通集群内所有机器,(ha执行fencing ...