0
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)

1 Answer 1

1

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:

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

(I also added changed_when so Ansible won't tell you something changed, like it usually does for every shell task. Because nothing changes when you query the RPM database.)

The 2nd task is fine.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .