Ansible-core 2.15 移植指南
本节讨论 ansible-core
2.14 和 ansible-core
2.15 之间的行为变化。
旨在帮助您更新您的剧本、插件以及 Ansible 基础架构的其他部分,以便它们能够与 Ansible 的此版本一起使用。
我们建议您阅读此页面以及 ansible-core 2.15 的变更日志,以了解您可能需要进行哪些更新。
本文件是关于移植的集合的一部分。完整的移植指南列表可以在 移植指南 中找到。
剧本
条件语句 - 由于在 ansible-core 2.15.7 中缓解了安全问题 CVE-2023-5764,包含嵌入式模板块的条件表达式可能会失败,并显示消息“
Conditional is marked as unsafe, and cannot be evaluated.
”,当嵌入式模板从不受信任的来源(如模块结果或标记为!unsafe
的变量)中查询数据时。包含嵌入式模板的条件语句在引用不受信任的数据时可能是恶意模板注入的来源,并且几乎总是可以重写而无需嵌入式模板。剧本任务条件关键字(例如when
和until
)长期以来一直显示警告,不建议在条件语句中使用嵌入式模板;此警告也已扩展到非任务条件语句,例如assert
动作。- name: task with a module result (always untrusted by Ansible) shell: echo "hi mom" register: untrusted_result # don't do it this way... # - name: insecure conditional with embedded template consulting untrusted data # assert: # that: '"hi mom" is in {{ untrusted_result.stdout }}' - name: securely access untrusted values directly as Jinja variables instead assert: that: '"hi mom" is in untrusted_result.stdout'
处理器
如文档中所述,如果已定义多个特定名称的处理器,则在被通知时,添加到剧本中的最后一个处理器将被执行。在 ansible-core
2.15 之前,对于使用 include_role
任务动态添加到剧本中的处理器,情况并非如此。此问题已在 ansible-core
2.15 中得到解决,依赖于 ansible-core
2.14 和更早版本行为的用户可能需要相应地调整其剧本。
例如,考虑以下行为变化:
- include_role: name: foo vars: invocation: 1 - block: - include_role: name: foo vars: invocation: 2 when: inventory_hostname == "bar" - meta: flush_handlers
注意
此示例假设角色 foo
中有一个任务,该任务通知角色 foo
中名为 foo_handler
的处理器。
注意
将不同的变量和/或其值附加到包含相同角色的 include_role
任务,使它们成为不同的角色。
注意
第二次调用 include_role
任务会导致包含角色中的任务和处理器,而不管 when
条件评估结果如何。when
条件附加到包装 include_role
任务的 block
,因此 when
条件将应用于将角色中的所有任务和处理器包含到剧本中之后。
当 flush_handlers
任务运行时,所有主机都已在第一次调用 include_role
时通知了 foo_handler
。此外,主机 bar
(由于 when
限制所有其他主机)在第二次调用 include_role
时再次通知了 foo_handler
。
在 ansible-core
2.15 上,添加到剧本中的最后一个名为 foo_handler
的处理器来自第二次 include_role
调用,因此它附加了 when: inventory_hostname == "bar"
,导致处理器实际上仅在主机 bar
上运行,并在所有其他主机上跳过。因此,来自主机 bar
的通知已被去重。
在 ansible-core
2.14 和更早版本上,第一次调用的 foo_handler
会在所有主机上运行。此外,第二次调用的 foo_handler
会再次在主机 bar
上运行。
命令行
ansible-galaxy search
的返回代码现在为 0 而不是 1,当结果为空时,stdout 也为空,以与其他ansible-galaxy
命令保持一致。
已弃用
为
vars:
提供字典列表已弃用,建议改用提供一个字典。不要使用:
vars: - var1: foo - var2: bar
请使用:
vars: var1: foo var2: bar
模块
无重大更改
已移除的模块
以下模块不再存在
无重大更改
弃用通知
无重大更改
值得注意的模块更改
无重大更改
插件
无重大更改
移植自定义脚本
无重大更改
网络
无重大更改