База знаний

4. Install custom Python3.X for for Ansible

Настройка Ansible

На старых системах типа Debian 10 установка новых версий Python3  через apt может быть затруднена и сломать систему. Можно минимизировать риски - собрав дополнительную версию Python3.8.0 из исходников. В моем случае иногда простые роли не отрабатывали из-за ошибки c  _сtуpes:

PLAY [k8s-cluster] *************************************************************

TASK [install_haproxy_exporter : Add group haproxy_exporter] *******************

ok: [master]

TASK [install_haproxy_exporter : Add user haproxy_exporter] ********************

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ModuleNotFoundError: No module named '_ctypes'

fatal: [master]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 192.168.0.150 closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n  File \"/root/.ansible/tmp/ansible-tmp-1756281387.8388395-51-610584552235/AnsiballZ_user.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/root/.ansible/tmp/ansible-tmp-1756281387.8388395-51-610584552235/AnsiballZ_user.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/root/.ansible/tmp/ansible-tmp-1756281387.8388395-51-610584552235/AnsiballZ_user.py\", line 47, in invoke_module\r\n    runpy.run_module(mod_name='ansible.modules.user', init_globals=dict(_module_fqn='ansible.modules.user', _modlib_path=modlib_path),\r\n  File \"/usr/local/python3.8/lib/python3.8/runpy.py\", line 205, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/local/python3.8/lib/python3.8/runpy.py\", line 95, in _run_module_code\r\n    _run_code(code, mod_globals, init_globals,\r\n  File \"/usr/local/python3.8/lib/python3.8/runpy.py\", line 85, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_user_payload_uh251h2w/ansible_user_payload.zip/ansible/modules/user.py\", line 492, in <module>\r\n  File \"/usr/local/python3.8/lib/python3.8/ctypes/__init__.py\", line 7, in <module>\r\n    from _ctypes import Union, Structure, Array\r\nModuleNotFoundError: No module named '_ctypes'\r\n", "msg": "MODULE FAILURE: No start of json char found\nSee stdout/stderr for the exact error", "rc": 1}

PLAY RECAP *********************************************************************

 

master                     : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

 


Поскольку Python 3.8.0 уже был установлен из bin (предположительно, скомпилирован вручную или установлен из бинарных файлов), возможно, отсутствуют необходимые библиотеки и модули, такие как _ctypes, что вызывает ошибку.

Для сборки Python из исходников обычно требуются пакеты разработки:

$ sudo apt-get install build-essential libssl-dev libffi-dev libbz2-dev libreadline-dev libsqlite3-dev zlib1g-dev


Вот рабочий сценарий от ИИ для Debian 10:

cd /path/to/Python-3.8.0
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall

Проверьте наличие _ctypes после пересборки:

$ python3.8 -c "import _ctypes"

Если ошибок нет, проблема решена.

И можно обновить переменную ansible_python_interpreter:

Укажите точный путь к вашему Python 3.8 при выполнении Ansible:

[k8s-cluster]
master ansible_python_interpreter=/usr/local/bin/python3.8


Используйте следующую команду, чтобы вывести список хостов из группы «k8s-cluster».

[ya@lin ~] $ ansible k8s-cluster -i/etc/ansible/hosts --list-hosts 
  хосты (1): 
    192.168.1.20

Если у вас есть профессиональный интерес в расширении данной статьи -  заполните форму запроса !

Cпасибо автору!

Заметка распространяется под лицензией  Creative Commons ShareAlike 4.0  при копировании материала ссылка на источник обязательна.

 

     Источник :

Конец! 

  • Custom_python3
  • 0 Пользователи нашли это полезным
Помог ли вам данный ответ?

Связанные статьи

0. Install Ansible Debian10 buster

Настройка Ansible Пакеты Ansible 2.7 доступны в репозиториях Debian 10 по...

1. Установка ansible на Centos7

  Ansible  Ansible — система управления конфигурациями, написанная на Python, с использованием...

2. Основные команды Ansible

  Debug  Ansible Данный опус является частью единого цикла заметок o CLI....

3. Примеры работы с модулями Ansible

0. Module Ansible Примеры работы с модулями Ansible!  Данный опус...