我必须使用ansible安装位于特定目录中的十几个rpms。现在我使用的语法如下:
- name: install uploaded rpms
command: rpm -ivh /tmp/*.rpm
我想使用yum模块,但不知道,如何告诉它在目录中安装所有rpms(不指定每个文件的名称)。
有什么建议吗?
提前致谢
答案 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时发生的。
参考: