zoukankan      html  css  js  c++  java
  • Ansible 三: Role

    前面的playbook适应用小型的工程,当我们维护的有多个工程的时候,我们希望工程分开执行,且每个工程都有自己的配置。这种大型工程就要用到Role的功能了。

    Role的功能依赖于目录命名规则和目录摆放,其实就是把不同的功能分发到不同目录下的yml文件去。

    roles:          <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles。这个位置也是可以自己改变的

      project:      <---具体的角色项目名称,比如nginx、tomcat、php

        files:     <--用来存放由copy模块或script模块调用的文件。

        templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。

        tasks:     <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。

          main.yml

        handlers:  <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。

          main.yml

        vars:      <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。

          main.yml

        defaults:  <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。

          main.yml

        meta:      <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。

          main.yml

    还是以之前创建文件,修改文件权限的playbook来重新规划roles的文件。文件结构如下。

    tasks目录下面三个文件。main.yml, task1.yml, task2.yml..

    main.yml中是include task1.yml和task2.yml

    - include: task1.yml

    - include: task2.yml

    task1.yml:

    - name: create a go file

      command: touch /home/go/{{file_name}}

    task2.yml, 其中定义了handler

    - name: change the mod

      command: chmod 755 /home/go/{{file_name}}

      notify: handler rm

    上面任务用到的变量file_name,定义在vars/main.yml中

    file_name: go_test.go

    handlers/main.yml 中定义了具体的handler处理动作

    - name: handler rm

      command: rm /home/go/{{file_name}}

    最后在role_test.yml中定义了具体要执行的role

    ---

    - hosts: webservers

      remote_user: wuqi

      roles:

    - role: role_test

    执行ansible-playbook role_test.yml 就可以了。这样就将之前的一个playbook的任务通过role的方式组织起来了

  • 相关阅读:
    414. Third Maximum Number 第三大的数字
    java 正则表达式
    将含有逻辑运算符的字符串解析为逻辑符号
    ora-01830:日期格式图片在转换整个输入字符串之前结束
    mysql的字符拼接
    oracle执行计划详解
    oracle获取执行计划及优缺点 详解
    kmp算法中的nextval实例解释
    kmp算法中的next数组实例解释
    哈夫曼实例解释(哈夫曼编码)
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/13045629.html
Copyright © 2011-2022 走看看