On 12. aug. 2017 04:09, Ryan wrote:
I tried adding "changed_when" for when sel_out is not defined, but it gives
me an error, so I am not sure how to use "changed_when" in this case.

I'm sorry, i meant to write failed_when and not changed_when, but the usage is the same.


  What's the correct usage?

      - name: Check for ECC's
        shell: ipmitool sel list | grep -i ecc
        register: sel_out
        changed_when: sel_out is not defined
        async: 3
        poll: 2

fatal: [192.168.100.11]: FAILED! => {"ansible_job_id":
"186470565638.100676", "changed": false, "cmd": "ipmitool sel list | grep
-i ecc", "delta": "0:00:00.094723", "end": "2017-08-12 01:40:04.893313",
"failed": true, "finished": 1, "rc": 1, "start": "2017-08-12
01:40:04.798590", "stderr": "", "stderr_lines": [], "stdout": "",
"stdout_lines": []}

As you can see in you fatal output, the sel_out is defined.
rc (return code) is 1, failed = true and stdout is empty.

grep exit with 0 when it finds the string and 1 if it doesn't find the string, so an error you can be defined as rc > 1.

  - name: Check for ECC's
    shell: ipmitool sel list | grep -i ecc
    register: sel_out
    failed_when: sel_out.rc > 1
    async: 3
    poll: 2


I was able to use this method, which seems to work.  Is this the correct
usage of "|| true"?

      - name: Check for ECC's
        shell: ipmitool sel list | grep -i ecc || true
        register: sel_out
        async: 3
        poll: 2

By using || true sel_out.rc will always be 0, so you loose the ability to check what return code grep is giving. So i highly recommend the solution above.


With the above usage, I am back to my original question.  How can I add
conditionals to individual items in a debug msg list?

Short answer, you can't.

when can only be used on debug it self, not the msg list.


 For instance, how
can I add a conditional only for "{{sel_out.stdout.split('\n') }}"?  If i
put the "when" in the same column as "name" and "debug" as Dick suggested,
then it will impact the full debug msg list, not only the sel_out line.

If the grep doesn't find anything the sel_out.stdout.split('\n') will be a empty string.

If you don't want that you can split debug in several tasks and use when: on the task.

or since you have 2 variables, this gives 4 combination, so you could make 4 debug task with 4 different when's.


--
Kai Stian Olstad

--
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 ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/42b0bc3d-7dad-5f91-939e-97c144ea8ab8%40olstad.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to