I certainly don't want to see dynamic includes go away. Assuming the preprocessing and running code is neatly split, how about:
1. Preprocess "static" includes - which can be identified by the absence of J2 constructs in them 2. Dynamically preprocess dynamic includes and run them as currently. 3. Add a "dynamic: yes" flag which optionally adds the dynamic behaviour for things that look like static includes. On Monday, 14 March 2016 16:17:10 UTC, James Cammarata wrote: > > Hi all, we've been working on a solution over the last few weeks to > address the problems introduced by making includes dynamic in 2.0, and > would like some community feedback on my ideas. > > As you're all probably well aware by now, we moved task-level includes to > be completely dynamic in 2.0 to make doing things like loops easier. In > 1.9.x and before, includes functioned like pre-proccessor statements - the > files were parsed, turned into a list of tasks, and inserted into the main > list of tasks at the time the main playbook or role was parsed. > > The downside to this move was to make it quite difficult to handle certain > situations, as we now know nothing about those files (and specifically what > tasks are in those files) until we encounter them in the regular execution > of the playbook. As such, we don' t know what tags are there, and when > notifying handlers the task names aren't known so the notifications fail. > > To address this shortcoming, our idea was simple: allow includes to be > marked as static, and as such they again function as pre-processor > statements. Here is the feature branch where we implement this change: > > https://github.com/ansible/ansible/compare/static_includes > > In a nutshell, there are now two ways to make includes behave as they did > in 1.9.x: > > 1. Use the `static: true` option on the include. > 2. Set options in your ansible.cfg. There is one option each for regular > tasks, and one for handlers, as some may wish to make all handler includes > static without impacting those in regular task sections. > > Example: > > - hosts: all > gather_facts: yes > tasks: > - include: foo.yml > static: yes > > Or, if you're migrating from 1.9.x (or earlier) to 2.0 and want all of > your includes to work as they did before, add the following two options to > your ansible.cfg in the [defaults] section: > > task_includes_static = yes > handler_includes_static = yes > > The caveat to all of this is of course that using loops on a static > include will no longer work. Also, any playbook marked as static using > variables must have those variables available at compile time (no inventory > sources are available at this point). > > We're looking at merging this in for the 2.1 release (targeting an April > release), so any comments/ideas for making it work better are appreciated. > If you've avoided the 2.0 release because of the impact of dynamic > includes, we'd really love to hear how your playbooks work (or don't) when > using this feature branch with dynamic includes disabled completely. > > Thanks! > > James Cammarata > > Ansible Lead/Sr. Principal Software Engineer > Ansible by Red Hat > twitter: @thejimic, github: jimi-c > -- 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/7f1f83e5-df56-40aa-8e93-3e58e991d282%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
