Я хочу установить некоторые пакеты RPM с помощью Ansible и установленного менеджера пакетов rpm. yum не устанавливается.
С помощью command
модуль с rpm -i {{package}}
вызывает сбой задачи, если пакет уже установлен. Я ищу идиоматический способ установки пакетов, таких как модули yum или apt.
Установите yum, плюс вкусняшкии используйте модуль yum. Не устанавливается по умолчанию в AIX, но можно установить.
Требования включают модули Python yum и rpm. Я не понимаю, в каком пакете есть привязки rpm, что-то должно быть для yum. Возможно, из набора файлов rpm, но, к сожалению, у меня нет компьютера с AIX для тестирования.
- name: check if the filebeat exist
shell:
cmd: rpm -q filebeat
ignore_errors: True
register: filebeat_check
- name: transfer filebeat package to remote host
copy:
src: filebeat.rpm
dest: /tmp/filebeat.rpm
when: filebeat_check.rc != 0
- name: install filebeat
shell:
cmd: rpm -i /tmp/filebeat.rpm
when: filebeat_check.rc != 0
Использовать rpm -U
.
Из руководство:
rpm {-U | --upgrade} [параметры установки] PACKAGE_FILE ...
Это обновляет или устанавливает установленный в данный момент пакет до более новой версии. Это то же самое, что и установка, за исключением того, что все остальные версии пакета удаляются после установки нового пакета.
Я думаю, что это лучше всего соответствует моей проблеме:
- name: Verify package MD5
shell: |
package_md5=$(rpm -qp --queryformat='%{FILEMD5S}' '{{ item }}')
package_name=$(rpm -qp --queryformat='%{NAME}' '{{ item }}')
installed_md5=$(rpm -q --queryformat='%{FILEMD5S}' "$package_name")
[ "$installed_md5" = "$package_md5" ]
ignore_errors: true
register: verify_result
changed_when: no
failed_when: no
- name: Install package
shell: rpm -U '{{ item }}'
when: verify_result.rc != 0
item
это путь к файлу rpm.
Первая задача получает контрольную сумму MD5 и имя пакета из файла rpm и сравнивает контрольную сумму с установленным пакетом с тем же именем пакета. Если контрольная сумма не совпадает (и только тогда), вторая задача установит пакет rpm.