vagrant 上的 Ansible 错误中没有模块名称 Yum
Posted
技术标签:
【中文标题】vagrant 上的 Ansible 错误中没有模块名称 Yum【英文标题】:No Module name Yum in Ansible Error on vagrant 【发布时间】:2017-02-28 01:29:09 【问题描述】:我正在 Ubuntu Vagrant 机器上尝试使用 Ansible 剧本进行一些实验。我编写了一个名为 exampleyum.yml 的简单剧本,如下所示:
---
- hosts: local
tasks:
- name: Installing packages
yum: name=httpd state=latest
sudo: yes
当我跑步时
ansible-playbook -i ~/inventory.ini exampleyum.yml
我遇到以下错误:
任务执行期间发生异常。看到完整的 回溯,使用 -vvv。错误是:ImportError: No module named yum 致命的:[本地主机]:失败! => “改变”:假,“失败”:真, "module_stderr": "Traceback (最近一次调用最后一次):\n 文件 \"/tmp/ansible_qeXrGO/ansible_module_yum.py\",第 25 行,在 \n import yum\nImportError: No module named yum\n", "module_stdout": "", "msg": "模块失败"
它给出了一些导入错误和模块失败。我在某处读到 Yum
是一个核心模块
因此它应该可以正常工作,但事实并非如此。任何帮助,将不胜感激。我对 Ansible 很陌生。
【问题讨论】:
您可以在 Ansible 中使用“package”命令而不是 apt / yum:docs.ansible.com/ansible/package_module.html,它会检测您已经安装的包管理器(尝试在 ubuntu 上使用 yum) 我不知道“包”命令。感谢@BrunoB.Carvalh 让我知道。这有帮助。目前,我无法提出更多问题。你能支持我的问题吗? 【参考方案1】:我在 Ubuntu Vagrant 机器上运行 Ansible。
那么你为什么首先使用yum
而不是apt
模块呢?
如果由于某种原因您仍然需要yum
模块,请确保在托管主机上安装了yum
python 包。
【讨论】:
谢谢,但我想使用 Yum 模块,而不是 apt 模块。我已经安装了 yum python 包,但它似乎仍然不起作用。 docs.ansible.com/ansible/yum_module.html Yum 是 RedHat 系列发行版的包管理器。 Apt 是 Debian 系列发行版的软件包管理器。 Ubuntu 是一个 Debian 系列发行版。你应该在 Ubuntu 上使用 apt 。您需要提供一个令人信服的理由说明您为什么不能这样做。 谢谢,@XiongChiamiov。我正在尝试百胜。我太天真了。我没有寻找其他选项,例如“apt”或“package”。他们现在工作正常。目前,我无法提出更多问题。你能支持我的问题吗?【参考方案2】:使用包而不是 yum 模块,如 playbook 中 How to unify package installation tasks in ansible? 中的回答。
当我阅读并遵循一本基于 CentOS/RedHat 编写的书时,我遇到了同样的错误。该问题本身可以通过以下方式避免,但如果继续在 Ubuntu 上使用 YUM 会导致更多问题。
环境
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
确认症状
ansible@ip-172-31-38-30:~/playbook$ ansible-playbook sample.yaml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [ub01]
TASK [Ensure NTP (for time synchronization) is installed.] *********************
fatal: [ub01]: FAILED! => "changed": false, "failed": true, "module_stderr": "Shared connection to ub01 closed.\r\n", "module_stdout": "\r\nTraceback (most recent call last):\r\n File \"/tmp/ansible_y0ULtJ/ansible_module_yum.py\", line 25, in <module>\r\n import yum\r\nImportError: No module named yum\r\n", "msg": "MODULE FAILURE"
to retry, use: --limit @/home/ansible/playbook/sample.retry
PLAY RECAP *********************************************************************
ub01 : ok=1 changed=0 unreachable=0 failed=1
安装 yum
ansible@ip-172-31-38-30:~/playbook$ sudo apt install yum
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
yum
0 upgraded, 1 newly installed, 0 to remove and 58 not upgraded.
Need to get 486 kB of archives.
After this operation, 3,265 kB of additional disk space will be used.
Get:1 http://us-west-2.ec2.archive.ubuntu.com/ubuntu xenial/universe amd64 yum all 3.4.3-3 [486 kB]
Fetched 486 kB in 0s (12.3 MB/s)
Selecting previously unselected package yum.
(Reading database ... 110977 files and directories currently installed.)
Preparing to unpack .../archives/yum_3.4.3-3_all.deb ...
Unpacking yum (3.4.3-3) ...
Processing triggers for man-db (2.7.5-1) ...
Setting up yum (3.4.3-3) ...
验证原来的问题已经消失
ansible@ip-172-31-38-30:~/playbook$ ansible-playbook sample.yaml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [all] *********************************************************************
TASK [setup] *******************************************************************
ok: [ub01]
TASK [Ensure NTP (for time synchronization) is installed.] *********************
fatal: [ub01]: FAILED! => "changed": false, "failed": true, "msg": "No package matching 'ntp' found available, installed or updated", "rc": 126, "results": ["No package matching 'ntp' found available, installed or updated"]
to retry, use: --limit @/home/ansible/playbook/sample.retry
PLAY RECAP *********************************************************************
ub01 : ok=1 changed=0 unreachable=0 failed=1
相关问题
python 的位置可能是 Ansible 和 Yum 的原因。
How do I handle python pathing not having a Python 2.X in /usr/bin/python on a remote machine?还要注意 /usr/bin/yum 指的是 /usr/bin/python。
#! /usr/bin/python
import sys
try:
import yum
except ImportError:
print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
【讨论】:
以上是关于vagrant 上的 Ansible 错误中没有模块名称 Yum的主要内容,如果未能解决你的问题,请参考以下文章