ansible playbook(2) roles与includ

2018-08-02  本文已影响0人  xuweizhen

ansible中的roles和include

在初次学完playbook之后,想要完成一整套的自动化部署,肯定要写出一大段复杂的playbook,而且部署不同的服务器也很麻烦,可能面对不同的hosts组需要编写不同的playbook,执行的时候就做不到一键执行。

如何用最好的方式去组织playbook?

roles和include就解决了这样的问题。

roles角色

Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles
例如:
联机服务3台,我设置为online角色
数据库服务2台,我设置为database角色
每一个角色都有自己的一整套playbook,这样可以区分每一个角色要执行的task,管理属于自己的文件,变量,用户名等都特别清晰方便。
在汇总的playbook中,使用include将所有角色的playbook引入进来,就相当于执行了一整套的playbook.

案例

一个项目的结构如下:

一个 playbook 如下:

---
- hosts: webservers
  roles:
     - common
     - webservers

这个 playbook 为一个角色 ‘online’ 指定了如下的行为:

在 site.yml 中,我们包含了一个定义了整个基础设施的 playbook.注意这个 playbook 是非常短的, 因为它仅仅包含了其他 playbooks.记住, playbook 不过就是一系列的 plays:

---
# file: site.yml
- include: webservers.yml
- include: fooservers.yml

在诸如 like webservers.yml 的文件中(同样也在顶层结构),我们仅仅将 Web 服务器组与对应的 role 行为做映射.同样值得注意的是这也非常的短小精悍.例如:

---
# file: webservers.yml
- hosts: webservers
  roles:
    - common
    - webservers

理念是我们能够通过 “运行”(running) site.yml 来选择整个基础设施的配置.或者我们能够通过运行其子集 webservers.yml 来配置. 这与 Ansible 的 “–limit” 类似,而且相对的更为显式:

ansible-playbook site.yml --limit webservers
ansible-playbook webservers.yml

参考文档
ansible roles和include介绍:http://www.ansible.com.cn/docs/playbooks_roles.html
ansible playbook最佳实践:http://www.ansible.com.cn/docs/playbooks_best_practices.html

上一篇 下一篇

猜你喜欢

热点阅读