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的方式组织起来了

posted @ 2020-06-04 19:35  red_leaf_412  阅读(371)  评论(0)    收藏  举报