Dnia czw, 17 lip 2014, 14:29:45 Michael DeHaan pisze:
I could be very very wrong about my assumption.
Can we see the source to your filter? It might be instructive about
what this might take.
I kind of hope you are, as it would be really handy to have this in
Ansible core ;-)
My filter is attached. I'm afraid it ignores variables set with Jinja2
in current template (as it only looks at the context with "basedir"
attribute), and I'm not sure about role's and play's vars. So far I've
only used it to access variables that could be resolved without even
looking at playbook, only with knowledge from inventory and
{group,host}_vars.
Example usage: {{ ('other_host' | get_hostvars).other_hosts_variable }}
On Thu, Jul 17, 2014 at 2:06 AM, Tomasz Kontusz
<[email protected] <mailto:[email protected]>> wrote:
Michael DeHaan <[email protected] <mailto:[email protected]>>
napisał:
>To be honest, nested variable evaluation in hostvars is a can of
worms
>to
>resolve and I don't think it will be a thing.
Can you point to any specific problems? I'm using a filter that
just resolves host's vars in the context of hostvars[host], and it
seems to work ok
>
>
>On Wed, Jul 16, 2014 at 5:01 PM, Tomasz Kontusz
><[email protected] <mailto:[email protected]>>
>wrote:
>
>> On 16.07.2014 22:40, Matt Peterson wrote:
>>
>> Given the following example:
>>
>> foo: "y"
>> boo: "x is {{ foo }}"
>>
>> This will renders in a template "x is y" (when referenced as
{{ boo
>}}).
>> However when called as hostvars[host]['boo'] this renders as "x
is {{
>foo
>> }}". From what I can tell this is an interpolation or merging
>problem. I've
>> tried different YAML formatting options to no avail. Appreciate any
>help or
>> direction to share, thank you.
>>
>> Nothing gets templated when accessed through hostvars, see
>> https://github.com/ansible/ansible/issues/7844 (disclaimer: I've
>opened
>> this issue).
>>
>>
>> --Matt
>> --
>> 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]
<mailto:ansible-project%[email protected]>.
>> To post to this group, send email to
>[email protected]
<mailto:[email protected]>.
>> To view this discussion on the web visit
>>
>https://groups.google.com/d/msgid/ansible-project/CAFN0R25WbD7P_SdMm26J0rN9Cmj%2BKOEHvF2yAGuy%2B7eS-V4zQA%40mail.gmail.com
>>
><https://groups.google.com/d/msgid/ansible-project/CAFN0R25WbD7P_SdMm26J0rN9Cmj%2BKOEHvF2yAGuy%2B7eS-V4zQA%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]
<mailto:ansible-project%[email protected]>.
>> To post to this group, send email to
>[email protected]
<mailto:[email protected]>.
>> To view this discussion on the web visit
>>
>https://groups.google.com/d/msgid/ansible-project/53C6E845.4050709%40gmail.com
>>
><https://groups.google.com/d/msgid/ansible-project/53C6E845.4050709%40gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
--
Wysłane za pomocą K-9 Mail.
--
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]
<mailto:ansible-project%[email protected]>.
To post to this group, send email to
[email protected]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/1d6e7a12-b194-4ca9-9525-7623fbbe24c9%40email.android.com.
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]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgy%2BRPi4FRNyr%3D5i2-o9WZ7V%3DyeFcC%3DzzOhAoAO8vQRQjA%40mail.gmail.com
<https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgy%2BRPi4FRNyr%3D5i2-o9WZ7V%3DyeFcC%3DzzOhAoAO8vQRQjA%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/53C83358.7010605%40gmail.com.
For more options, visit https://groups.google.com/d/optout.
from ansible.utils.template import _jinja2_vars
from jinja2 import contextfilter
class FilterModule(object):
def filters(self):
return {'get_hostvars': _hostvars}
@contextfilter
def _hostvars(ctx, hostname):
basedir_ctx = ctx
while basedir_ctx:
try:
basedir = basedir_ctx.basedir
break
except AttributeError:
basedir_ctx = basedir_ctx.parent
hostvars = ctx['hostvars'][hostname]
host_ctx = _jinja2_vars(
basedir,
hostvars, # vars
basedir_ctx.globals, # globals
basedir_ctx.fail_on_undefined,
# extras:
{})
return host_ctx