0Pricing
Ansible Academy · 课时

变量的来源与优先级

初步了解变量来源

变量的来源与优先级 是 CoddyKit 上的免费 Ansible Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ansible Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ansible Academy 课程共包含 4 节课。

来源如此之多

同一个变量可以在许多地方设置:清单、剧本变量、文件、CLI 等。那么最终到底哪个值会生效?🌟

优先级决定结果

Ansible 遵循称为变量优先级的固定顺序。当一个名称被设置两次时,优先级较高的来源会覆盖较低的来源。

角色默认值优先级最低

角色 defaults 文件夹中的值处于最底层。它们的设计目标是能够轻松被几乎所有其他来源覆盖。

# roles/web/defaults/main.yml
http_port: 80

清单变量

在清单中设置的变量(例如 group_vars 或 host_vars 中的变量)优先级高于角色默认值,但低于剧本级变量。

# group_vars/web.yml
http_port: 8080

剧本变量优先级更高

剧本 vars 键下的变量优先级高于清单值。在这里定义的值会覆盖 group_vars 中的任何值。

- hosts: web
  vars:
    http_port: 9090

任务变量范围更窄

您可以将 vars 附加到单个任务上。该值只在此处生效,优先级高于范围更广的剧本变量。

- debug:
    var: http_port
  vars:
    http_port: 1234

register 与 set_fact

使用 register 捕获的值,或在运行期间通过 set_fact 设置的值,在优先级顺序中处于较高位置,仅低于额外变量。

- set_fact:
    http_port: 7000

额外变量优先级最高

命令行中的额外变量会覆盖其他所有来源。您通过 -e 传入的内容,就是本次运行的最终值。

ansible-playbook site.yml -e http_port=443

同一层级中,最后定义的值生效

当两个来源处于同一层级时,最后加载的来源会生效。先比较优先级,再用加载顺序解决同级冲突。

保持简单

您很少需要记住完整的优先级表。将合理的值放入 defaults,有意地进行覆盖,并避免在各处设置同一个名称。

调试实际获得的值

不确定哪个值最终生效?使用 debug 将解析后的结果打印出来,再决定是否在生产环境中信任它。

- debug:
    var: http_port

快速检查

哪个变量来源的优先级最高?

回顾

您梳理了变量优先级阶梯:defaults 最低,其次是清单变量、剧本变量和任务变量,然后是 set_fact,最上面是额外变量。✨

常见问题解答

「变量的来源与优先级」课时是免费的吗?

是的 — 「变量的来源与优先级」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ansible Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ansible Academy 课程共包含 4 节课。

「变量的来源与优先级」这节课中我会学到什么?

初步了解变量来源 你通过在浏览器中直接运行的动手代码来练习 Ansible Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ansible Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ansible Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「变量的来源与优先级」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ansible Academy 课中编写并运行代码吗?

能。每节 Ansible Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 在剧中定义和使用 vars
  2. {{ }} 替换语法
  3. 命令行中的额外变量
  4. 变量的来源与优先级
← 返回 Ansible Academy