-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.
