Ansible yum 未定义未来功能注释

问题描述 投票:0回答:1

我有一本经常使用的剧本,其中有一个简单的第一个任务:

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
1个回答
0
投票

这看起来可能与这个问题类似。

在该示例中,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

© www.soinside.com 2019 - 2024. All rights reserved.