Staging/Production/Local Inventory Files

Hey All,

I currently have three separate inventory files to handle staging, production, and local installs for my project. I’m having difficulty figuring out the best way to configure variables while doing this. One example is that on local and staging servers I need to have nginx run on port 80 and not have varnish install, whereas on production servers I need the port to be 81 and have varnish install. I suppose I could create a host_var file for each and every server to ensure I set the variable to 80 or 81 where needed, but this seems way overkill.

How have people been handling this?

Thanks!

James

i use group_vars/all for common defaults, then override in group_vars/production, my inventory files make all production servers part of production group (qa, staging, same).

Sounds like group vars would help you out. Make sure you have 3 inventory files, one for each environment. In each one create a parent group (staging, prod or local). In your group_vars dir below your inventory, have a staging, prod, and local file that would contain the vars for that are specific or need to be overridden. For variable defaults, keep them in group_vars/all.

example inventory file:

[myservers]
server1
server2
server3

[prod:children]
myservers

ex:

inventory/
├── group_vars
│ ├── all
│ ├── local
│ ├── prod
│ └── staging
├── local
├── prod
└── staging

That’s similar to how I have things setup, but I was missing the piece about the parent group in each inventory file and then having a staging/prod/local group.

I found this article on Stack Overflow that had another solution that I’m currently implementing/playing with. Any thoughts or pros/cons of doing it that way?

Thanks for your help!