使用Ansible安装多个本地RPM

使用Ansible安装多个本地RPM,ansible,yum,Ansible,Yum,我必须使用ansible安装十几个位于特定目录中的RPM。现在我使用的语法如下: - name: install uploaded rpms command: rpm -ivh /tmp/*.rpm 我想使用yum模块来完成,但不知道如何告诉它在一个目录中安装所有RPM(而不是指定每个文件的名称) 有什么建议吗 提前感谢你能试试这个吗(我没有测试): 我认为最好的解决办法如下: - name: Find all rpm files in /tmp folder find:

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

- name: install uploaded rpms
  command: rpm -ivh /tmp/*.rpm
我想使用yum模块来完成,但不知道如何告诉它在一个目录中安装所有RPM(而不是指定每个文件的名称)

有什么建议吗

提前感谢

你能试试这个吗(我没有测试):


我认为最好的解决办法如下:

 - name: Find all rpm files in /tmp folder
   find:
     paths: "/tmp"
     patterns: "*.rpm"
   register: rpm_files
 
 - name: Setting rpm_list
   set_fact:
    rpm_list: "{{ rpm_files.files | map(attribute='path') | list}}"

 - name: installing the rpm files
   yum:
     name: "{{rpm_list}}"
     state: present
在文件中循环可能会导致Yum锁定问题。因此,这样做更好、更高效,因为我们不必遍历所有文件,而是将文件路径列表传递给yum模块。

尝试以下方法:

- name: Installed the rpm files
  shell: yum localinstall *.rpm -y
  args:
    chdir: /tmp/rpm_dir
忽略警告。

如我所评论和测试的。在大多数情况下,它都成功了,但向任务中添加
重试
将有助于确保相关性问题,因为我们正在使用
查找
模块,它会逐个返回结果。以下是修订版的示例:

- 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时发生问题

参考资料:


  • 搜索“Ansible中的循环”。可以为警告添加一个
    warn:false
    ,谢谢,我一直在这上面发毛。工作正常<代码>-名称:是必需的。“{rpm_files.files | map(attribute='path')| list}}”的具体功能是什么?解决方案的工作方式与yum*.rpm不同,因为它按照rpm_result.files的顺序安装文件,并且可能会因依赖关系而失败
    - 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