Hello,

I've been looking at using the support for conditionally including 
playbooks, that was introduced in Ansible 2.0, to simplify some old 
playbooks. I noticed that the playbook include conditionals are evaluated 
before any variables have been loaded. This means if you do something like:

- include: other_playbook.yml
  when: false

you get the nice:
skipping playbook include 'other_playbook.yml' due to conditional test 
failure
and the conditional doesn't get applied to every task inside the playbook. 
This is great and prevents having potentially hundreds of skipped tasks for 
a playbook that never ran.

However, if you use a conditional with any variable in it, even something 
like:
- include:other_playbook.yml
  when:"'{{ ansible_hostname }}' | match('special_server')"
the code in playbook/playbook_include.py will throw an AnsibleError when 
evaluating the conditional because ansible_hostname is undefined. It then 
passes the conditional on to every task.

Besides the extra skipped output, we've run into issues where roles get 
marked skipped inside other_playbook.yml and then aren't run by a later 
playbook. This led to some allow_duplicates being added to ensure the roles 
would be run the second time (which has led to some other complications 
with our upgrade to 2.x).

I'm curious if there's a reason fact gathering couldn't be done (if 
enabled) before playbook includes are evaluated to support better 
conditional includes. This would prevent a lot of skipped tasks and 
unnecessary allow_duplicate usage in our situation. Or is there a better 
way to approach this in general?

Thanks,
Thomas Brezinski

-- 
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/6e69872a-92ca-49dc-8dbb-69d2389e931c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to