键顺序¶
此规则建议重新排序 Ansible 内容中的键名,以使代码更易于维护且不易出错。
以下是一些针对任务和处理程序执行的常见排序检查示例
- 对于剧本、任务和处理程序,
name
必须始终是第一个键 - 在任务中,
block
、rescue
和always
键必须是最后一个键,这样可以避免在最后一个任务和父级之间发生意外的缩进错误。
问题代码¶
---
- hosts: localhost
name: This is a playbook # <-- name key should be the first one
tasks:
- name: A block
block:
- name: Display a message
debug:
msg: "Hello world!"
when: true # <-- when key should be before block
正确代码¶
---
- name: This is a playbook
hosts: localhost
tasks:
- name: A block
when: true
block:
- name: Display a message
debug:
msg: "Hello world!"
原因¶
为 Ansible 任务或剧本确定键的最佳顺序并非易事,因为我们需要考虑大量的组合。这也是我们从最小排序规则(name 作为第一个)开始,并旨在逐步添加更多字段的原因,并且只有在我们找到一个方法可能优于另一个方法的证据时才会这样做。
为什么我不再可以在 block
之后放置 when
?¶
试着记住,在现实生活中,block/rescue/always
由于它们内部承载的任务数量而往往会增长,使其超过单个屏幕的显示范围。这会将 when
任务从其余任务属性中移开。block
内最后一个任务的 when
很容易被误认为是在 block
级别,反之亦然。当任务从一个位置移动到另一个位置时,存在将 block
级别的 when
与其一起移动的真正风险。
通过将 when
置于 block
之前,我们可以避免这种风险。同样的风险也适用于任务级别的任何简单属性,这就是为什么我们得出结论:block
键必须是最后一个。
另一个常见做法是将 tags
作为最后一个属性。但是,出于同样的原因,我们决定也不应将其放在 block
键之后。
注意
可以使用 --fix
选项自动修复此规则。