Bug 52124 - Vjlekm apt_rpm. Не обновляется rpm-файл на новую версию, если он установлен из локального rpm и не существует в репозитории
Summary: Vjlekm apt_rpm. Не обновляется rpm-файл на новую версию, если он установлен и...
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: ansible-core (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Andrey Cherepanov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-11-20 17:43 MSK by vodazilla
Modified: 2024-11-20 17:43 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description vodazilla 2024-11-20 17:43:41 MSK
Ошибку подробно описал в github:
https://github.com/ansible-collections/community.general/issues/9161

Ошибка в Ansible-модуле apt_rpm

Шаги для воспроизведения:
1) Установить любой rpm-файл на VM, который не существует в репозитории. Назовём его edragent
2) Скопировать новую версию edragent в /tmp
3) Вызвать ad-hock команду:
ansible -i ./i all -m apt_rpm -a "name=/tmp/edragent_new_version state=latest" -b

Ожидаемый результат: пакет обновится
Реальный результат: Nothing to install

Исследование ошибка:
https://github.com/ansible-collections/community.general/blob/8c45cba53c89c30285b50318532cf0f2c5ad6cfa/plugins/modules/apt_rpm.py#L210C12-L210C33

Вот тут вызывается функция check_package_version
https://github.com/ansible-collections/community.general/blob/8c45cba53c89c30285b50318532cf0f2c5ad6cfa/plugins/modules/apt_rpm.py#L180

Функция вызывает команду apt-cache policy edragent
с результатом:
  Installed: 0:2.17.0-1@1707831655
  Candidate: 0:2.17.0-1@1707831655

apt-cache ищет новую версию пакета в кеше репозитории. А у нас же пакет ставится локально.

Предлагаемое решение: если пакет ставится из локального rpm, если пакета не существует в репозитории, то сравнивать версию установленного пакета rpm -qa | grep edragent с версией, которая будет ставиться (rpm -qp /tmp/edragent.rpm). И если есть более новая версия, то обновлять.