当前位置: 首页 > news >正文

自动化运维-ansible中对roles的创建与使用

自动化运维-ansible中对roles的创建与使用

一、Ansible 角色概述

角色的作用

随着 Playbook 复杂度增加,代码重复利用变得困难。Ansible 角色提供了一种标准化方式打包任务、变量、文件和模板,使得代码可以轻松地在不同项目间共享和重用。

角色的核心优势
  1. 模块化设计:将相关功能组织成独立单元
  2. 代码复用:轻松在不同项目间共享配置
  3. 协作开发:多个管理员可并行开发不同角色
  4. 易于维护:大型项目通过角色分解更易管理
  5. 社区支持:可从 Ansible Galaxy 获取社区贡献的角色

二、各目录作用说明

  1. defaults/main.yml - 定义默认变量,优先级最低,适合设置可覆盖的默认值
  2. vars/main.yml - 定义角色内部变量,优先级高,通常不应在playbook中修改
  3. tasks/main.yml - 包含角色的主要任务序列
  4. handlers/main.yml - 定义角色使用的处理器
  5. files/ - 存放静态文件,任务中可直接引用文件名
  6. templates/ - 存放Jinja2模板,任务中可直接引用模板名
  7. meta/main.yml - 包含角色作者、许可证、平台要求和依赖关系
  8. tests/ - 包含测试角色用的清单和playbook

三、执行顺序控制

Playbook 中任务执行顺序

  1. pre_tasks - 在角色之前执行
  2. roles - 按顺序执行角色任务
  3. tasks - 普通任务
  4. post_tasks - 在角色和普通任务后执行
  5. handlers - 被触发的处理器,最后执行

四、动态角色包含

除了静态角色定义,还可以在任务中动态包含角色

  • include_role:动态包含,在执行时处理
  • import_role:静态导入,在解析时处理

五、创建与使用角色

  1. 创建角色

    [student@master ansible]$ cd roles/
    [student@master roles]$ ansible-galaxy init testuser
    [student@master roles]$ ls testuser/
    

    在这里插入图片描述

  2. 给角色定义变量

    [student@master roles]$ cd testuser/
    [student@master testuser]$ vim vars/main.yml 
    # playbook内容如下
    ---
    a: 1
    b: 2
    c: 3
    
  3. 给角色写任务

    [student@master testuser]$ vim tasks/main.yml
    # 内容如下
    ---
    - name: test1debug:msg: "{{a}}"- name: test2debug:msg: "{{b}}"- name: test3debug:var: c
    
  4. 创建一个 playbook 来使用角色

    [student@master ansible]$ vim testuser.yml
    # playbook内容如下
    ---
    - name: testuhosts: node1roles:- testuser
    

    在这里插入图片描述

六、创建与使用角色示例

需求

在/etc/ansible/roles中创建名为http的角色

1、部署yum仓库

2、安装httpd软件包

3、模板文件index.html.j2已存在,用户创建具有以下输出的文件/var/www/html/index.html:

Welcome to HOSTNAME on IPADDRESS

当index.html内容发生改变时,重启httpd服务

其中HOSTNAME是受控节点的完全合格域名,IPADDRESS则是受控节点的IP地址

按照上方所述,创建一个使用此角色的playbook /etc/ansible/newrole.yml,该playbook在所有主机上运行

yum 仓库已经部署完成

  1. 创建 http 角色

    [student@master ansible]$ cd roles/
    [student@master roles]$ ansible-galaxy init http
    
  2. 新建 index.html.j2 模板

    [student@master http]$ vim templates/index.html.j2
    # 编辑内容如下
    Welcome to {{ansible_fqdn}} on {{ansible_default_ipv4.address}}
    
  3. 给角色写任务

    [student@master http]$ vim tasks/main.yml
    # 内容如下
    ---
    # tasks file for http
    - name: install httpd firewalldyum:name:- httpd- firewalldstate: present- name: cp filetemplate:src: index.html.j2dest: //var/www/html/index.html- name: restartedservice:name: "{{item}}"state: restartedenable: yesloop:- httpd- firewalld- name: set firewalldfirewalld:service: httpstate: enabledpermanent: yesimmediate: yes
    
  4. 创建一个 playbook 来使用角色

    [student@master ansible]$ vim httpuser.yml
    # 内容如下
    ---
    - name: webhosts: allroles:- http
    

    在这里插入图片描述

