Проблема:

В логах Ansible появляются ошибки, вида:

TASK [Gathering Facts] *********************************************************
[WARNING]: Unhandled error in Python interpreter discovery for host
softwlc_main: Expecting value: line 1 column 1 (char 0)
fatal: [softwlc_main]: FAILED! => {
    "ansible_facts": {},
    "changed": false,
    "failed_modules": {
        "ansible.legacy.setup": {
            "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python3"
            },
            "failed": true,
            "module_stderr": "Shared connection to 192.168.1.1 closed.\r\n",
            "module_stdout": "\r\nTraceback (most recent call last):\r\n  File \"/home/eltex/.ansible/tmp/ansible-tmp-1762944284.598245-28-42315320222632/AnsiballZ_setup.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/eltex/.ansible/tmp/ansible-tmp-1762944284.598245-28-42315320222632/AnsiballZ_setup.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/eltex/.ansible/tmp/ansible-tmp-1762944284.598245-28-42315320222632/AnsiballZ_setup.py\", line 44, in invoke_module\r\n    from ansible.module_utils import basic\r\n  File \"<frozen importlib._bootstrap>\", line 971, in _find_and_load\r\n  File \"<frozen importlib._bootstrap>\", line 951, in _find_and_load_unlocked\r\n  File \"<frozen importlib._bootstrap>\", line 894, in _find_spec\r\n  File \"<frozen importlib._bootstrap_external>\", line 1157, in find_spec\r\n  File \"<frozen importlib._bootstrap_external>\", line 1131, in _get_spec\r\n  File \"<frozen importlib._bootstrap_external>\", line 1112, in _legacy_get_spec\r\n  File \"<frozen importlib._bootstrap>\", line 441, in spec_from_loader\r\n  File \"<frozen importlib._bootstrap_external>\", line 544, in spec_from_file_location\r\n  File \"/tmp/ansible_ansible.legacy.setup_payload_imb5kbjm/ansible_ansible.legacy.setup_payload.zip/ansible/module_utils/basic.py\", line 5\r\nSyntaxError: future feature annotations is not defined\r\n",
            "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
            "rc": 1,
            "warnings": [
                "Platform linux on host softwlc_main is using the discovered Python interpreter at /usr/bin/python3, but future installation of another Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible-core/2.17/reference_appendices/interpreter_discovery.html for more information."
            ]
        }
    }
}

MSG:

The following modules failed to execute: ansible.legacy.setup

Решение:

Ошибка говорит о том, что на целевом хосте (чей адрес был указан при запуске) отсутствует/присутствует неподдерживаемая версия Python.

Минимальная версия Python, необходимая для работы плейбуков на текущий момент - 3.7

Проверить версию python можно командой python3 --version

В случае возникновения подобной ошибки есть 2 варианта решения:

  • Установка Python в ручную

Об этом можно найти в открытом доступе в интернет ресурсах, используя команды пакетного менеджера Linux либо через сборку образа Python локально.

  • Обход обращения к указанному хосту

Часто данная ошибка связана с попыткой выполнить какие либо действия на не поддерживаемой ОС (к примеру Ubuntu 18.04 - подробнее о поддержанных ОС) в рамках конкретных задач, например миграции базы данных при обновлении из Deb в Docker. В таких случаях можно выполнить действия в ручную. Так для приведённого примера существует документация о создании бэкапа БД в ручную и последующего переноса её на хост с Ansible.

  • Нет меток