Search code examples
ansibleattributesruntimeexception.when

What attribute should be checked for a registered variable under two Ansible when conditions


How do we check for a registered variable if only one of the two conditions turns out to be true having the same registered variable?

Below is my playbook that executes only one of the two shell modules.

- name: Check file
    shell: cat /tmp/front.txt
    register: myresult
  when: Layer == 'front'

- name: Check file
    shell: cat /tmp/back.txt
    register: myresult
  when: Layer == 'back'

- debug:
    msg: data was read from back.txt and print whatever
  when: Layer == 'back' and myresult.rc != 0

- debug:
    msg: data was read from front.txt and print whatever
  when: Layer == 'front' and myresult.rc != 0

Run the above playbook as

ansible-playbook test.yml -e Layer="front"

I do get error that says myresult does not have an attribute rc. What is the best way to print debug one statements based on the condition met?

I tried myresult is changed but that too does not help. Can you please suggest.


Solution

  • Use ignore_errors: true and change the task order. Try as below.

      - name: Check file
        shell: cat /tmp/front.txt
        register: myresult
        when: Layer == 'front'
      - debug:
         msg: data was read from front.txt and print whatever
        when: not myresult.rc
        ignore_errors: true
    
    
      - name: Check file
        shell: cat /tmp/back.txt
        register: myresult
        when: Layer == 'back'
      - debug:
         msg: data was read from back.txt and print whatever
        when: not myresult.rc
        ignore_errors: true