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 ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
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