when statements, as well as other templating in a task, uses the context of the target host in the play, not the delegated host.
You could use `hostvars.localhost.not_found` instead in the `when` statement. On Tue, Oct 27, 2020 at 3:43 PM [email protected] < [email protected]> wrote: > I have a playbook that executes a command on a set of routers (inventory > hosts) looking for a specific IP address. The playbook uses the "meta: > end_host" on hosts that do not return a desired result. This works fine. > A result is returned to the user via a URI call. > Now I'd like to return "not found" with the URI call, when none of the > routers have the IP address. Unfortunately the meta:end_host ends the > playbook. > I've tried setting a "flag" on localhost as ansible_fact but the when does > not work. > > - name: Set default value for ip not_found flag > set_fact: > not_found: true > delegate_to: localhost > delegate_facts: true > run_once: yes > ... > - name: Set default value for ip not_found flag > set_fact: > not_found: true > delegate_to: localhost > delegate_facts: true > run_once: yes > ... > - name: NOT FOUND > uri: > url: https://{{ cmdb }}/{{ test_results }} > method: PUT > body_format: json > body: { > "jobId": "{{ tower_job_id | default('000')}}", > "result": "Search for IP Address {{ realtime_ip }}", > "details": "NOT FOUND" > } > delegate_to: localhost > when: not_found > > The last play does not delegate to localhost so I get an error that > not_found does not exist. What I'm I doing wrong. Any other way I can > accomplish this. I dont want "failed" hosts from the playbook. > TASK [NOT FOUND] > ******************************************************************************************************************************************************************************* > task path: > /home/smitsi1/tower-network-playbooks/find_ip_mac_realtime.yml:155 > fatal: [router-lab-srp.gw.mcgill.ca]: FAILED! => { > "msg": "The conditional check 'not_found' failed. The error was: error > while evaluating conditional (not_found): 'dict object' has no attribute > 'not_found'\n\nThe error appears to be in > '/home/smitsi1/tower-network-playbooks/find_ip_mac_realtime.yml': line 155, > column 5, but may\nbe elsewhere in the file depending on the exact syntax > problem.\n\nThe offending line appears to be:\n\n # Check if None of the > routers have an ARP then IP not found. Want to return \"not found\" to > NetMan\n - name: NOT FOUND DEBUG\n ^ here\n" > } > > -- > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/9a09459c-7cf6-4721-af43-80c970f5c68en%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/9a09459c-7cf6-4721-af43-80c970f5c68en%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Matt Martz @sivel sivel.net -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAD8N0v9UcJoXuEKeD4g%2B1aZCO%2B5Lz8AGyPrHi45485MJv1nAOg%40mail.gmail.com.
