ansible使用yum模块如何按顺序安装软件包 无需拆分两个任务
问题核心原因
yum模块执行时会先预加载当前系统所有已生效的软件源配置,再批量处理安装列表内的包。在同一任务中同时安装epel-release和clamav时,epel-release提供的源配置还未被加载到yum的缓存列表中,因此无法找到clamav包。
无需拆分为两个独立任务的可行方案
- 方案1:单任务loop按依赖顺序安装
把安装包按依赖优先级排序后用loop遍历,同一个yum任务会按顺序逐个安装包,安装完epel-release时主动刷新缓存,后续安装clamav就能识别到epel源:
ignore_errors: false become: yes become_method: sudo yum: name: "{{ item }}" state: present update_cache: "{{ 'yes' if item == 'epel-release' else 'no' }}" loop: - epel-release - clamav
- 方案2:单任务内链式调用yum命令
直接用command模块执行多步yum命令,单次任务即可完成顺序安装,需关闭ansible的命令告警:
ignore_errors: false become: yes become_method: sudo command: yum install -y epel-release && yum makecache && yum install -y clamav args: warn: false
- 方案3:增加重试机制自动补全安装
给安装任务加重试逻辑,第一次执行会先完成epel-release安装,第二次重试时已经加载epel源,即可完成clamav安装:
ignore_errors: false become: yes become_method: sudo yum: name: ["epel-release", "clamav"] state: present update_cache: yes register: yum_install_result until: yum_install_result is succeeded retries: 2 delay: 1
内容的提问来源于stack exchange,提问作者puravidaso
相关产品推荐
相关产品推荐

