Yes, set_fact sets the fact in the hostvars cache, so that it is available from that point on. You may want to look at using defaults/main.yml rather than set_fact to accomplish what you want.
On Fri, Jun 6, 2014 at 6:07 PM, Nathan Robertson <[email protected]> wrote: > So I found part of the problem. > > First the set_fact only seemed to work when using the second format in the > documentation > > - set_fact: > var2: "something" > > when: var2 is not defined > > second I found that if the set_fact runs in a role once and you run that > role multiple times with different variable the set_fact will hold over > until it is run at that level again. > > For example: > > > > roles: > - { role: test_role, var1: 'some string', var2: "{{ some_var }}" } > - { role: test_role, var1: 'some string', var2: "{{ some_var }}", > var3: "{{ some_var2 }}" } > > > In the first run var3 gets set to 'something' > on the second run even thought I tell it to set var3 to {{some_var2}} it > seems to remember that at that level it was previously set to 'something' > and that local setting takes president as if it was set that time around as > well (even though it isn't) > > > On Friday, June 6, 2014 9:43:25 AM UTC-7, Nathan Robertson wrote: >> >> I am either missing something simple or ran into a bug. >> >> I have a playbook that passes variable to a role as follows: >> >> >> roles: >> - { role: test_role, var1: 'some string', var2: "{{ some_var }}", >> var3: "{{ some_var2 }}" } >> >> >> Now both some_var and some_var2 are set (verified with a debug before >> this) >> >> in the role I have the following: >> >> - set_fact: var2 = "something" >> when: var2 is not defined >> >> - set_fact: var3 = "something" >> when: var3 is not defined >> >> - debug: "msg=' {{ var3 is not defined }} '" >> >> - debug: "msg='{{ var2 }} {{ var3 }}'" >> >> >> Now the output is as follows >> >> TASK: [test_role | set_fact var2 = something] *** >> skipping: [10.0.0.1] >> >> TASK: [test_role | set_fact var3 = something] *** >> ok: [10.0.0.1] >> >> TASK: [test_role | debug msg=' True '] ****************************** >> ********* >> ok: [10.0.0.1] => { >> "item": "", >> "msg": " True " >> } >> >> TASK: [test_role | debug msg='{{var2}} {{var3}}'] ******** >> fatal: [10.0.0.1] => One or more undefined variables: 'var3' is undefined >> >> So as you can see the var2 is passed through and is defined and so the >> set_fact is skipped. >> But var3 is not passed so the set_fact runs but it is still undefined >> afterwards. >> >> I have tried changing the order of the variables in the playbook, >> renaming the variable and I always get the same problem. Anyone know what >> I'm missing? >> >> Thanks, >> > -- > 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/21313b03-58b7-4151-a714-e93ba6c8ef30%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/21313b03-58b7-4151-a714-e93ba6c8ef30%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- 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/CAMFyvFhtv4cvHsNTXyBwdk%2BHv0sguUF_o7P1UePPwiEd9hwe4g%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
