role的定义与使用

  • Post author:
  • Post category:Ansible
  • Page Views 750 阅读

1.概念

所谓的role是一种规范的文件组织方式。它只是抽象的一种概念,而不是实质存在的东西。role的存在是为了更好的维护playbook。

role和playbook的区别就是:playbook会明确哪些远程服务器需要执行哪些任务;而role只是保存需要执行的任务。我们需要在playbook中引用roles。

role的目录结构,每个目录或者文件都不是必须的,都是可选的:

[root@Ansible ansible]# ll roles/geerlingguy.nginx/
total 16
drwxr-xr-x. 2 root root    22 May 11 17:17 defaults
drwxr-xr-x. 2 root root    22 May 11 17:17 handlers
-rw-rw-r--. 1 root root  1080 Jun  7  2019 LICENSE
drwxr-xr-x. 2 root root    50 May 11 17:17 meta
drwxr-xr-x. 3 root root    21 May 11 17:17 molecule
-rw-rw-r--. 1 root root 11497 Jun  7  2019 README.md
drwxr-xr-x. 2 root root   189 May 11 17:17 tasks
drwxr-xr-x. 2 root root    64 May 11 17:17 templates
drwxr-xr-x. 2 root root   101 May 11 17:17 vars

各个目录及文件的意义:

  • default/main.yml:可以覆盖的默认变量。
  • files:保存需要上到到服务器的文件。
  • handlers/main.yml:包含所有的handler。
  • meta/main.yml:role的依赖信息。
  • tasks/main.yml:包含任务列表。
  • templates:保存jinja2模板。
  • vars/main.yml:不应该被覆盖的变量。

2.ansible-galaxy管理role

ansible-galaxy是一个命令行工具,可以使用它创建一个标准的role结构目录。galaxy.ansible.com是一个playbook的分享平台,可以直接下载安装自己所需要的role。

初始化一个roles的目录结构:

[root@Ansible ansible]# ansible-galaxy init roles/test
- Role roles/test was created successfully
[root@Ansible ansible]# ll roles/test/
total 4
drwxr-xr-x. 2 root root   22 Sep 23 21:49 defaults
drwxr-xr-x. 2 root root    6 Sep 23 21:49 files
drwxr-xr-x. 2 root root   22 Sep 23 21:49 handlers
drwxr-xr-x. 2 root root   22 Sep 23 21:49 meta
-rw-r--r--. 1 root root 1328 Sep 23 21:49 README.md
drwxr-xr-x. 2 root root   22 Sep 23 21:49 tasks
drwxr-xr-x. 2 root root    6 Sep 23 21:49 templates
drwxr-xr-x. 2 root root   39 Sep 23 21:49 tests
drwxr-xr-x. 2 root root   22 Sep 23 21:49 vars

安装一个role:

 ansible-galaxy install 作者ID.roles名称
[root@Ansible roles]# ansible-galaxy install -p /etc/ansible/roles/ bennojoy.mysql
- downloading role 'mysql', owned by bennojoy
- downloading role from https://github.com/bennojoy/mysql/archive/master.tar.gz
- extracting bennojoy.mysql to /etc/ansible/roles/bennojoy.mysql
- bennojoy.mysql (master) was installed successfully
[root@Ansible roles]# ll
total 0
drwxr-xr-x.  8 root root 109 Sep 23 21:53 bennojoy.mysql
drwxr-xr-x. 10 root root 154 Sep 23 21:49 test

在playbook中引用roles:

---
- hosts: dbservers
  roles:
  - role: bennojoy.mysql


「 文章如果对你有帮助,请点个赞哦^^ 」 

1+