ansible playbook(2) roles与include

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.

案例

一个项目的结构如下:

  • site.yml
  • webservers.yml
  • fooservers.yml
  • roles/
    • common/
      • files/
      • templates/
      • tasks/
      • handlers/
      • vars/
      • defaults/
      • meta/
    • webservers/
      • files/
      • templates/
      • tasks/
      • handlers/
      • vars/
      • defaults/
      • meta/

一个 playbook 如下:

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

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

  • 如果 roles/online/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
  • 如果 roles/online/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
  • 如果 roles/online/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
  • 如果 roles/online/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
  • 所有 copy tasks 可以引用 roles/online/files/ 中的文件,不需要指明文件的路径。
  • 所有 script tasks 可以引用 roles/online/files/ 中的脚本,不需要指明文件的路径。
  • 所有 template tasks 可以引用 roles/online/templates/ 中的文件,不需要指明文件的路径。
  • 所有 include tasks 可以引用 roles/online/tasks/ 中的文件,不需要指明文件的路径。

在 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

你可能感兴趣的:(ansible playbook(2) roles与include)