Ansible教程:Roles


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

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !
  目录