我有一本经常使用的剧本,其中有一个简单的第一个任务:
yum
,自从我升级了 MacOSX 后,yum
模块突然停止工作了
示例:
- name: Install git
become: yes
yum:
name : git
state: present
给予:
>>> print(a['module_stderr'])
OpenSSH_9.7p1, LibreSSL 3.3.6
debug1: /etc/ssh/ssh_config line 21: include /etc/ssh/ssh_config.d/* matched no files
debug1: /etc/ssh/ssh_config line 54: Applying options for *
debug2: resolve_canonicalize: hostname x.x.x.x is address
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug1: auto-mux: Trying existing master at '/tmp/ansible-ssh-x.x.x.x-22-mysql'
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug1: mux_client_request_session: master session id: 2
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
File "<frozen importlib._bootstrap>", line 971, in _find_and_load rr
Traceback (most recent call last):ap>", line 951, in _find_and_load_unlocked
File "<stdin>", line 1, in <module>", line 894, in _find_spec
NameError: name 'false' is not defined. Did you mean: 'False'? find_spec
>>> le "<frozen importlib._bootstrap_external>", line 1131, in _get_spec
>>> le "<frozen importlib._bootstrap_external>", line 1112, in _legacy_get_spec
>>> or File "<frozen Fimportlib._bootstrap>", line 441, in spec_from_loader rn
>>> le "<frozen importlib._bootstrap_external>", line 544, in spec_from_file_location
>>> le "/tmp/ansible_ansible.legacy.dnf_payload_c428fwbu/ansible_ansible.legacy.dnf_payload.zip/ansible/module_utils/basic.py", line 5
>>> SyntaxError: future feature annotations is not defined
错误:
SyntaxError: future feature annotations is not defined
通常与旧版本的Python有关,但我的远程服务器有Python3.9
并验证它 - 我还将它添加到我的库存中,并打印了ansible_facts
以确保。
这个错误出现在我的所有服务器上,他们只更改了我的 MaxOSX 版本 (
Sonoma
)
尝试使用
use_backend: yum/dnf/etc ...
我尝试过的所有值。
有人有线索吗?
这看起来可能与这个问题类似。
在该示例中,Ansible 中的
yum
/ dnf
模块 >= 2.17
据说使用了一种名为“module respawn”的范例,它重新生成了一个 Python 解释器,假设它所需要的绑定已安装在该解释器上。 Ansible 通过 SSH 连接到远程主机后,会将 python 模块作为 zip 文件“Ansiballz”(类似“tarball
”的文字游戏)复制到远程主机。 对于远程主机,python 解释器必须满足 zip 文件中包含的 python 代码的要求,其中包含 yum
或 dnf
模块等模块代码,源自运行 Ansible 的主机。
在上面的示例链接问题中,提到基于 EL8 的主机具有较旧的 Python 版本,该版本与 Ansible
2.17
的模块代码不兼容。
因此,由于您没有更改远程主机而只升级了 MacOS,因此可能本地更改的某些内容正在复制到“Ansiballz”模块代码中,而该代码现在与远程主机的 python 解释器不兼容。 假设更改了 MacOS 版本,您可能还通过 Homebrew 更新了 Ansible 版本?
如果是这样,请尝试降级您在控制主机上使用的 Ansible 版本。
此外,以下错误表明
false
(可能来自 YAML 或 JSON 的小写“false
”布尔原语)正在 Python 解释器的上下文中进行计算:
NameError: name 'false' is not defined. Did you mean: 'False'? find_spec
剧本或模块可能需要在某个地方使用
False
而不是 false
。