So I figured out a setup that works for what I am trying to do. I was 
trying to set a hiera structure so that I could set global variables at the 
top and have more specific groups overwrite these variables. I ran into a 
lot of issues trying to set this up for multiple environments that span 
multiple datacenters. 

I have an inv file for each environment (dev, test, prod). In my ansible 
home directory I have a dir called 'env'. Inside there I have a dir for 
each environment. In each environment I have a playbooks/group_vars 
directory. So for each environment I have:

/etc/ansible/dev <- Inventory
/etc/ansible/group_vars <-global group_vars
/etc/ansible/env/dev/playbooks <- Environment specific playbooks
/etc/ansible/env/dev/playbooks/group_vars <- Environment specific variables 
since group vars in the playbooks directory overwrite the inv group_vars

When I run ansible I run:

ansible-playbook -i dev env/dev/playbooks/web-server.yml

I still have to specify each location. It works out though. I create a main 
group for example [web-server] then i set its children to web-server-loca 
and web-server-locb.

#Location

[loca:children]
web-server-loca

[locb:children]
web-server-locb

[web-server:children]
web-server-loca
web-server-locb

This way site specific vars overwrite role vars, and role-location vars 
overwrite location specific vars.

I have hash merging enabled as well. This setup allows me to set something 
in /etc/ansible/group_vars and have the more specific environment variables 
(/etc/ansible/env/dev/playbooks/group_vars) overwrite the global vars, or 
if needed merged via hash.

I hope this helps someone else.

On Monday, April 6, 2015 at 11:15:06 AM UTC-4, koka424 wrote:
>
> I was trying to avoid a group_var file for everything but it looks like 
> that is the route that I am going to have to go. I have set the 
> parent-child relationship of the groups in my inventory files. So in my 
> group_vars directory I have location_a, location_b, dev, prod, qa, 
> location_a_dev, location_b_dev, location_a_web, location_b_web, etc. This 
> accomplishes what I want but I feel like it is going to get out of control 
> very quickly. If there is a better  way to accomplish this please let me 
> know.
>
> On Thursday, April 2, 2015 at 10:43:43 PM UTC-4, Johnathan Komara wrote:
>>
>> I am having trouble wrapping my head around how i should setup my 
>> variable structure. I have two locations with multiple environments at 
>> each. I can have different variables depending on the location and 
>> production env.
>>
>> For example, I have a dev web server at location A and a prod web server 
>> at location B. I want them to each have a separate virtual host. What is 
>> the best way to accomplish this?
>>
>> I tried putting variables in the group_vars directory with a separate 
>> directory for each location, then subdirectories for each environment, but 
>> then I each location is going to pull in every variable from all 
>> environments.
>>
>> I tried just using group_vars (all, webserver, etc) but I couldn't get 
>> this to work either unless I have a group_var file for every group at every 
>> location for each environment.
>>
>> The only other thing that I can think of to do to accomplish this is to 
>> put the defaults for all groups in group_vars. In my inventory file for 
>> each location or environment I can assign a group_var (i.e. env_type=dev). 
>> Then in my playbook I can do:
>>
>> var_files:
>>  -  /var/{{  location  }}/{{  env_type  }}/group_name.yml
>>
>> I want to avoid duplicating variables that are the same for each env and 
>> make the roles as dynamic as possible. I've read through the docs and can't 
>> seem to make sense of it. I am sure that Ansible or someone else has 
>> figured out. I just cant find it. If someone can point me in the right 
>> direction I would really appreciate it.
>>
>> Thanks.
>>
>

-- 
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/57842032-e7e2-4a3a-8ad8-e68e82669859%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to