Ansible Academy · 课时

defaults 与 vars:覆盖顺序

设计清晰的 Role 变量接口

第 2 / 4 课13 个步骤

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

两个变量文件夹

角色可以在两个位置定义变量:defaults/main.yml 和 vars/main.yml。它们看起来相似,但行为却大不相同。

defaults 较为宽松

defaults/main.yml 中的值具有最低优先级。它们只是宽松的建议,几乎任何其他来源都可以覆盖它们。

# defaults/main.yml
http_port: 80
workers: 4

vars 较为强制

vars/main.yml 中的值具有较高优先级。它们是角色坚持使用的固定决策,很难被覆盖。

# vars/main.yml
config_path: /etc/myapp

Defaults 是您的公开接口

将用户可能需要调整的内容放入 defaults。这传达的信息是:可以随意修改我。这是设计友好且可复用角色的方式。

Vars 是内部常量

将 vars 保留给角色运行所必需且用户不应修改的值,例如内部路径或固定的软件包名称。

轻松覆盖默认值

用户可以从 group_vars、host_vars、剧本或命令行覆盖 default。最直接的覆盖会立即生效。

roles:
  - role: web
    vars:
      http_port: 8080

覆盖 vars 值并不容易

角色 vars 的优先级高于 group_vars、host_vars 和剧本变量。只有命令行上的 extra-vars 优先级更高,因此请谨慎使用 vars。

Extra Vars 总是胜出

通过命令行上的 -e 传入的变量优先级高于所有其他来源,包括角色 vars。它们是最终的覆盖方式。

ansible-playbook site.yml -e http_port=9090

心中的优先级顺序

记住这条阶梯:底部是 defaults,然后是清单变量和剧本变量,接近顶部的是角色 vars,最上方则是 extra-vars。

设计提示

几乎所有内容都优先使用 defaults。只有当某个值确实必须锁定时,才使用 vars。灵活的角色能让团队更满意。

记录您的默认值

为 defaults/main.yml 中的每个值添加注释。由于用户会调整这些值,清晰的说明能让您的角色成为自解释的自动化方案。

快速检查

想一想,用户可以最容易覆盖哪个文件中的值。

回顾

使用 defaults 存放用户可以覆盖的可调值,使用 vars 存放锁定的内部常量。CLI 上的 extra-vars 优先级高于一切。🎚️

免费开始

用 AI 导师学习 YAML — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「defaults 与 vars:覆盖顺序」课时是免费的吗?

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

「defaults 与 vars:覆盖顺序」这节课中我会学到什么?

设计清晰的 Role 变量接口 你通过在浏览器中直接运行的动手代码来练习 Ansible Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ansible Academy 需要有经验吗?

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

「defaults 与 vars:覆盖顺序」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. meta/main.yml 中的 Role 依赖
  2. defaults 与 vars:覆盖顺序
  3. 运行时的 include_role 与 import_role
  4. allow_duplicates 与 Role 幂等性
← 返回 Ansible Academy