roles

roles 介绍

ansible 自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次结构自动装在边梁文杰、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以边界的include他们的一种机制。角色一般基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

一个roles的案例如下所示:

site.yml
wevservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
wevservers/
files/
templates/
tasks/
handlers/
vars/
meta/

而在playbook中,可以这样使用roles:

-hosts: wevservers
roles:
- common
- wevservers

也可以向roles传递参数,例如:

- hosts: webservers
roles:
- common
- { role: foo_app_instance, dir: '/opt/a', port: 5000 }
- { role: foo_app_instance, dir: '/opt/b', port: 5001 }

甚至也可以条件式地使用roles,例如:

- hostss: webservers
roles:
- { role: some_role, when: "ansible_os_family == 'RedHat'" }

创建role的步骤

  1. 创建以roles命名的目录;
  2. 在roles目录中分别创建以各校色名称命名的目录,如webservers等;
  3. 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建;
  4. 在playbook文件中,调用各角色;

role内个目录中可用的文件

目录名 说明
tasks目录 至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;文件可以使用include包含其它的位于此目录中的task文件;
file目录 存放由copy或script等模块调用的文件;
templates目录 template模块会自动在此目录中寻找Jinja2模板文件;
handlers目录 此目录中应当包含一个main.yml文件,用于定义此角色用到的各handler;在handler中使用include包含的其它handler文件也应该位于此目录中;
vars目录 应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录 因当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3 及其以后的版本才支持;
default目录 为当前角色设定默认变量时使用此目录,因当包含一个main.yml文件;

案例

创建roles所需的目录

[root@node-1 ansible]# mkdir -pv ansible_playbook/roles/{webservs,dbservs}/{tasks,files,templates,meta,handlers,vars}
[root@node-1 ansible]# tree ansible_playbook/
ansible_playbook/
└── roles
├── dbservs
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
└── webservs
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars

以webservs来举例

首先进入到webservs角色对应的目录

[root@node-1 ansible_playbook]# cd roles/webservs/
[root@node-1 webservs]# ls
files handlers meta tasks templates vars
[root@node-1 webservs]# pwd
/etc/ansible/ansible_playbook/roles/webservs

然后拷贝httpd配置文件

[root@node-1 webservs]# cp /etc/httpd/conf/httpd.conf files/

定义tasks

[root@node-1 webservs]# cat tasks/main.yml
- name: install httpd package
yum: name=httpd state=present
- name: install configuration file
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
tags:
- conf
notify:
- restart httpd
- name: start httpd
service: name=httpd state=started

定义handlers

[root@node-1 webservs]# cat handlers/main.yml
- name: restart httpd
service: name=httpd state=restarted

然后到roles目录下

[root@node-1 webservs]# cd ../../
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles

定义site.yml

这里site.yml是固定用法

[root@node-1 ansible_playbook]# cat site.yml
- hosts: webservs
remote_user: root
roles:
- webservs
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles site.yml

最后执行site.yml

[root@node-1 ansible_playbook]# ansible-playbook site.yml

PLAY [webservs] **********************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [10.25.196.25] TASK [webservs : install httpd package] **********************************************************************************************************************
changed: [10.25.196.25] TASK [webservs : install configuration file] *****************************************************************************************************************
ok: [10.25.196.25] TASK [webservs : start httpd] ********************************************************************************************************************************
changed: [10.25.196.25] PLAY RECAP ***************************************************************************************************************************************************
10.25.196.25 : ok=4 changed=2 unreachable=0 failed=0

可以看到执行成功了,下面来查看一下

[root@node-1 ansible_playbook]# ansible webservs -m shell -a 'rpm -qa httpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running rpm. If you need to use command because yum, dnf or zypper is insufficient you
can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message. 10.25.196.25 | SUCCESS | rc=0 >>
httpd-2.2.15-69.el6.centos.x86_64 [root@node-1 ansible_playbook]# ansible webservs -m shell -a 'ps aux | grep httpd'
10.25.196.25 | SUCCESS | rc=0 >>
root 19148 0.0 0.0 175536 3764 ? Ss 21:08 0:00 /usr/sbin/httpd
apache 19150 0.0 0.0 175536 2476 ? S 21:08 0:00 /usr/sbin/httpd
apache 19151 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19152 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19153 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19154 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19155 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19156 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19157 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
root 19335 0.0 0.0 106104 1128 pts/1 S+ 21:16 0:00 /bin/sh -c ps aux | grep httpd
root 19337 0.0 0.0 103260 832 pts/1 S+ 21:16 0:00 grep httpd

