Ansible Yum 模块挂起事务错误

16

我对Ansible非常陌生。我正试图按照一个关于Ansible中角色概念的教程学习。 我有下面这个主Playbook:

--- # Master Playbook for Webservers
- hosts: apacheweb
  user: test
  sudo: yes
  connection: ssh
  roles:
    - webservers

这是指具有以下task/main.ymlwebservers角色:

- name: Install Apache Web Server
  yum: pkg=httpd state=latest
  notify: Restart HTTPD

还需要一个handler/main.yml

- name: Restart HTTPD
  service: name=httpd state=started

执行上面提到的主 Playbook 时,我遇到了以下错误:

TASK [webservers : Install Apache Web Server] **********************************
fatal: [test.server.com]: FAILED! => {"changed": false, "failed": true, "msg": "The following packages have pending transactions: httpd-x86_64", "rc": 128, "results": ["The following packages have pending transactions: httpd-x86_64"]}

我无法理解这个错误对应的是什么。根据我的研究,似乎没有任何类似的东西能暗示我使用Yum模块的问题。

注意:Ansible版本:

ansible 2.2.1.0
  config file = /etc/ansible/ansible.cfg
3个回答

36

似乎目标主机上有未完成/挂起的交易。 尝试安装yum-utils软件包,以在给出错误的目标主机上运行yum-complete-transaction

# yum-complete-transaction --cleanup-only

查看修复未完成的事务了解更多细节。

yum-complete-transaction是一个程序,它会在系统上找到不完整或中止的yum事务并尝试将其完成。如果yum事务在执行过程中中止,该程序将查看通常可以在/var/lib/yum中找到的transaction-all*和transaction-done*文件。

如果发现有多个未完成的事务,程序将首先尝试完成最近的那个。您可以运行它多次以清理所有未完成的事务。


谢谢,就是这样了!干杯 - SSF
此外,如果您遇到磁盘空间不足以完成交易的情况,我成功地将yum install pacakge-name作为Shell任务执行,避免了出现错误。 - Nabheet

1

未完成的交易剩余

sudo yum install yum-utils

yum-complete-transaction --cleanup-only


加1分,因为被接受的答案只是说yum-complete-transactions不是一个命令,而你包括了“yum install yum-utils”。 :) - Adam

0

我在使用ansible的playbooks时,采用了这种类型的配置:

- name: Install Apache Web Server
  yum: name=httpd state=latest
  notify: Restart HTTPD

据我所知,ansible的yum模块中没有yum: pkg=httpd这样的选项(如果我没记错的话,pkg=httpd是适用于基于Debian的发行版上的apt-get命令)。
如果你需要安装多个软件包,你可以使用类似下面的方法:
- name: "Install httpd packages"
  yum: name={{ item }} state=present
  with_items:
    - httpd
    - httpd-devel
    - httpd-tools

当然,你可以将 state=present 更改为 state=latest 或任何最适合你的选项

http://docs.ansible.com/ansible/yum_module.html - yum 模块的 ansible 文档


谢谢,我明白了。我将pkg更改为name,但仍然收到相同的错误提示:以下软件包有待处理事务: httpd-x86_64", "rc - SSF
1
在ssh shell上手动执行:yum-complete-transaction --cleanup-only。在解决软件包问题(如未完成安装的软件包)之前,您将无法使用ansible安装软件包。 - Bogdan Stoica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接