Ansible playbook roles

时间:2019-03-21
本文章向大家介绍Ansible playbook roles,主要包括Ansible playbook roles使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1  概述

角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义。

  • 目录结构清晰

  • 可以重复使用

参考: http://www.ansible.com.cn/docs/playbooks_roles.html 

        https://blog.51cto.com/ghbsunny/2047084

2  配置介绍

以层级结构组织Playbook的核心元素,成为roles。

核心元素包括以下几点:

        Hosts:主机

        Tasks:任务列表

        Variables:变量

        Templates:包含了模板语法的文本文件;

        Handlers:由特定条件触发的任务;

在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合:

如roles/创建如下的目录

mysql/

httpd/

nginx/

memcached/

roles模块的路径可以在配置文件/etc/ansible/ansible.cfg里roles_path定义.

 

每个角色,以特定的层级目录结构进行组织,例子如下:

/roles/mysql/

  • files/ :存放由copy或script模块等调用的文件;
  • templates/:template模块查找所需要模板文件的目录;
  • tasks/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
  • handlers/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
  • vars/:至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含;
  • meta/:至少应该包含一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要在此文件中通过include进行包含;注意,角色和角色之间有依赖关系,如安装NT,先装nginx后装tomcat,一般不需定义,执行我们自己定义好安装顺序即可
  • default/:设定默认变量时使用此目录中的main.yml文件;
nginx/
├── files   静态文件
├── tasks   任务列表
│   ├── copyfile.yml
│   ├── installnginx.yml
│   ├── main.yml   入口文件
│   └── start.yml
├── templates 模板文件
│   └── nginx.conf
└── vars  变量
└── handlers  被触发的动作

3  playbook调用角色

playbook调用角色有三个方法:

方法1:

- hosts: websrvs
  remote_user: root
  roles:
  - mysql
  - memcached
  - nginx

方法2:传递变量给角色,调用角色时,注意依赖关系,可以自己先考虑好先后顺序

- hosts: 
  remote_user:
  roles:
  - { role: nginx, username: nginx }  #键role用于指定角色名称;后续的k/v用于传递变量给角色;

方法3:基于条件测试实现角色调用;

roles:
- { role: nginx, when: "ansible_distribution_major_version == '7' " }

4  例子