So, half the value of posting like this is it forces (hopefully) you to 
think things through. Just as I was posting, I figured that I could try 
just calling the group without actually applying a role or performing any 
tasks.

- hosts:
>   - alpha
>
> - hosts:
>   - beta
>   role:
>   - common
>

Doing that does pull in the vars from group_vars/alpha.yml. Which is what I 
want.

That means that to get what I want, I can add a - hosts that lists all my 
groups under it without any roles or tasks.

Still feels awkward, but at least it's a work around.

Anyone else have a better suggestion?

Or at least have the same issue and found this useful?


On Wednesday, March 25, 2015 at 2:53:52 PM UTC-7, David Reagan wrote:
>
> So, I'm running into an issue with variable precedence. I'd appreciate any 
> feedback. Apologies for how long this is, I'm trying to make sure 
> everything is clear.
>
> First, I set ```hash_behavior=merge``` in my ansible.cfg file. This lets 
> me avoid having to repeat configuration across hosts, roles, and the all 
> group. (DRY)
>
> For example:
>
> group_vars/all.yml
>> foo:
>>   bar1: 'me'
>>
>> host_vars/node1.yml
>> foo:
>>   bar2: 'you'
>>
>
>
> Instead of what I'd have to do with ```hash_behavior=replace```:
>
> group_vars/all.yml
>> foo:
>>   bar1: 'me'
>>
>> host_vars/node1.yml
>> foo:
>>   bar1: 'me'
>>   bar2: 'you'
>>
>
> The issue that I'm running into is what happens when you throw groups 
> other than ```all``` into the mix.
>
> group_vars/alpha.yml
>> foo:
>>   bar5: 'myself'
>>
>> group_vars/beta.yml
>> foo:
>>   bar9: 'I'
>>
>
> Now, this works just fine, I get all foobars.
>
> hosts:
>>   - all
>>
>
> But if I go:
>
> hosts:
>>   - beta
>>
>
> I get
>
> group_vars/all.yml
>> foo:
>>   bar1: 'me'
>>   bar2: 'you'
>>   bar9: 'I'
>>
>
> When I want bar5 from group_vars/alpha.yml in there as well.
>
> Basically, if you limit your hosts by group, only the vars in the all 
> group, the specific groups you select, and your host_vars are applied. 
> (From these variable sources, I'm ignoring -e, and vars: and vars_files:.)
>
>
> The issues I see are:
>
>
>    - How do you determine which group has precedence when the var names 
>    are the same?
>       - I think this is why Ansible works the way it currently does. I 
>       can't think of any way to figure precidence out from groups without 
> having 
>       the user create some kind map.
>       
>
>    - What if the reason I'm using a group is to avoid any other vars 
>    getting in the way?
>    - Is it really a good idea to load all the vars, all the time? 
>    - From a processing standpoint.
>       
>
> The only (somewhat) DRY solution I can think of is to just ignore groups 
> other than ```all```. That leaves me copying any config that doesn't apply 
> to every node, into the host_vars files every node to which it does apply. 
> Which is kinda annoying when you need to change that config...
>
>
> For a more concrete example:
>
> I have a role that applies iptables rules, and a role that manages Monit 
> probes. On the servers in my apache group, I want to open 80 and 443, and 
> watch the apache process to make sure it doesn't go down. On the servers in 
> my mysql group, I want to open port 3306, and to watch the mysql process. 
> Some of my servers are in both groups, and if I just call the mysql group, 
> then only 3306 is opened, while 80 and 443 are closed, and only the mysql 
> process is watched, while the apache process is ignored. When what I want, 
> is for the iptables and Monit roles to pull the vars from both mysql and 
> apache groups, even when I'm not calling both groups.
>
>
> Anyway, any suggestions? How can I avoid repeating myself? How can I make 
> groups actually useful to me?
>

-- 
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/e858e467-775b-4e6e-ac93-69cbfcd9ef73%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to