七、系统角色

  1. 安装系统角色

    [student@master ansible]$ sudo yum -y install rhel-system-roles
    

    在这里插入图片描述

  2. 将时钟同步的系统角色复制到/etc/ansible/roles目录下,并重名了角色名为timesync

    [student@master ansible]$ cp -r /usr/share/ansible/roles/rhel-system-roles.timesync -p roles/timesync
    
  3. 书写playbook,并执行

    [student@master ansible]$ vim timesync.yml
    # 内容如下
    ---
    - name: chronyhosts: test01vars:timesync_ntp_servers:- hostname: ansible.example.comiburst: yesroles:- timesync
    

    在这里插入图片描述


文章转载自:

http://484cmsI3.smrty.cn
http://N0iZK5ZU.smrty.cn
http://FyHJ7i1v.smrty.cn
http://pMaTPtk9.smrty.cn
http://tUZezdXo.smrty.cn
http://24Z7nR2W.smrty.cn
http://X1VzJFLM.smrty.cn
http://ZaR3ox2b.smrty.cn
http://yopr9UEw.smrty.cn
http://sW8daFrj.smrty.cn
http://ACnE1tOE.smrty.cn
http://Zk8fBR1t.smrty.cn
http://3T14xiz9.smrty.cn
http://aWqOgxxt.smrty.cn
http://f5hVJjN1.smrty.cn
http://LtpkQtsG.smrty.cn
http://vta9tiz1.smrty.cn
http://EaiRdhGw.smrty.cn
http://BXWZez8n.smrty.cn
http://iezBfqgN.smrty.cn
http://ZwfCSJuO.smrty.cn
http://u8cUdYLV.smrty.cn
http://wlBdqniZ.smrty.cn
http://HthvVrVA.smrty.cn
http://CS3fnDVH.smrty.cn
http://CztVIIuE.smrty.cn
http://awgA7kTE.smrty.cn
http://GLGhJyo4.smrty.cn
http://AtcDFDCc.smrty.cn
http://z2aPSeql.smrty.cn
http://www.dtcms.com/a/368351.html

相关文章:

  • 《Ceph集群数据同步异常的根因突破与恢复实践》
  • 从零开始的云计算生活——第五十九天,基于Jenkins自动打包并部署Tomcat环境
  • 串口通信的学习
  • 企业为何仍困在“数据孤岛”?——从iPaaS重构信息流的实践路径
  • MySQL 主从复制详解:部署与进阶配置
  • 一笔成形,秒绘标准图!Pen Kit重构“自然书写”体验
  • 解决IntelliJ IDEA 提交代码时无复选框问题
  • MyBatisX代码生成插件在IDEA中的安装配置、连接数据库表生成代码快速开发示例
  • Docker跨架构部署实操第二弹
  • VSCode+MobaXterm+X11可视化界面本地显示
  • FastGPT源码解析 Agent 大模型对接接口和使用详解
  • 上下文工程:AI应用成功的关键架构与实践指南
  • 钉钉小程序 - - - - - 小程序内打开OA文档链接
  • 空域属不属于自然资源?(GPT5)
  • RK3506:赋能多场景智能硬件的核心芯片
  • 嵌入式解谜日志—多路I/O复用
  • WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单
  • MongoDB 源码编译与调试:深入理解存储引擎设计
  • TensorFlow 面试题及详细答案 120道(91-100)-- 实际应用与案例
  • CAD:修改
  • MQTT 认证与授权机制实践(二)
  • RL【3】:Bellman Optimality Equation
  • Apache Ranger 详细介绍
  • 计算机网络IP协议
  • Git rm 命令与系统 rm 命令的区别详解
  • More Effective C++ 条款30:代理类
  • 织信低代码:用更聪明的方式,把想法变成现实!
  • MySQL数据库基础(DCL,DDL,DML)详解
  • 反序列化的学习笔记
  • Kafka 内存池MemoryPool 设计