美文网首页
ansible playbook(2) roles与includ

ansible playbook(2) roles与includ

作者: xuweizhen | 来源:发表于2018-08-02 13:51 被阅读0次

    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与includ

          本文链接:https://www.haomeiwen.com/subject/oarrvftx.html