Настройка 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пасибо автору!
Источник :