我使用一台 Fedora 39 机器来管理另一台 Fedora 39 机器,使用的是 Ansible 剧本。这工作正常。
我尝试使用 Ubuntu 22.04 运行相同的剧本,目标是同一台 Fedora 39 机器。它失败了。为什么会失败?
任务 [收集事实] ****************************************************************************************************************
严重错误:[alan-laptop]: 失败!=> {"ansible_facts": {}, "changed": false, "failed_modules": {"ansible.legacy.setup": {"failed": true, "module_stderr": "共享连接到 alan-laptop 已关闭。
", "module_stdout":
追踪栈 (最近的调用最后):
文件 "/home/alan-sysop/.ansible/tmp/ansible-tmp-1716281784.2385828-132440-85599417152925/AnsiballZ_setup.py", 第 102 行, 在 <module>
_ansiballz_main()
文件 "/home/alan-sysop/.ansible/tmp/ansible-tmp-1716281784.2385828-132440-85599417152925/AnsiballZ_setup.py", 第 94 行, 在 _ansiballz_main
invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
文件 "/home/alan-sysop/.ansible/tmp/ansible-tmp-1716281784.2385828-132440-85599417152925/AnsiballZ_setup.py", 第 37 行, 在 invoke_module
from ansible.module_utils import basic
文件 "/tmp/ansible_ansible.legacy.setup_payload_0vjz3har/ansible_ansible.legacy.setup_payload.zip/ansible/module_utils/basic.py", 第 176 行, 在 <module>
ModuleNotFoundError: 没有名为 'ansible.module_utils.six.moves' 的模块;
", "msg": "模块失败\n查看 stdout/stderr 获取确切的错误", "rc": 1}}, "msg": "以下模块未能执行: ansible.legacy.setup"}
我的 Ansible 包版本是 2.10.7+merged+base+2.10.8+dfsg-1ubuntu0.1~esm1。
Fedora 39 使用了 Python 3.12。据说这个版本对于 Ansible 来说太新了(?)。
无论如何,我不期望 Ubuntu 22.04 中包含的 Ansible 版本会被修复。
可以通过使用更新版本的 Ansible 来避免这个错误,例如来自 Ubuntu 的 Ansible PPA 的
ansible-core
2.16.6-1ppa~jammy。也请参阅下面的注释。致谢:Ubuntu MATE 社区的 tkn
ansible-core
2.16 支持目标节点上的 Python 版本 3.6-3.12,根据 ansible-core 支持矩阵。它还支持 Python 2 版本 2.7。所以,也可能可以使用 Python 2。(安装 Python 2,并设置 ansible_python_interpreter="/usr/bin/python2")。
注释:我使用的是来自 Ubuntu ESM 仓库的 Ansible 版本。如果你启用了 Ubuntu ESM 仓库,从 Ubuntu 的 Ansible PPA 安装 Ansible 的标准指令将不起作用。启用 PPA 后,我在
synaptic
图形包管理器中使用了包 > "强制版本"。或者,你可以找到更新的版本号并特别安装它,使用apt-cache search ansible
和apt install ansible=$VERSION
。我不知道这是否会让未来的 Ansible 更新自动安装。