升级MacOSX Sonoma后Ansible yum模块报错:future feature annotations未定义
问题核心
升级MacOS Sonoma后,原本正常运行的Ansible yum模块执行报错,关键错误提示为NameError: name 'false' is not defined和SyntaxError: future feature annotations is not defined。已确认远程服务器使用Python3.9,且尝试use_backend参数切换yum/dnf均无效。
解决步骤
检查本地Ansible依赖的Python版本
执行ansible --version查看本地Ansible绑定的Python版本。若本地Python版本与远程3.9差异过大(如本地为3.11+),可能导致生成的模块payload包含远程不兼容的语法。可通过指定Python版本重新安装Ansible,例如使用brew安装时:brew install ansible --with-python@3.9强制指定远程Python解释器
在inventory文件或playbook中明确指定远程服务器的Python3.9路径,避免Ansible自动选择错误的解释器:# 在playbook的vars段添加 vars: ansible_python_interpreter: /usr/bin/python3.9或在inventory中针对主机配置:
[target_hosts] x.x.x.x ansible_python_interpreter=/usr/bin/python3.9关闭SSH连接复用
Sonoma升级后系统SSH配置可能变更,连接复用可能引发模块执行异常。在ansible.cfg中修改:[ssh_connection] ssh_args = -o ControlMaster=no重新安装Ansible
若Sonoma升级导致brew/pip安装的Ansible依赖损坏,执行重新安装操作:# brew安装方式 brew reinstall ansible # pip安装方式 pip3 install --upgrade ansible # 或降级到兼容Python3.9的版本,例如 pip3 install ansible==2.14.6临时禁用模块压缩
关闭模块压缩以便直接排查生成的模块文件语法问题,在ansible.cfg中设置:[defaults] module_compression = none执行playbook后查看生成的模块文件,确认是否存在远程Python3.9不支持的语法。
内容的提问来源于stack exchange,提问作者Ricky Levi

