指定YUM却要求DNF?Amazon Linux 2 Ansible执行异常排查
问题:Ansible yum模块在Amazon Linux 2实例上执行失败(GHA Ubuntu 22.04运行器)
场景概述
使用GitHub Actions工作流,通过Ubuntu 22.04运行器在Amazon Linux 2 EC2实例上执行Ansible剧本时,所有调用ansible.builtin.yum模块的步骤全部失败,但直接用shell模块执行yum命令可正常运行。
代码示例与报错详情
失败的yum模块代码
- name: 'Install selinux dependency packages' ansible.builtin.yum: name: '{{ yum_selinux_packages }}' state: present disable_gpg_check: true when: 'os != "amzn2023"'
报错输出
fatal: [default]: FAILED! => {"ansible_facts": {"pkg_mgr": "unknown"}, "changed": false, "msg": ["Could not detect which major revision of dnf is in use, which is required to determine module backend.", "You should manually specify use_backend to tell the module whether to use the dnf4 or dnf5 backend})"]}
对比测试结果
- 正常运行的shell模块代码:
- name: "yum update" # 执行正常 ansible.builtin.shell: 'yum update *' become: true
- 执行失败的yum模块更新代码:
- name: 'Update all yum packages' # 执行失败 ansible.builtin.yum: name: '*' state: latest become: true
问题触发背景
该问题在更新GHA运行器后出现,更新操作包含以下命令(目的是修复Snyk检测到的漏洞):
&& rm -rf /home/runner/.local/lib/python3.10/site-packages/ansible_collections/grafana \ && rm -rf ./.local/lib/python3.10/site-packages/ansible_collections/community/digitalocean \ && sudo apt install -y nodejs npm \ && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \ && . "$NVM_DIR/nvm.sh" && nvm install 20 \ && sudo npm install npm@latest -g
无效的尝试操作
- 给yum模块添加
use_backend: yum参数,依然报错 - 添加
use_backend: dnf参数,要求安装python3-dnf,但Amazon Linux 2不兼容DNF工具
根本原因与解决方案
根本原因
Ansible最新版本已移除原生的yum模块,默认依赖DNF包管理工具,但Amazon Linux 2系统并未适配DNF,导致模块无法正确识别系统的包管理器类型。
解决方案
将Ansible版本回退到仍保留原生yum模块的旧版本,确保与Amazon Linux 2的yum工具兼容。
内容的提问来源于stack exchange,提问作者Cristi23b
相关产品推荐
相关产品推荐

