-e does bind pretty early, but it seems like you are using variables in
paths to "vars_files" that already resolve, so it selects what file to use
earlier.

This is technically required to set globals in those files.





On Sat, Oct 25, 2014 at 7:13 AM, Hagai Kariti <[email protected]> wrote:

> Hi Michael, thanks for your response.
>
> Before I describe my usecase I'd like to point out that the current
> behavior is a bug IMO, because it evaluates variables before all variable
> sources are looked at. I understand evaluating variables early so they can
> be used as soon as possible, but no task/play is run before all var sources
> are loaded anyway, so I don't see a case when a variable is unavailable if
> evaluating is postponed in this case.
>
> Now for my usecase. I have a play that creates ec2 instances. An ec2
> instance needs a region to be created in, and a base image id (AMI id in
> ec2 terms).
>
> I defined the default region to create instances as an inventory variable
> (as it's different for prod and stage environments):
>
> prod/group_vars/all:
>
>     region: us-west-1
>
> and I have a region<->AMI id mapping in an external vars file:
>
>     amis:
>         us-west-1: AMI1
>         us-east-1: AMI2
>
> And the play uses it like so:
>
>     vars:
>        ami_id: "{{amis[region]}}"
>
> Problem is, if I want to run the playbook and override the region with -e
> I can't, because ami_id is evaluated before '-e' takes effect.
>
> I have a different usecase for my second example (the once with the
> |default line) if you want. If you think I didn't model this case well,
> I'll be glad to hear of a better way that solves my problem. Nevertheless,
> I still think one should expect the above way to work.
>
> Thanks again.
>
> On Fri, Oct 24, 2014 at 4:19 PM, Michael DeHaan <[email protected]>
> wrote:
>
>> Trying to sort through the email storm here :)
>>
>> Yes, vars_files and such will evaluate all the variables it can *So that
>> they may be used* if possible early, as that is often the case.
>>
>> While it doesn't help your question, I would try to not complicate your
>> infrastructure so much, it's hard to say from your theoretical example, but
>> if you could post a more real world example of showing what you are trying
>> to model, I think you might be doing something a little non-idiomatic.
>>
>>
>>
>>
>>
>> On Thu, Oct 23, 2014 at 4:22 AM, Hagai Kariti <[email protected]> wrote:
>>
>>> Hi Stephen
>>>
>>> First of all, thanks a lot. Your changes however did not solve my second
>>> case, the one using 'default' on inventory variables. So I guess some more
>>> tweaking is required. I'd love to help btw.
>>>
>>> Something is also weird about your pull request - it's not in its own
>>> branch, which makes it more difficult to pull to my repo (I had to copy the
>>> individual files manually!).  I put them in a branch in my fork if you
>>> want: https://github.com/hkariti/ansible/tree/premature_template_vars
>>>
>>> On Wed, Oct 22, 2014 at 10:10 PM, Stephen Gargan <[email protected]
>>> > wrote:
>>>
>>>> Hagai,
>>>>
>>>> I had a similar issue and posted a pull request for it a while back.
>>>> Its not been merged yet but you can grab it here
>>>>
>>>> https://github.com/ansible/ansible/pull/9106
>>>>
>>>> Try applying it and see if it fixes your issue too.
>>>>
>>>> regards,
>>>>
>>>> Steve.
>>>>
>>>> On Wednesday, 22 October 2014 13:48:18 UTC+1, Hagai Kariti wrote:
>>>>>
>>>>> Since my issue <https://github.com/ansible/ansible/issues/9393> was
>>>>> closed without a response and redirected me to the list, is it possible to
>>>>> get a response here?
>>>>>
>>>>> On Tuesday, October 7, 2014 10:50:13 AM UTC+3, Hagai Kariti wrote:
>>>>>>
>>>>>> Hi
>>>>>>
>>>>>> I hope this is the right place to post this. I reported
>>>>>> https://github.com/ansible/ansible/issues/9242 a few days ago and I
>>>>>> still have issues after it was closed. I'll give a similar example to the
>>>>>> one I gave in the issue, but using vars_files and adding one more 
>>>>>> usecase:
>>>>>>
>>>>>> inventory:
>>>>>>
>>>>>> localhost ansible_connection=local
>>>>>> [all:vars]
>>>>>> var=one
>>>>>>
>>>>>>
>>>>>> vars_file:
>>>>>>
>>>>>> var2: "{{var}}"
>>>>>>
>>>>>> mapping:
>>>>>>   one: 1
>>>>>>   two: 2
>>>>>>
>>>>>> playbook:
>>>>>>
>>>>>> ---
>>>>>> - hosts: localhost
>>>>>>   gather_facts: no
>>>>>>   vars_files:
>>>>>>     - vars_file
>>>>>>   vars:
>>>>>>     value: "{{mapping[var]}}"
>>>>>>   tasks:
>>>>>>     - debug: var=var
>>>>>>     - debug: var=var2
>>>>>>     - debug: var=value
>>>>>>
>>>>>>
>>>>>> command:
>>>>>>
>>>>>>     ansible-playbook -i inventory playbook.yml -e var=two
>>>>>>
>>>>>> output:
>>>>>>
>>>>>> TASK: [debug var=var] ******************************
>>>>>> ***************************
>>>>>> ok: [localhost] => {
>>>>>>     "var": "two"
>>>>>> }
>>>>>>
>>>>>> TASK: [debug var=var2] ******************************
>>>>>> **************************
>>>>>> ok: [localhost] => {
>>>>>>     "var2": "one"
>>>>>> }
>>>>>>
>>>>>> TASK: [debug var=value] ******************************
>>>>>> *************************
>>>>>> ok: [localhost] => {
>>>>>>     "value": "1"
>>>>>> }
>>>>>>
>>>>>> In older versions (1.5.5 is the one I test with), the third (mapping)
>>>>>> usecase is working properly, but the second does not. In the latest dev,
>>>>>> both don't work
>>>>>>
>>>>>> Thanks!
>>>>>>
>>>>>  --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "Ansible Project" group.
>>>> To unsubscribe from this topic, visit
>>>> https://groups.google.com/d/topic/ansible-project/EunpeCL45k8/unsubscribe
>>>> .
>>>> To unsubscribe from this group and all its topics, 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/12a88f83-d97f-4afe-93b3-644ee6887180%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/ansible-project/12a88f83-d97f-4afe-93b3-644ee6887180%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/CAO0%3DbmHkhDRcMx9DcuvRNLjneiksMsvSmRf9f3EBJEZFDgdGVA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/ansible-project/CAO0%3DbmHkhDRcMx9DcuvRNLjneiksMsvSmRf9f3EBJEZFDgdGVA%40mail.gmail.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 a topic in the
>> Google Groups "Ansible Project" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/ansible-project/EunpeCL45k8/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, 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/CA%2BnsWgxuB2GUWp-W3LpLnO_utLo-wLMadcFyxVhM5u%2BdaSdqXQ%40mail.gmail.com
>> <https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxuB2GUWp-W3LpLnO_utLo-wLMadcFyxVhM5u%2BdaSdqXQ%40mail.gmail.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/CAO0%3DbmHw8%2BkdCJCkgHfc1j7ujF_7eU%2BE49WKEHaQeSMZVarZSA%40mail.gmail.com
> <https://groups.google.com/d/msgid/ansible-project/CAO0%3DbmHw8%2BkdCJCkgHfc1j7ujF_7eU%2BE49WKEHaQeSMZVarZSA%40mail.gmail.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/CA%2BnsWgyKCSB5Rv0mEMM8kmethk8yjoroJcekQUVWymu%2BXb0OAw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to