我对Ansible很新。 我正在尝试遵循Ansible中角色概念的教程。 我有以下主手册:
--- # Master Playbook for Webservers
- hosts: apacheweb
user: test
sudo: yes
connection: ssh
roles:
- webservers
哪个 webservers 角色具有以下 task / main.yml :
- name: Install Apache Web Server
yum: pkg=httpd state=latest
notify: Restart HTTPD
handler / main.yml :
- name: Restart HTTPD
service: name=httpd state=started
当我执行上面提到的Master 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
答案 0 :(得分:23)
目标主机上似乎有未完成/待处理的事务。
尝试安装yum-utils
包以运行yum-complete-transaction
给出错误的目标主机。
# yum-complete-transaction --cleanup-only
查看剩下的Fixing There are unfinished transactions了解更多详情。
yum-complete-transaction是一个发现不完整或者不完整的程序 在系统上中止了yum事务并尝试完成它们。它 查看可以执行的transaction-all *和transaction-done *文件 通常可以在/ var / lib / yum中找到,如果yum事务在 执行中。
如果找到多个未完成的交易,它将尝试 首先完成最新的一个。你可以多次运行它 清理所有未完成的交易。
答案 1 :(得分:0)
我正在使用ansible这种类型的配置为剧本:
- name: Install Apache Web Server
yum: name=httpd state=latest
notify: Restart HTTPD
据我所知,在yum模块的ansbile中没有yum: pkg=httpd
这样的选项(如果我没错,那么 pkg = httpd 是针对apt-get on基于debian的发行版)
如果您需要安装多个软件包,可以使用以下内容:
- 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模块的安全文档