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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM