题 使用Ansible安装rpm包


如何使用Ansible在远程计算机上安装.rpm软件包?

显而易见的解决方案是使用 command 模块,但这有点傻。另外,我想避免为一个包设置一个yum存储库。

对这个问题有一些更实用的方法吗?


17
2017-11-15 17:28




这就是ssh的优点所在。我知道有很酷的工具可以使用,但对于实际的,非平凡的任务是ssh。 - Lorinczy Zsigmond


答案:


Ansible yum 模块已经为此问题提供了解决方案。服务器上本地rpm文件的路径可以传递给 name 参数。

来自 Ansible yum模块文档

您还可以将URL或本地路径传递给rpm文件。要对多个包进行操作,可以接受以逗号分隔的包列表或(从2.0开始)包列表。

执行此操作的正确步骤将是这样的:

- name: Copy rpm file to server
  copy:
     src: package.rpm
     dest: /tmp/package.rpm

- name: Install package.
  yum:
     name: /tmp/package.rpm
     state: present

21
2017-11-15 17:42



对不起,我忽略了它。谢谢您的帮助! :) - NefariousOctopus
有没有办法完成这个而不必先复制文件? - technocrat
如果您通过http提供包,则可以将URL传递给name参数。 - Henrik Pingel
@technocrat,有点晚了,但回答 - Flippym


yum 模块可以从URL安装RPM:

- name: Install NUX Repository
  yum: name=http://example.com/some_package.rpm

或者你可以使用 command 相反,自从 rpm command有一个内置的远程安装方法:

- name: Install RPM from URL
  command: rpm -i http://example.com/some_package.rpm

2
2017-11-21 16:19



有意思......所以这是一个转速功能...不必使用命令,只是百胜,这很好,但这可以使它工作。 - technocrat
该命令本身并不是幂等的 - Henrik Pingel


我必须使用强制rpm命令,因为我没有yum(它是AIX OS)。

我用这个解决了幂等性:

- command: rpm -U "{{rpm}}"
  args:
    warn: false
  register: rpm_install
  failed_when: rpm_install.rc != 0 and "is already installed" not in rpm_install.stderr
  changed_when: rpm_install.rc == 0

0
2018-06-21 09:24





以下是我从源计算机安装多个RPM的操作:

- name: mkdir /tmp/RPMS
  file: path=/tmp/RPMS state=directory

- name: copy RPMs to /tmp/RPMS
  copy:
    src: "{{ item }}"
    dest: /tmp/RPMS
  with_fileglob:
    - "../files/*.rpm"
  register: rpms_copied

- name: local RPMs not found
  fail:
    msg: "RPMs not found in ../files/"
  when: rpms_copied.results|length == 0 and rpms_copied.skipped and rpms_copied.skipped_reason.find('No items') != -1

- set_fact:
    rpm_list: "{{ rpms_copied.results | map(attribute='dest') | list}}"

- name: install RPMs
  yum:
    name: "{{rpm_list}}"

0
2017-09-18 20:25