There are further changes to dynamic inclusion of tasks in ansible 2.5, so probably worth while testing with latest code rather 2.4.x versions now.
see https://docs.ansible.com/ansible/devel/porting_guide_2.5.html and https://groups.google.com/forum/#!topic/ansible-project/GsJ7GjUhI_g regarding testing out 2.5 alpha build. Hope this helps, Jon On Friday, February 2, 2018 at 8:53:34 PM UTC, Stas Fomin wrote: > > Hello all. > > Consider following sample project: > https://github.com/belonesox/ansible_dynamic_role_howto > > With tree: > . > > > > ├── > playbook.yml > > > > ├── > run-playbook > > > > └── > somedir > > > > └── > dynamically_defined_dir > > > > ├── > do.yml > > > > ├── > roles > > > > │ ├── > role1 > > > > │ ├── > role2 > > > > │ │ ├── > defaults > > > │ │ │ └── > main.yml > > > │ │ ├── > tasks > > > │ │ │ └── > main.yml > > > │ │ └── > templates > > > │ │ └── > sometemplate.j2 > > > │ └── > role3 > > > > ├── > run-nested-playbook > > > > ├── > templates > > > > └── vars > > Here we have here: > * A working playbook "do.yml" in "dynamically_defined_dir" (can be run by > "run-nested-playbook" shell script). > * A playbook "playbook.yml" that tried to use "nested" playbook "do.yml", > trying to redefine some of defaults of nested playbook. > * Playbook "playbook.yml" should be run ("run-playbook") with some > external parameters like this: > ansible-playbook -vvv -i 'localhost,' -c local playbook.yml > --extra-vars "external_extra_var=somedir" > > Expected (wanted) result for "run-playbook" > * Get contents of sometemplate.j2 with replacing default variables to some > variables/parameters from "playbook.yml" > * "Playbook.yml" should be without hardcoding paths to nested playbook > (should be calculated somehow from "--extra-vars"). Better by "set_fact" > some variable, and reuse it. > > ---- > What I have tried. ↓↓↓↓ > > First of all: "run as shell: ansible_playbook xxx xxx " is not an option > because then I completely lost execution progress of nested playbook. > > ---- > > > "import_playbook" > > → > import_playbook: > "{{external_extra_var}}/dynamically_defined_dir/do.yml" > * OK, can use external extra vars > * But it cannot use calculated variables: > - hosts: 127.0.0.1 > connection: local > tasks: > - set_fact: wtf_dir="{{external_extra_var}}/dynamically_defined_dir" > - include_tasks: > "{{external_extra_var}}/dynamically_defined_dir/roles/role2/tasks/main.yml" > > - import_playbook: "{{wtf_dir}}/do.yml" > We got "ERROR! 'wtf_dir' is undefined" > > Yes, from > https://docs.ansible.com/ansible/2.4/playbooks_reuse_includes.html + > http://docs.ansible.com/ansible/latest/playbooks_reuse.html > we have > "All import* statements are pre-processed at the time playbooks are > parsed. > All include* statements are processed as they encountered during the > execution of the playbook." > > So it works as expected, and here no "include_playbook" twin for > "import_playbook" :( > > OK. Lets drop "playbook" reusability, returns to "roles" reusability. > > --- > - hosts: 127.0.0.1 > connection: local > tasks: > - set_fact: wtf_dir="{{external_extra_var}}/dynamically_defined_dir" > - include_role: > name: "{{wtf_dir}}/roles/role2" > static: no > > Same problem → "ERROR! 'wtf_dir' is undefined" > > Probably this is a bug https://github.com/ansible/ansible/issues/19438 > > ---- > OK. Lets try to reuse nested playbook roles by "include_tasks". > > - hosts: 127.0.0.1 > connection: local > tasks: > - set_fact: wtf_dir="{{external_extra_var}}/dynamically_defined_dir" > - include_tasks: "{{wtf_dir}}/roles/role2/tasks/main.yml" > > Wow! No more "ERROR! 'wtf_dir' is undefined"… but "template" lookup not > works as it should: > "An unhandled exception occurred while running the lookup plugin > 'template'. … the template file sometemplate.j2 could not be found for the > lookup" > > I see, that it look for the template > in > * ./template > * ./somedir/dynamically_defined_dir/template > * ./somedir/dynamically_defined_dir/roles/role2/tasks/template > but not in right place: > * ./somedir/dynamically_defined_dir/roles/role2/template > > -------------------- > > So the questions is: > * Did I miss some another way to archieve my goal? > * May be I do something wrong obviously… Any workaround? > * "include_role" behavior — bug or feature? > * "include_playbook" absense — should we ask for implementation? > > Thanks all in advance, > Sincerely, Stas > > P.S. ansible-playbook 2.4.1.0 > > -- 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/b45b7b7f-1372-4bc4-90ef-551804df38fb%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
