使用Ansible安装多个本地RPM
我必须使用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:
- 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