Bug 52124

Summary: Vjlekm apt_rpm. Не обновляется rpm-файл на новую версию, если он установлен из локального rpm и не существует в репозитории
Product: Sisyphus Reporter: vodazilla <family-gan>
Component: ansible-coreAssignee: Andrey Cherepanov <cas>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: cas
Version: unstable   
Hardware: x86_64   
OS: Linux   

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). И если есть более новая версия, то обновлять.