使用 import 和 include 拆分 Playbook
静态任务包含与动态任务包含
使用 import 和 include 拆分 Playbook 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
一个巨型文件会带来问题
一个包含 500 行的执行手册很难阅读和复用。Ansible 允许您将工作拆分成多个部分,并在需要时将它们引入。✂️
两类复用:import 和 include
Ansible 提供两种复用方式:import_* 用于静态引入,include_* 用于动态引入。区别在于执行时机。
静态 import_tasks
import_tasks 会在解析剧本时预处理,也就是在任何任务运行之前完成。它是固定且可预测的。
- import_tasks: setup.yml动态 include_tasks
include_tasks 会在运行时按顺序处理,因此可以根据剧本前面已经确定的变量和结果做出响应。
- include_tasks: "{{ os_family }}.yml"执行时机为何重要
由于 import 是静态的,您不能在它的文件名中使用运行时变量。此时需要改用动态的 include_tasks。
循环需要 include
想要重复执行整个文件吗?只有 include_tasks 支持循环,因为文件集合是在剧本运行期间确定的。
- include_tasks: user.yml
loop: "{{ users }}"标签的行为不同
import_tasks 上的标签会应用于每个引入的任务,而 include_tasks 上的标签只会应用于 include 语句本身。
引入整个剧本
在顶层使用 import_playbook 来组合整个剧本。这正是 site.yml 组装项目的方式。
- import_playbook: webservers.yml
- import_playbook: dbservers.yml跨剧本复用
像通用引导这样的共享任务文件可以引入到多个剧本中,这样您只需编写一次逻辑,就能在各处复用。
合理的默认选择
对于可预测且始终运行的步骤,优先使用 import。只有确实需要循环或变量文件名等运行时决策时,才使用 include。
拆分实践
这里的执行流程引入了一个静态设置文件,然后有条件地引入一个特定 OS 的文件。两个工具,各司其职。🎯
tasks:
- import_tasks: base.yml
- include_tasks: "{{ ansible_os_family }}.yml"快速检查
您需要根据运行时变量构造文件名。哪个指令可以实现?
回顾
您了解到 import_* 是静态的,会预先解析;而 include_* 是动态的,会在当前位置运行,因此支持循环和变量文件名。✅
常见问题解答
「使用 import 和 include 拆分 Playbook」课时是免费的吗?
是的 — 「使用 import 和 include 拆分 Playbook」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「使用 import 和 include 拆分 Playbook」这节课中我会学到什么?
静态任务包含与动态任务包含 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 import 和 include 拆分 Playbook」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 推荐的目录布局
- group_vars 和 host_vars 目录
- 使用 import 和 include 拆分 Playbook
- 可扩展的命名、注释与代码风格