Role标准目录结构
roles/nginx/ # 角色名nginx├── defaults/ # 默认变量优先级最低可被外部覆盖│ └── main.yml├── vars/ # 角色内部固定变量优先级高于defaults│ └── main.yml├── tasks/ # 核心执行任务必须有main.yml入口│ └── main.yml├── handlers/ # 触发器notify触发如重启服务│ └── main.yml├── templates/ # jinja2模板文件 .j2│ └── nginx.conf.j2├── files/ # 静态文件直接复制不渲染模板│ └── index.html├── meta/ # 角色依赖、平台声明│ └── main.yml├── README.md # 角色说明文档└── tests/ # 测试用play可选└── test.yml核心目录详解tasks/main.yml必选角色执行的核心步骤安装包、创建目录、复制文件、启动服务等。defaults/main.ymlRole默认参数外部 playbook、inventory 变量可以覆盖这里的值。适合开放给使用者自定义。vars/main.yml角色内部硬编码变量优先级高于 defaults外部很难覆盖存放不希望用户修改的内部参数。handlers/main.yml仅被 notify 触发只有对应任务 changed 时才执行常用于重启、重载服务。templates/存放 jinja2 模板使用 template 模块渲染支持变量插值、循环判断。files/纯静态文件copy 模块直接推送不做变量渲染。回到顶部第一个Role实战案例可使用ansible自带的工具ansible-galaxy初始化Role工程初始化Role工程rootmaster:/data00/ansible# ansible-galaxy init roles/testRole roles/test was created successfully查看对应工程的结构rootmaster:/data00/ansible# tree rolesroles└── test├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars└── main.yml编写tasksrootmaster:/data00/ansible# cat roles/test/tasks/main.ymlname: 分发静态文件copy:src: “{{ src_file_path }}”dest: “{{ dest_file_path }}”mode: 744backup: truenotify: 静态文件分发成功tags: copy_staticname: 分发j2文件template:src: “{{ src_j2_file_path }}”dest: “{{ dest_j2_file_path }}”mode: 744backup: truenotify: j2文件分发成功tags: template_j2编写handlerrootmaster:/data00/ansible# cat roles/test/handlers/main.ymlhandlername: 静态文件分发成功debug:msg: “静态文件分发成功”name: j2文件分发成功debug:msg: “j2文件分发成功”配置变量rootmaster:/data00/ansible# cat roles/test/vars/main.ymlsrc_file_path: nginx.confdest_file_path: /tmp/nginx.confsrc_j2_file_path: mod.j2dest_j2_file_path: /tmp/mod配置静态文件nginx.confrootmaster:/data00/ansible# cat roles/test/files/nginx.confserver {listen 80;server_name www.huangsir.com;root /var/www/html;location / {index index.html;}}配置j2模版文件rootmaster:/data00/ansible# cat roles/test/templates/mod.j2“主机名:{{ ansible_hostname }}”“ip:{{ ansible_all_ipv4_addresses }}”“系统名称:{{ ansible_distribution }}”“系统总内存:{{ ansible_memtotal_mb }}”“系统可用内存:{{ ansible_memfree_mb }}”“系统内存情况:{{ ansible_memory_mb }}”“cpu总数:{{ ansible_processor_vcpus }}”编写顶层playbookrootmaster:/data00/ansible# cat roles/main.yamlname: 第一个roleshosts: es这里的test指定的是我们创建的目录名称roles:{role: test, tags: test,mysql}也可以针对对应的roles配置主机清单文件rootmaster:/data00/ansible# cat roles/hosts[web]10.37.99.6310.37.120.9[db]10.37.99.63[es]10.37.120.9整体工程结构rootmaster:/data00/ansible# tree rolesroles├── hosts├── main.yaml└── test├── defaults│ └── main.yml├── files│ └── nginx.conf├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates│ └── mod.j2├── tests│ ├── inventory│ └── test.yml└── vars└── main.yml测试运行role运行role和运行剧本没什么区别直接使用ansible-playbook命令运行即可-i指定清单文件rootmaster:/data00/ansible# ansible-playbook -i roles/hosts roles/main.yamlPLAY [第一个roles] ***********************************************************************************************************************************************************************************************TASK [Gathering Facts] *******************************************************************************************************************************************************************************************ok: [10.37.120.9]TASK [test : 分发静态文件] ***************************************************************************************************************************************************************************************changed: [10.37.120.9]TASK [test : 分发j2文件] *****************************************************************************************************************************************************************************************[WARNING]: Deprecation warnings can be disabled by settingdeprecation_warningsFalsein ansible.cfg.[DEPRECATION WARNING]: INJECT_FACTS_AS_VARS default toTrueis deprecated, top-level facts will not be auto injected after the change. This feature will be removed from ansible-core version 2.24.Origin: /data00/ansible/roles/test/templates/mod.j2Useansible_facts[fact_name](noansible_prefix) instead.changed: [10.37.120.9]RUNNING HANDLER [test : 静态文件分发成功] ************************************************************************************************************************************************************************ok: [10.37.120.9] {“msg”: “静态文件分发成功”}RUNNING HANDLER [test : j2文件分发成功] **************************************************************************************************************************************************************************ok: [10.37.120.9] {“msg”: “j2文件分发成功”}PLAY RECAP *******************************************************************************************************************************************************************************************************10.37.120.9 : ok5 changed2 unreachable0 failed0 skipped0 rescued0 ignored0

