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 @   red_leaf_412  阅读(365)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示