使用 Ansible 安装 rpm 包

使用 Ansible 安装 rpm 包

如何使用 Ansible 在远程机器上安装 .rpm 包?

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

有没有更务实的方法来解决这一问题?

答案1

Ansibleyum模块已经提供了针对该问题的解决方案,将服务器上本地 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

答案2

实际上该yum模块可以直接从给定的 URL 安装 RPM:

- name: Remote RPM install with yum
  yum: name=http://example.com/some_package.rpm

答案3

以下是我从源机器安装多个 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}}"

答案4

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

我已经用这个解决了幂等性:

- 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

相关内容