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的主要内容,如果未能解决你的问题,请参考以下文章

使用Vagrant和Ansible

Ansible Galaxy Provisioner 未在 Vagrant 中使用私钥

在WINDOWS上通过VAGRANT练习ANSIBLE

PyCharm 助手没有出现在 vagrant 中

python Ansible的Vagrant动态库存脚本

vagrant/homestead/windows 上的 npm 安装错误:EPROTO:协议错误,符号链接