| Summary: | При наличии perl-Package ansible модуль package пытается использовать pkg5 | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Slava Aseev <ptrnine> |
| Component: | ansible | Assignee: | Andrey Cherepanov <cas> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | cas |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
Сделал PR: https://github.com/ansible/ansible/pull/76457 В принципе, могу пока сделать патч у нас. Непонятно, пройдет ли в апстрим. (Ответ для Slava Aseev на комментарий #1) > Сделал PR: https://github.com/ansible/ansible/pull/76457 > В принципе, могу пока сделать патч у нас. Непонятно, пройдет ли в апстрим. Я сейчас собираю ansible на stable-2.9 и ansible-core на master. Можно и туда и туда. Спасибо за патч. |
Если в системе установлен perl-Package (со своим /usr/bin/pkg), то модуль package пытается использовать pkg5 вместо apt_rpm. Убедиться можно просто, вот такой плейбук при повторном запуске выдаст ошибку (при первом же сначала установит пакет perl-Package): --- - name: "Test" hosts: somehost tasks: - name: test package: state: present name: perl-Package Сама ошибка: FAILED! => { "changed": false, "module_stderr": "Shared connection to 10.88.15.103 closed.\r\n", "module_stdout": "...", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1 } module_stdout в более-менее читабельном виде: Traceback (most recent call last): File "/root/.ansible/tmp/ansible-tmp-1638461393.9872942-13059-89818530951856/AnsiballZ_pkg5.py", line 102, in <module> _ansiballz_main() File "/root/.ansible/tmp/ansible-tmp-1638461393.9872942-13059-89818530951856/AnsiballZ_pkg5.py", line 94, in _ansiballz_main invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS) File "/root/.ansible/tmp/ansible-tmp-1638461393.9872942-13059-89818530951856/AnsiballZ_pkg5.py", line 40, in invoke_module runpy.run_module(mod_name='ansible.modules.packaging.os.pkg5', init_globals=None, run_name='__main__', alter_sys=True) File "/usr/lib64/python3.9/runpy.py", line 210, in run_module return _run_module_code(code, init_globals, run_name, mod_spec) File "/usr/lib64/python3.9/runpy.py", line 97, in _run_module_code _run_code(code, mod_globals, init_globals, File "/usr/lib64/python3.9/runpy.py", line 87, in _run_code exec(code, run_globals) File "/tmp/.private/root/ansible_pkg5_payload_a4h3htv4/ansible_pkg5_payload.zip/ansible/modules/packaging/os/pkg5.py", line 182, in <module> File "/tmp/.private/root/ansible_pkg5_payload_a4h3htv4/ansible_pkg5_payload.zip/ansible/modules/packaging/os/pkg5.py", line 106, in main File "/tmp/.private/root/ansible_pkg5_payload_a4h3htv4/ansible_pkg5_payload.zip/ansible/modules/packaging/os/pkg5.py", line 157, in ensure TypeError: can only concatenate list (not "filter") to list Судя по lib/ansible/module_utils/facts/system/pkg_mgr.py причина тут в том, что последний найденный package manager оказывается в приоритете. Потому и получаем pkg5 вместо apt. http://git.altlinux.org/gears/a/ansible.git?p=ansible.git;a=blob;f=lib/ansible/module_utils/facts/system/pkg_mgr.py;h=4fe36ff7aadb8a540b988670c7f5ca862aa47a84;hb=8c37018a689fba2462f5f972616b256b0ef804b1#l13