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
The above task fails with :
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
The stdout contains the phrase 'not installed'.
Ansible version 1.9.4, running on OSX El Capitan with Vagrant & Virtualbox (latest versions as at Jan 2016)
Ansible sees
rpm -q
returning a non-zero exit code and aborts.You'll want to change it like this to tell Ansible not to care about the exit code:
(I also added
changed_when
so Ansible won't tell you something changed, like it usually does for everyshell
task. Because nothing changes when you query the RPM database.)The 2nd task is fine.