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

一、ansible-playbook介绍:

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

1、playbook基础组件:

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

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

任务列表:

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

action

任务执行过程

handlers

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

2、实例:

[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的组成:

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、首先按照上面的要求创建要用到的目录

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

2、准备nginx配置文件

准备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 }};  \\调用获取到的函数
准备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包

[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目录中配置任务列表

[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信息

[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文件

[root@node1 playbook]# cat site.yml 
- hosts: nginx
  remote_user: root
  roles:
  - nginx

7、应用配置:

[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是否已启动

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

9、roles目录总体结构:

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

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/7001

(22)
马行空马行空
上一篇 2015-08-24 21:42
下一篇 2015-08-24 21:46

相关推荐

  • Tomcat基础及常见使用入门

    Tomcat的简单介绍,安装,以及简单的配置运用

    2017-09-11
  • 文本处理工具-习题

    1 、找出ifconfig 命令结果中本机的所有IPv4地址 [root@centos7 ~]# ifconfig |head -2 |tail-1 |cut -dn -f2 |cut -d" " -f2 2 、查出分区空间使用率的最大百分比值 [root@centos7 ~]# df |cut -c44-46 |sort -n|tail…

    Linux干货 2016-08-15
  • 【福利招聘】 Base 上海 拍拍货(红杉领投,靠谱金融公司) 共5人

    公司简介 拍拍贷成立于2007年6月,全称为“上海拍拍贷金融信息服务有限公司”,总部位于国际金融中心上海,是中国首批网络信息借贷平台。 拍拍贷是一家由工商部门特批,获批“金融信息服务”的经营范围,得到政府认可的互联网金融平台。拍拍贷用先进的理念和创新的技术建立一个安全、高效、透明的互联网金融平台,规范个人贷款行为,让借入这改善生产生活,让借出者增加投资渠道。…

    Linux干货 2016-12-05
  • vsftpd权限配置

    要求 :完成vsftpd配置,   (1) 禁锢系统用户于家目录;   (2) 基于mysql进行用户认证;   (3) 不同的虚拟用户拥有不同的权限设定. 解答:  (1) 首先安装需要的系统环境和软件 yum groupinstall -y "Development&nbsp…

    Linux干货 2016-10-24
  • test

    test

    Linux干货 2018-02-23
  • Liunx权限的管理

    一、权限 获取某种资源的能力。对于Liunx而言,一切皆文件。所以,对于Liunx的权限定义,也就是定义文件被不同用户访问能力的过程。 权限分为三种:r、w、x 文件 r:查看文件内容 w:修改文件内容 x:可以将文件启动运行 目录 r:可以使用ls命令查看目录中的文件名 w:可以在目录中创建或删除文件(能否删除文件,取决于用户对目录的写权限 x:可以cd到…

    Linux干货 2015-04-03

评论列表(2条)

  • stanley
    stanley 2015-08-24 21:45

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

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

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