Ansible Role
Ansible Roles是ansible自1.2版本开始引入的新特性,用于层次性、结构化地组织playbook。
Roles能够根据层次型结构自动加载template、变量文件、tasks以及handlers等。
1. Role路径
# /home/user/.ansible/roles
# /usr/share/ansible/roles
# /etc/ansible/roles
2. 下载系统Role
# yum install -y rhel-system-rols
# ansible-galaxy list - linux-system-roles.kdump, (unknown version) - linux-system-roles.network, (unknown version) - linux-system-roles.postfix, (unknown version) - linux-system-roles.selinux, (unknown version) - linux-system-roles.timesync, (unknown version) - rhel-system-roles.kdump, (unknown version) - rhel-system-roles.network, (unknown version) - rhel-system-roles.postfix, (unknown version) - rhel-system-roles.selinux, (unknown version) - rhel-system-roles.timesync, (unknown version)
3. 从指定地点下载Role
# cat install_role.yaml
- src: https://github.com/bennojoy/nginx
path: vagrant/roles/
# from github, overriding the name and specifying a specific tag
- src: https://github.com/bennojoy/nginx
version: master
name: nginx_role
# ansible-galaxy install -r install_role.yaml
4. 创建Role
使用方法可以参考系统Role的示例,路径:/usr/share/doc/rhel-system-roles/
# cd /etc/ansible/roles # ansible-galaxy init test-role # tree test-role . ├── defaults # 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。 │ └── main.yml ├── files # 用来存放由copy模块或script模块调用的文件。 ├── handlers # 此目录应当包含一个main.yml文件,被task中的notify调用。 │ └── main.yml ├── meta # 存放Role相关信息,如作者,许可证,平台等信息。 │ └── main.yml ├── README.md ├── tasks # 此目录应当包含一个main.yml文件,用于定义此角色的任务列表。 │ └── main.yml ├── templates # 用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件,而不需要写路径。 ├── tests # 用于Role测试。 │ ├── inventory │ └── test.yml └── vars # 此目录应当包含一个main.yml文件,用于定义此角色用到的变量。 └── main.yml
5. 调用Role
---
- name:
hosts: dev
vars:
xxx: xxx
roles:
- test-role