在执行ansible剧本的时候出现了如下错误:
ERROR! [DEPRECATED]: ansible.builtin.include has been removed. Use include_tasks or import_tasks instead. This feature was removed from ansible-core in a release after 2023-05-16. Please update your playbooks.
下面为你详细分析并给出解决办法:
错误原因分析
在旧版本的 Ansible 中,ansible.builtin.include
模块用于动态地包含任务文件。然而,为了提升剧本的清晰度和可维护性,Ansible 社区决定废弃这一模块,并引入了 include_tasks
(动态包含)和 import_tasks
(静态包含)两个新的模块。
解决方案
1. 理解 include_tasks
和 import_tasks
的差异
include_tasks
:在剧本运行时解析和包含任务文件,适用于需要根据变量或条件动态决定是否包含任务文件的情况。import_tasks
:在剧本解析阶段就包含任务文件,适用于需要在剧本运行前确定所有任务,并在模板渲染时访问所有导入任务变量的情况。
2. 修改剧本
假设你的剧本中有如下使用 ansible.builtin.include
的代码:
- name: Include tasks from another file ansible.builtin.include: other_tasks.yml
你可以根据实际需求将其替换为 include_tasks
或 import_tasks
:
使用 include_tasks
:
- name: Dynamically include tasks from another file include_tasks: other_tasks.yml
使用 import_tasks
:
- name: Statically import tasks from another file import_tasks: other_tasks.yml
3. 全局替换(如果适用)
如果你的多个剧本文件都使用了 ansible.builtin.include
,可以使用文本编辑器或命令行工具(如 sed
)进行全局替换。例如,使用 sed
命令:
# 使用 sed 命令将 ansible.builtin.include 替换为 include_tasks(或 import_tasks) sed -i 's/ansible\.builtin\.include/include_tasks/g' *.yml # 如果需要替换为 import_tasks,只需将上面的 include_tasks 改为 import_tasks
总结
- 将剧本中所有的
ansible.builtin.include
替换为include_tasks
或import_tasks
。 - 根据具体需求选择动态包含(
include_tasks
)或静态包含(import_tasks
)。 - 替换完成后,重新运行 Ansible 剧本,确认错误是否已解决。
原创文章,作者:保哥,如若转载,请注明出处:https://www.shizhanxia.com/2228.html