Made some progress by looking at the code.
In: lib/ansible/playbook/role/definition.py
if self._variable_manager:
all_vars = self._variable_manager.get_vars(play=self._play)
templar = Templar(loader=self._loader, variables=all_vars)
if templar._contains_vars(role_name):
role_name = templar.template(role_name)
Looks like that the variables are expanded from the play context, not from
the inventory which is not what I want in this case.
I want variables from the inventory to be expanded.
Is there any way to extend that behavior to include inventory variable ?
Best regards,
Lionel.
Le mercredi 6 mars 2019 12:15:11 UTC+1, Lionel H a écrit :
>
> Hi all,
>
> I have a bunch of nested roles for a specific project.
>
> I'm trying to dynamically invoked roles based on variable I have in the
> inventory.
> For example, let's say I have a foo variable that is defined for every
> hosts, the following will fail:
>
> #roles/A/meta.yml
> dependencies:
> - { role: "B/{{foo}}" }
>
> I would expect that it would load the roles in roles/B/<what foo point
> here>, but rather I have the following error:
> ERROR! 'foo' is undefined.
>
> Strange things, If I invoke foo as a play variable like this:
>
> - hosts: srv
> gather_facts: True
> vars:
> foo: "bar"
> roles:
> - { role: A }
>
> It correctly loads and execute roles/B/bar...
>
> So it seems to not expand inventory variable when passing them to "role"
> directive.. Is this an expected behavior ? Is there any workaround ? This
> is kind of annoying because I wanted to dynamically load roles based on
> inventory variables rather than relying on conditional include using plenty
> of "when:" statement in the meta directive...
>
> Best regards,
>
> Lionel.
>
--
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/c0a9e360-a8f3-4178-9eda-d826cac02a3d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.