Не работает обновление yum через Ansible на нескольких хостах - PullRequest
0 голосов
/ 30 октября 2019

Я следовал за вещами, предложенными в разных ресурсах ... большинство из них предлагает упомянутое здесь ansible yum не работает

- name: Update a package with the latest version
    yum:
      name: package_name
      enablerepo: enable_required_repo 
      state: latest

Я получаю следующую ошибку

fatal: [hostname]: FAILED! => {"changed": false, "msg": "The Python 2 bindings for rpm are needed for this module. If you require Python 3 support use the `dnf` Ansible module instead.. The Python 2 yum module is needed for this module. If you require Python 3 support use the `dnf` Ansible module instead."}

ansible 2.8.4
 config file = /etc/ansible/ansible.cfg
 configured module search path = [u'/usr/share/ansible']
 ansible python module location = /usr/lib/python2.7/site-packages/ansible
 executable location = /usr/bin/ansible
 python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

запущенная команда ansible hosts -m raw -b -a "yum -y update package" отдельно работает

Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

Запуск необработанной команды, вызывающей yum напрямую, отличается от модуля yum в ansible. Первый просто использует стандартные механизмы вызова команд для выполнения yum, в частности, без глубокого понимания намеченного результата и, следовательно, без идемпотентности (ansible не знает из этого, изменено ли действие / ok). Но последнее совершенно другое. Он реализован в ansible как python, который собирается и отправляется на удаленный клиент в виде исполняемого двоичного объекта.

версия Python = 2.7.5 (по умолчанию, 7 августа 2019 г., 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

Помните, что даже несмотря на то, что python на управляющем хосте собрал python, который он отправил целевому хосту, это не обязательно означает, что интерпретатор один и тот же. В вашем случае у контроллера вполне может быть ansisble + py 2.7, но это не значит, что у неисправного хоста по умолчанию есть py2.7 на конце. В прошлом Ansible нередко видел проблему, заключающуюся в том, что по какой-то причине неправильно подобранный переводчик;в этом случае вы можете установить ansible_python_interpreter для каждого хоста / группы / другой области действия на правильный питон.

Хорошая новость в том, что, похоже, вы можете просто переключиться на модуль dnf: https://docs.ansible.com/ansible/latest/modules/dnf_module.html. Попробуйте, поскольку Python 3 - это то, что у всех нас будетпроработать на этом этапе.

0 голосов
/ 30 октября 2019

что произойдет, если вы вручную установите для интерпретатора python значение python2? Например,

ansible-playbook your-play-book.yml -e 'ansible_python_interpreter=/path/to/your/python2'

Возможно, несмотря на то, что python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] используется конфигурация * python3

...