可以看到服务都是启动正常的。

总结:

最后的site.yml中,可以定义多个hosts,分别执行不同的任务.这样所有的代码都可以被反复使用。

  1. 目录名同角色名;
  2. 目录结构有固定格式;

ansible roles 介绍和使用的更多相关文章

  1. ansible roles 目录规范

    我的ansible roles项目的目录结构: (ansible_venv) [root@localhost ansible_home]# tree ansible_playbooks/ ansibl ...

  2. Ansible Playbooks 介绍 和 使用 二

    目录 handlers playbook 案例 2 handlers vars 变量 setup facts 变量使用 案例 inventory 中定义变量 案例 条件测试 when 语句 案例 迭代 ...

  3. 6.Ansible Roles角色实战

    ==Roles小技巧:== 1.创建roles目录结构,手动或使用ansible-galaxy init test roles 2.编写roles的功能,也就是tasks. nginx rsyncd ...

  4. Ansible简单介绍(一)

    一 :ansible简单介绍 此名取自 Ansible 作者最喜爱的<安德的游戏> 小说,而这部小说更被后人改编成电影 -<战争游戏>. 官网地址:https://www.an ...

  5. Ansible--06 ansible roles

    Ansible roles roles不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,我们肯定需要把不同的工作模块,拆分开来,解耦 ...

  6. ansible roles 自动化安装

    例:  ansible roles 自动化安装memcached 文件目录结构如下: cat memcached_role.yml - hosts: memcached remote_user: ro ...

  7. 第二十七章 ansible变量介绍

    一.ansible变量介绍 1.概念 变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲 ...

  8. ansible roles实践——安装nginx

    1.创建roles 在/etc/ansible/roles目录下 1.1 手动创建需要的目录 1.2 使用命令创建,用不到的目录可以创建为空目录,但不可以不创建. 创建目录[root@master] ...

  9. Ansible之roles介绍

    本节内容: 什么场景下会用roles? roles示例 一.什么场景下会用roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务 ...

随机推荐

  1. pyEcharts安装及使用指南

    pyEcharts安装及使用指南 ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类库ZRender,提供直观 ...

  2. python中@property装饰器的使用

    目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...

  3. Pandas常用基本功能

    Series 和 DataFrame还未构建完成的朋友可以参考我的上一篇博文:https://www.cnblogs.com/zry-yt/p/11794941.html 当我们构建好了 Series ...

  4. [转载]2.1 UiPath条件判断活动If的介绍和使用

    一.if的介绍 if语句是指编程语言(包括c语言.C#.Python.Java.汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一. 二.if在UiPath ...

  5. Mybatis自定义TypeHandler解决特殊类型转换问题

    我们知道,Java和MySQL中的数据类型是不同的,Java中除了基本数据类型,还有对象. 有时候使用MySQL存储数据,或者从MySQL中读取数据时,会有一些特殊需求

  6. 你了解MySQL的加锁规则吗?

    注:加锁规则指的是next-key lock,如果还不了解next-key lock,请阅读上一篇博客 加锁规则可以概括为:两个原则.两个优化和一个bug: 原则1:加锁的基本单位是next-key ...

  7. Linux中文件的SUID、SGID、Sticky权限说明

    1.SUID 首先我们要了解,在Linux中启动一个程序或者启动一个进程是需要有用户的,一个文件的存在是要有用户和组的,一个进程启动后,它的属主取决于进程的发起者,比如 我用root用户启动了一个 c ...

  8. LocalDate类

    LocalDate类与Date类不同.Date类是距离一个固定时间点的毫秒数(UTC 1970.1.1 00:00:00) Date类表示时间点,LocalDate类用来表示日历表示法. import ...

  9. 网站搭建-windows 系统 本地 网站搭建 - IIS

    上一章有提到IIS安装,现在打开它: 点击浏览,如果没有启动的话,先点击启动. ip先选好,第一个吧,本机的(IIS自己提供了初始网页的东西). 然后可以自己去https://www.freemoba ...

  10. nyoj 79-拦截导弹 (动态规划)

    79-拦截导弹 内存限制:64MB 时间限制:3000ms 特判: No 通过数:9 提交数:11 难度:3 题目描述: 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个 ...