Ansible 2.11升级后需用模块全名?shell模块重写及冲突疑问
Ansible 2.11+ 模块全限定名使用相关问题解答
1. 旧Playbook里的shell要不要改成ansible.builtin.shell?
不是必须立刻修改,但建议逐步迁移到全限定名(FQCN)。Ansible 2.11之后仍支持短名调用内置模块,但官方的长期规划是推进FQCN的使用,后续版本可能会降低短名的匹配优先级,甚至完全移除短名支持。早做迁移能避免未来的兼容性问题,也让Playbook的模块调用更明确,可读性更强。
2. 谁会覆盖这类基础模块?
虽然大部分场景下没人会特意去覆盖shell这类核心内置模块,但特殊情况确实存在:
- 公司内部自定义的集合中,可能因命名巧合出现同名模块;
- 引入的第三方集合里,作者可能不小心命名冲突。
这种情况下,如果继续用短名调用,Ansible会按照集合优先级顺序匹配模块,大概率会调用到非内置的那个,导致执行结果不符合预期。
3. 引入含同名shell模块的集合会触发冲突异常吗?
不会直接触发冲突异常,但会出现模块匹配优先级的问题。Ansible的模块查找顺序是:
- 优先查找当前Playbook指定的集合;
- 其次查找全局配置中定义的集合路径;
- 最后才会匹配
ansible.builtin中的内置模块。
也就是说,当你引入了含同名shell的第三方集合,用短名shell调用时,会优先执行第三方集合里的模块,而非内置的shell。只有明确使用ansible.builtin.shell,才能强制调用内置模块。
内容的提问来源于stack exchange,提问作者voipp
相关产品推荐
相关产品推荐