相关新闻

数字电路核心组件:寄存器、存储器与定时器详解

数字电路核心组件:寄存器、存储器与定时器详解

1. 寄存器:数字电路的核心记忆单元寄存器是数字系统中用于临时存储二进制数据的基本构建块。作为时序逻辑电路的一种,寄存器在处理器架构、通信协议和各类控制系统中扮演着关键角色。一个典型的8位寄存器由8个D触发器构成,每个触发器存储1位数…

2026/7/19 5:03:39阅读更多 →
STC8H8K64U实现USB HID设备开发指南

STC8H8K64U实现USB HID设备开发指南

1. STC8H8K64U模拟USB HID外设项目概述STC8H8K64U是STC微控制器家族中首款支持USB外设功能的芯片。这款8位8051内核的MCU内置了全速USB2.0控制器,使其能够模拟各类USB人机接口设备(HID),如键盘、鼠标、游戏手柄等。相比传统的USB转串口方案,直…

2026/7/19 5:01:39阅读更多 →
Android消息机制:sendToTarget与sendMessage对比分析

Android消息机制:sendToTarget与sendMessage对比分析

1. Android消息机制中的sendToTarget与sendMessage对比在Android开发中,Handler和Message是线程间通信的核心组件。当我们需要在不同线程间传递消息时,通常会遇到两种看似相同但实际存在差异的发送方式:sendToTarget()和sendMessage()。这两种…

2026/7/19 5:01:39阅读更多 →
如何快速掌握LuaJIT字节码逆向:专业反编译工具实战指南

如何快速掌握LuaJIT字节码逆向:专业反编译工具实战指南

如何快速掌握LuaJIT字节码逆向:专业反编译工具实战指南 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler 如果你正在寻找一款能够将LuaJIT编译后的二进制字…

2026/7/19 14:15:00阅读更多 →
第 2 章 顺序表和 vector

第 2 章 顺序表和 vector

1. P3156 【深基15.例1】询问学号 #include<iostream> #include<vector> using namespace std; const int N 2e65; vector<int> a(N); int main(){int n,m; cin >> n >> m;for(int i 1;i<n;i) cin >> a[i];int x;while(m--){cin >…

2026/7/19 14:15:00阅读更多 →
Make a README 终极指南:如何快速创建专业项目文档的完整教程

Make a README 终极指南:如何快速创建专业项目文档的完整教程

Make a README 终极指南&#xff1a;如何快速创建专业项目文档的完整教程 【免费下载链接】make-a-readme :page_facing_up: Because nobody can read your mind (yet) 项目地址: https://gitcode.com/gh_mirrors/ma/make-a-readme Make a README 是一个专注于帮助开发者…

2026/7/19 14:15:00阅读更多 →
iNiR社区与生态系统:如何参与贡献、报告问题和获取支持

iNiR社区与生态系统:如何参与贡献、报告问题和获取支持

iNiR社区与生态系统&#xff1a;如何参与贡献、报告问题和获取支持 【免费下载链接】iNiR A Niri shell illogical-impulse based - with some modifications.. 项目地址: https://gitcode.com/gh_mirrors/in/iNiR iNiR是一个基于Quickshell框架构建的完整桌面shell&…

2026/7/19 14:15:00阅读更多 →
AI写作论文工具哪个靠谱?2026年6款实测横评,第1款让效率翻10倍

AI写作论文工具哪个靠谱?2026年6款实测横评,第1款让效率翻10倍

【一句话答案】2026年主流AI写作论文工具中&#xff0c;毕业之家AI&#xff08;www.biye.com&#xff09;以学术场景深度定制、真实文献支撑和查重降重闭环&#xff0c;综合体验领先通用大模型一个身位。一、现状&#xff1a;写论文的人越来越多&#xff0c;会挑工具的人越来越…

2026/7/19 14:15:00阅读更多 →
三伏黄金养阳期,常喝这杯草本温茶,温润舒爽过盛夏

三伏黄金养阳期,常喝这杯草本温茶,温润舒爽过盛夏

在传统节气养生理念中&#xff0c;三伏不只是酷暑难耐的时段&#xff0c;更是顺应天时、温润养阳、调和身心的黄金周期。夏季人体代谢加快、毛孔舒展&#xff0c;日常顺应时节温和养护&#xff0c;帮助身体疏解沉闷浊气、温润调和气血&#xff0c;慢慢调整夏日疲惫、畏寒、精神…

2026/7/19 14:13:00阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →