Question:
My use case is the following :
I have a template file, and I would like to create 2 different files from that template, with the variables being filled by a different set of variables for each file.
For example, lets say I want to template the file containing the line:
1 2 |
mkdir -p {{myTemplateVariable}} |
I would like to find a proper way to get this variable filled by “File1” and “File2”. Something like :
1 2 3 4 5 6 7 8 9 10 11 |
- name: template test 1 template: src=myTemplateFile dest=result1 - name: template test 2 template: src=myTemplateFile dest=result2 |
where I could specify for the first templating that the variable to use is a = “File1” and for the second, b = “File2”.
Answer:
For Ansible 2.x:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
- name: template test template: src: myTemplateFile dest: result1 vars: myTemplateVariable: File1 - name: template test template: src: myTemplateFile dest: result2 vars: myTemplateVariable: File2 |
For Ansible 1.x:
Unfortunately the template
module does not support passing variables to it, which can be used inside the template. There was a feature request but it was rejected.
I can think of two workarounds:
1. Include
The include
statement supports passing variables. So you could have your template
task inside an extra file and include it twice with appropriate parameters:
my_include.yml:
1 2 3 4 5 |
- name: template test template: src=myTemplateFile dest=destination |
main.yml:
1 2 3 4 |
- include: my_include.yml destination=result1 myTemplateVariable=File1 - include: my_include.yml destination=result2 myTemplateVariable=File2 |
2. Re-define myTemplateVariable
Another way would be to simply re-define myTemplateVariable right before every template
task.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
- set_fact: myTemplateVariable: File1 - name: template test 1 template: src=myTemplateFile dest=result1 - set_fact: myTemplateVariable: File2 - name: template test 2 template: src=myTemplateFile dest=result2 |