; ansible-playbook组件解析及操作全解 | Linux运维部落

ansible-playbook组件解析及操作全解

一、ansible-playbook介绍:

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

1、playbook基础组件:

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

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

任务列表:

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

action

任务执行过程

handlers

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

2、实例:

[root@node1playbook]#catweb.yml
-hosts:test\\主机组,在/etc/ansible/hosts定义
remote_user:root\\远端执行任务的用户
tasks:\\任务
-name:installhttpd\\任务描述
command:yum-yinstallhttpd\\调用ansible的command模块安装httpd
-name:providehttpd.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:\\文件内容变更通知
-serverrestart\\通知到指定的任务
-name:serverstart\\任务描述
service:name=httpdstate=startedenabled=true\\调用ansible的service模块的属性定义安装完成httpd以后httpd服务的管理
handlers:\\定义接受关注的资源变化后执行的动作
-name:serverrestart\\任务描述
service:name=httpdstate=restarted\\当关注的资源发生变化后调用service模块,采取的响应的动作
执行过程如下:
[root@node1playbook]#ansible-playbookweb.yml

PLAY[test]*******************************************************************

GATHERINGFACTS***************************************************************
ok:[172.16.2.13]

TASK:[installhttpd]*********************************************************
changed:[172.16.2.13]

TASK:[providehttpd.conf]****************************************************
changed:[172.16.2.13]

TASK:[serverstart]**********************************************************
changed:[172.16.2.13]

NOTIFIED:[serverrestart]****************************************************
changed:[172.16.2.13]

PLAYRECAP********************************************************************
172.16.2.13:ok=5changed=4unreachable=0failed=0

二、ansible的roles介绍:

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

rules的组成:

root@node1playbook]#treeroles/
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、首先按照上面的要求创建要用到的目录

[root@node1playbook]#mkdir-pvroles/nginx/{tasks,files,templates,handlers,vars,meta,default}

2、准备nginx配置文件

准备nginx.conf配置文件,使用模板文件配置
[root@node1playbook]#cdroles/nginx/templates/
[root@node1~]#ansibleall-msetup|grepansible_processor_cores
"ansible_processor_cores":1,\\获取ansible的要调用的相关函数
[root@node1playbook]#cdroles/nginx/templates/\\模板文件一定要放到此目录
[root@node1templates]#vimnginx.conf
worker_processes{{ansible_processor_cores}};\\调用获取到的函数
准备nginx的default.conf文件
[root@node1playbook]#ls-lroles/nginx/files/
-rw-r--r--.1rootroot1290Nov122014default.conf

3、准备nginx的rpm包

[root@node1playbook]#ls-lroles/nginx/files/
-rw-r--r--.1rootroot1290Nov122014default.conf
-rw-r--r--.1rootroot319456Mar2920:44nginx-1.4.7-1.el6.ngx.x86_64.rpm

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

[root@node1playbook]#cdroles/nginx/tasks/
[root@node1tasks]#vimmain.yml
-name:copynginx.rpm
copy:src=nginx-1.4.7-1.el6.ngx.x86_64.rpmdest=/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
-name:installnginx
shell:yum-yinstall/tmp/nginx-1.4.7-1.el6.ngx.x86_64.rpm
-name:providesnginx.conf
template:src=nginx.confdest=/etc/nginx/nginx.conf
tags:nginxconf
notify:
-serverrestart
-name:providesdefault.conf
copy:src=default.confdest=/etc/nginx/conf.d/default.conf
tags:nginxconf
-name:serverstart
service:name=nginxenabled=truestate=started

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

[root@node1playbook]#cdroles/nginx/handlers/
[root@node1handlers]#vimmain.yml
-name:serverrestart
service:name=nginxstate=restarted

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

[root@node1playbook]#catsite.yml
-hosts:nginx
remote_user:root
roles:
-nginx

7、应用配置:

[root@node1playbook]#ansible-playbooksite.yml

PLAY[nginx]******************************************************************

GATHERINGFACTS***************************************************************
ok:[172.16.2.13]

TASK:[nginx|copynginx.rpm]************************************************
ok:[172.16.2.13]

TASK:[nginx|installnginx]*************************************************
changed:[172.16.2.13]

TASK:[nginx|providesnginx.conf]*******************************************
changed:[172.16.2.13]

TASK:[nginx|providesdefault.conf]*****************************************
changed:[172.16.2.13]

TASK:[nginx|serverstart]**************************************************
changed:[172.16.2.13]

NOTIFIED:[nginx|serverrestart]********************************************
changed:[172.16.2.13]

PLAYRECAP********************************************************************
172.16.2.13:ok=7changed=5unreachable=0failed=0

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

[root@node2~]#ss-tpln|grep80
LISTEN0128*:80*:*users:(("nginx",8934,8),("nginx",8936,8))

9、roles目录总体结构:

[root@node1playbook]#treeroles/
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常用的知识已介绍完毕,仅个人学习总结,大家有疑问的话可以一起交流。

原创文章,作者:马行空,如若转载,请注明出处:/7001

评论列表(2条)

  • stanley
    stanley 2015-08-24 21:45

    最近也在研究ansible,有问题一块探讨, /doc/ansible/ 翻译项目有兴趣的话也可以共同玩耍

    • 马行空
      马行空 2015-08-25 09:20

      好的,Ansible中文权威qq全已添加,谢谢

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐招商  万达主管QQ  万达直属  万达注册  万达直属QQ  万达娱乐平台  万达娱乐开户  万达娱乐  华宇招商