tasks:
- name: check if rpmforge installed
shell: rpm -q rpmforge-release-0.5.3-1.el6.rf.i686
register: shell_output
- name: Enable repo for htop
shell: "{{ item }}"
with_items:
- wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
- sudo rpm -Uhv rpmforge-release-0.5.3-1.el6.rf.i686.rpm
when: shell_output.stdout.find('not installed') != -1
上述任务失败,原因如下:
failed: [default] => {"changed": true, "cmd": "rpm -q rpmforge-release-0.5.3-1.el6.rf.i686", "delta": "0:00:00.100877", "end": "2016-01-08 09:05:30.495234", "rc": 1, "start": "2016-01-08 09:05:30.394357", "warnings": ["Consider using yum module rather than running rpm"]}
stdout: package rpmforge-release-0.5.3-1.el6.rf.i686 is not installed
标准输出包含短语“未安装”。
Ansible 版本 1.9.4,在 OSX El Capitan 上使用 Vagrant 和 Virtualbox 运行(截至 2016 年 1 月的最新版本)
答案1
Ansible 看到rpm -q
返回非零退出代码并中止。
您需要像这样更改它以告诉 Ansible 不要关心退出代码:
tasks:
- name: check if rpmforge installed
shell: rpm -q rpmforge-release-0.5.3-1.el6.rf.i686
register: shell_output
failed_when: false
changed_when: false
(我还添加了,changed_when
所以 Ansible 不会告诉你某些变化,就像它通常对每个shell
任务所做的那样。因为当你查询 RPM 数据库时没有任何变化。)
第二个任务很好。