Roles介绍
在使用Ansible的过程中,可能会编写大量的playbook,那么这些playbook又该如何管理呢?答案就是使用Roles。Ansible中的Roles就是一种目录结构的规范。按照这个规范,Ansible就会到特定目录/文件中读取数据。
Roles中的目录规范
- defaults/main.yml: 定义变量的缺省值
- tasks/main.yml: 存放任务
- templates: 存放模板文件
- vars/main.yml:定义变量
- handlers/main.yml: 定义handlers
- meta/main.yml: 定义Metadata
- files: 存放静态文件
通过ansible-galaxy管理自己的roles
运行如下命令初始化一个基于Roles的Ansible项目:
mkdir roles
cd roles
ansible-galaxy init demo
其输出结果类似于:
> demo tree .
.
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Roles示例
templates/homepage.j2
Welcome to {{ansible_hostname}}
Contact email: {{info_email}}
vars/main.yml
---
# vars file for demo
info_email: [email protected]
tasks/main.yml
需要注意的是,由于已经在tasks目录中,因此不需要再定义 tasks 了:
- name: create index.html
template:
src: homepage.j2
dest: /tmp/index.html
其实,对于Role中的各个子目录,由于约定已经形成,因此都不需要写路径。
在Playbook中调用Role
两种方式:
- 在role所在目录下创建一个playbook并调用Role
- 在ansible.cfg中设置role_path
[defaults]
roles_path=/home/lcoding/tutorials/ansible/roles
我们这里选择第二种方式,在Ansible项目所在目录下(/home/lcoding/tutorials/ansible)创建一个Playbook:testrole.yml:
---
- hosts: dev
roles:
- demo
和Role相关的命令
在线搜索roles:
ansible-galaxy search 'xxx'
查看某个role信息:
ansible-galaxy info xxx
下载role到特定目录:
ansible-galaxy install xxx -p ~/ansible/roles
列出本地roles:
ansible-galaxy list -p roles