I'm using ansible 1.4.3 to install and update some RPM packages and I 
recently hit this bug. I'm using a pre_task on my playbook to check if 
there are any updates available for a specific package, like this:

- name: check if there are updates available
  shell: yum list updates | grep "my-package" -c 
  register: num_updates
  ignore_errors: true

- debug: var=num_updates

The -c parameter on grep returns the number of lines in which "my-package" 
appears. If the number of lines is 0, then there are no updates available 
and I can skip a few steps down the road. The thing is the task fails with 
this output:

failed: [IP] => {"changed": true, "cmd": "yum list updates | grep 
\"my-package\" -c ", "delta": "0:00:20.941810", "end": "2014-01-30 
09:50:59.964388", "rc": 1, "start": "2014-01-30 09:50:39.022578"}
stdout: 0

ok: [IP] => {
    "num_updates": {
        "changed": true, 
        "cmd": "yum list updates | grep \"my-package\" -c ", 
        "delta": "0:00:20.941810", 
        "end": "2014-01-30 09:50:59.964388", 
        "invocation": {
            "module_args": "yum list updates | grep \"my-package\" -c", 
            "module_name": "shell"
        }, 
        "rc": 1, 
        "start": "2014-01-30 09:50:39.022578", 
        "stderr": "", 
        "stdout": "0", 
        "stdout_lines": [
            "0"
        ]
    }
}

unless I add something like '*| sed "s/^0$/'0'/g"*' to the shell command, 
so that stdout turns into a string if the result is 0 and the output 
changes to:


changed: [IP] => {"changed": true, "cmd": "yum list updates | grep 
\"my-package\" -c | sed \"s/^0$/'0'/g\" ", "delta": "0:00:05.715204", 
"end": "2014-01-30 10:00:31.365116", "rc": 0, "start": "2014-01-30 
10:00:25.649912", "stderr": "", "stdout": "'0'"}

ok: [IP] => {
    "num_updates": {
        "changed": true, 
        "cmd": "yum list updates | grep \"my-package\" -c | sed 
\"s/^0$/'0'/g\" ", 
        "delta": "0:00:05.715204", 
        "end": "2014-01-30 10:00:31.365116", 
        "invocation": {
            "module_args": "yum list updates | grep \"my-package\" -c | sed 
\"s/^0$/'0'/g\"", 
            "module_name": "shell"
        }, 
        "rc": 0, 
        "start": "2014-01-30 10:00:25.649912", 
        "stderr": "", 
        "stdout": "'0'", 
        "stdout_lines": [
            "'0'"
        ]
    }
}

Should I be doing something different?

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to