我想使用 Ansible 和已安装的 rpm 包管理器安装一些 RPM 包。yum 尚未安装。
如果软件包已安装,使用command
module with会导致任务失败。我正在寻找一种惯用的方法来安装软件包,就像 yum 或 apt modules 一样。rpm -i {{package}}
答案1
答案2
答案3
- 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
答案4
我认为这迄今为止最符合我的问题:
- 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 文件的路径。
第一个任务从 rpm 文件中获取 MD5 校验和以及软件包名称,并将校验和与已安装的同名软件包进行比较。如果校验和不匹配(且仅当不匹配时),第二个任务将安装该 rpm 软件包。