使用Ansible安装多个本地rpm

时间:2017-08-16 07:32:52

标签: ansible yum

我必须使用ansible安装位于特定目录中的十几个rpms。现在我使用的语法如下:

- name: install uploaded rpms
  command: rpm -ivh /tmp/*.rpm

我想使用yum模块,但不知道,如何告诉它在目录中安装所有rpms(不指定每个文件的名称)。

有什么建议吗?

提前致谢

4 个答案:

答案 0 :(得分:5)

你能尝试一下吗(我没试过):

- name: Finding RPM files
  find:
    paths: "/tmp"
    patterns: "*.rpm"
  register: rpm_result

- name: Install RPM
  yum:
    name: "{{ item.path }}"
    state: present
  with_items: "{{ rpm_result.files }}"

答案 1 :(得分:2)

我认为最佳解决方案如下:

 - name: Find all rpm files in /tmp folder
   find:
     paths: "/tmp"
     pattern: "*.rpm"
   register: rpm_files

 - set_fact:
    rpm_list: "{{ rpm_files.files | map(attribute='path') | list}}"

 - name: installing the rpm files
   yum:
     name: "{{rpm_list}}"
     state: present

循环浏览文件可能会导致Yum Lock问题。所以这更好,更有效,因为我们不必遍历所有文件,而是将文件路径列表传递给yum模块。

答案 2 :(得分:0)

尝试一下:

- name: Installed the rpm files
  shell: yum localinstall *.rpm -y
  args:
    chdir: /tmp/rpm_dir

忽略警告。

答案 3 :(得分:0)

正如https://stackoverflow.com/a/45708676/11887927所说,我进行了测试。在大多数情况下,此操作成功完成,但由于我们正在使用retries模块,因此向任务中添加find将有助于确保依赖性问题,并且返回结果一个。这是修改后的示例:

- name: Finding RPM files
  find:
    paths: "/tmp"
    patterns: "*.rpm"
  register: rpm_result

- name: Install RPM
  yum:
    name: "{{ item.path }}"
    state: present
  with_items: "{{ rpm_result.files }}"
  retries: 5
  register: result
  until: result.rc == 0

问题是在6 RPM时发生的。

参考:

  1. https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#retrying-a-task-until-a-condition-is-met
  2. https://stackoverflow.com/a/44135131/11887927