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.

Reply via email to