ansible2.8.0 版本更新后,Amazon Linux 的 EC2 实例上的 playbook(包含 yum module)无法正常运行的 bug 的临时解决方案
首先
我更新了Ansible2.8.0后,包含yum模块的playbook无法正常运行。其他模块可以正常进行dry run和应用。
我向ansible用户组问了一个问题,虽然得到了解决,但我想可能还有其他人遇到了同样的困难,所以我写了这篇文章。
※2019/07/01 由于Ansible2.8.1进行了修复,因此只要更新就不会出现错误。
环境。
MacBookAir
操作系统:Mojave 10.14.4
从本地环境的终端运行
对AWS EC2的amazon linux实例执行操作
ansible版本2.8.0
执行ansible-playbook时发生的错误
在common role的main.yml文件中,包含了多个任务。其中一个任务是执行base-packages.yml文件中的yum模块。然而,在执行该模块时出现了下面的错误,无法执行。
fatal: [xxx-xxxx-xxx01]: FAILED! => {"changed": false, "msg": "`python2-dnf` is not installed, but it is requiredfor the Ansible dnf module.", "results": []}
# ansible-playbook -i hosts xxxx-xxx.yml -l xxx-xxxx-xxx01 --check --diff
PLAY [all] *******************************************************************************************
TASK [Gathering Facts] *******************************************************************************
ok: [xxx-xxxx-xxx01]
TASK [common : include tasks/base-packages.yml] ******************************************************
included: /Users/xxxx/git/xxxx_xxxx/xxxx_xxx/ansible/roles/common/tasks/base-packages.yml for xxx-xxxx-xxx01
TASK [common : yum install bacepackage] **************************************************************
fatal: [xxx-xxxx-xxx01]: FAILED! => {"changed": false, "msg": "`python2-dnf` is not installed, but it is requiredfor the Ansible dnf module.", "results": []}
PLAY RECAP *******************************************************************************************
xxx-xxxx-xxx01 : ok=2 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
# cat xxxx-xxx.yml
- hosts: all
become: True
roles:
- common
# cat roles/common/tasks/main.yml
- name: include tasks/base-packages.yml
include_tasks: tasks/base-packages.yml
- name: include tasks/timezone.yml
include_tasks: tasks/timezone.yml
- name: include tasks/hostname.yml
include_tasks: tasks/hostname.yml
# cat roles/common/tasks/base-packages.yml
- name: yum install bacepackage
yum:
name: ['vim', 'zsh', 'git', 'tree', 'htop', 'mlocate', 'telnet', 'yum-plugin-changelog']
state: present
错误概述
如果在 Amazon Linux 上运行 Ansible,则似乎识别的软件包管理器是 dnf。
基于此,yum 模块将此内容视为 dnf 的软件包管理器。
因此,出现了找不到 dnf 依赖的“python-dnf”错误。
解决方案 (jiě jué cè)
似乎已经在 Ansible 的 GitHub 上提出了此问题。
因为在这里找到能够解决问题的评论,我想和您分享一下。
在这个代码的注释中,我们使用 set_fact 来强制覆盖 Ansible 的事实变量,并将虚拟机可用的软件包管理器从 dnf 替换成了 yum。
在我的代码中具体来说,我已经插入了如下内容。
发生错误时的代码
# cat roles/common/tasks/base-packages.yml
- name: yum install bacepackage
yum:
name: ['vim', 'zsh', 'git', 'tree', 'htop', 'mlocate', 'telnet', 'yum-plugin-changelog']
state: present
修复了错误的代码。
cat roles/common/tasks/base-packages.yml
- set_fact:
ansible_facts:
pkg_mgr: yum
- name: yum install bacepackage
yum:
name: ['vim', 'zsh', 'git', 'tree', 'htop', 'mlocate', 'telnet', 'yum-plugin-changelog']
state: present
yum模块已成功通过。
TASK [common : include tasks/base-packages.yml] *****************************************************
included: /Users/xxxx/git/xxxx_xxxx/xxxx_xxx/ansible/roles/common/tasks/base-packages.yml for xxx-xxxx-xxx01
TASK [common : set_fact] ****************************************************************************
ok: [xxx-xxxx-xxx01]
TASK [common : yum install bacepackage] *************************************************************
[WARNING]: Platform linux on host xxx-xxxx-xxx01 is using the discovered Python interpreter at
/usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.8/reference_appendices/interpreter_discovery.html for more
information.
ok: [xxx-xxxx-xxx01]
总结
非常感谢回答问题的Ansible用户组的大家。
在问题的最后部分提到了预计在2.8.1版本中解决的内容。
如果没有急需的话,我认为可以等待2.8.1版本的发布。
如果无法等待,还可以通过pip降低Ansible版本来解决。
通过始终更新至最新版本的方式,可能存在着包含错误的可能性,但这样做也有助于理解使用的工具中的错误。
我希望通过更新至最新版本并快速使用新功能,始终保持获取信息的态度。
如果您对 Ansible2.8.0 新增的功能有兴趣,可以阅读此文章:https://tekunabe.hatenablog.jp/entry/2019/05/16/ansible28 。
在这个活动中,我们将介绍Ansible2.8.0的新功能以及举办LT等活动!由于我身在东京,所以我决定远程参加!
https://ansible-users.connpass.com/event/130456/
请参考以下网站
我在Amazon Linux上开始推荐使用dnf而感到困扰的ansible。
检查Ansible的事实变量。
「Ansible 2.8.0在Amazon Linux上安装yum软件包失败」
https://github.com/ansible/ansible/issues/56583