Ansible Roles
基本概念
Roles介绍
Ansible从1.2版本开始支持Roles。Roles是管理Ansible文件的一种规范(目录结构),可以更加高效地、层次性的组织playbooks,通常角色存放在/etc/ansible/roles/目录下,也可定义其他目录。
Roles分别将变量、文件、任务、模板以及处理器放在单独的目录中,再把一些固定的值,如用户名、软件包、服务等,用变量来表示。执行Ansible时按照标准的规范,自动到特定的目录和文件中读取数据,适合比较复杂的场景,可实现playbook重用。
Roles规范的目录结构
例如创建名称为user.example的Role,目录名user.example就是角色名,至少要有一个tasks任务,其他目录可选择,其标准的目录结构如下所示:
Roles应用
创建role
使用ansible-galaxy命令可以创建、管理自己的roles。
1、 创建角色目录
[root@pubserver ansible]# mkdir roles
[root@pubserver ansible]# ansible-galaxy init roles/motd
- roles/motd was created successfully
2、 创建名为motd的角色
[root@pubserver ansible]# yum -y install tree
[root@pubserver ansible]# ls roles/
motd
3、查看生成的角色目录
[root@pubserver ansible]# tree roles/motd/
roles/motd/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
修改role
将不同的内容分别写到对应目录的main.yml中,代码示意如下:
1、创建motd模板文件
[root@pubserver ansible]# vim roles/motd/templates/motd
Hostname: {{ansible_hostname}}
Date: {{ansible_date_time.date}}
Contact to: {{admin}}
2、创建变量
[root@pubserver ansible]# vim roles/motd/vars/main.yml
---
# vars file for roles/motd
admin: lzl@tedu.cn
3、创建任务
[root@pubserver ansible]# vim roles/motd/tasks/main.yml
---
- name: modify motd
template:
src: motd
dest: /etc/motd
在Playbook中调用Role
1、声明角色存放的位置
在ansible.cfg设置roles_path=路径,代码示意如下:
[root@pubserver ansible]# vim ansible.cfg
[defaults]
host_key_checking = false
inventory = inventory
roles_path = roles
2、创建playbook,调用motd角色
编写playbook文件,通过roles关键词调用role,代码示意如下:
[root@pubserver ansible]# vim role_motd.yml
---
- name: modify motd with role
hosts: webservers
roles:
- motd
3、执行playbook
[root@pubserver ansible]# ansible-playbook role_motd.yml
PLAY [modify motd with role] ***********************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [web1]
ok: [web2]
TASK [motd : modify motd] **************************************************************************************************************************
changed: [web1]
changed: [web2]
PLAY RECAP *****************************************************************************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0