group_vars and ansible's patterns - suggestions please!

Hi,

I’d like to know how others are dealing with keeping their group_vars files granular. Ours have become a little unwieldily and we’re considering approaches to breaking them apart.

When we provision a server, we assign it to a number of groups. Among those groups, each server is added to at least three groups. Firstly, we add it to a group which defines its role, for example app_server. Another group represents the location of the DC that the server is in, which might be LON, for example. Thirdly, we also add it to a group which denotes whether it is a production server or a test server, prod, for example. That allows us to use ansible’s patterns when we’re configuring the server to do something like this: - hosts: “prod:&LON:&app_server” or - hosts: “prod:&ORD:&app_server”.

We have a variables which need to be defined based on these three variables, Environment, Region and Role. Our current thinking is to create a group_vars file for each of the possible combinations, prod_LON_app_server, for example. The affect of this decision will mean that we’re going to see an explosion in the number of groups a server is added to, and the number of group_vars files we maintain.

Before we take this route, can anyone tell me if we’re missing a trick? Is there a technique that we’re missing?

Thanks!

Dan.

Hi Dan,

Why not store the values in a dictionary and just pull the values you need for any given server based on its key?

Alex

That’s a good idea. Thanks! I hadn’t thought of that. That will simplify things in one or two locations.

You’re quite welcome. I’m happy to help.

I use to use group_vars/. Instead I use vars/ now. Since include_vars plugin now supports directories and you can limit the depth of the include. Here is an example on how I manage vars/ today https://github.com/linuxdynasty/ansible-examples/tree/master/playbooks

This is really useful Allen. Thanks!

Dynamically including vars files was another option we’d considered. We had discounted it though as we were going to have to litter the include statement throughout our play books and roles which we didn’t like. Your dynamic_vars playbook is a neat solution to the problem.

Dan