I'm tasked with designing and implementing configuration management (Chef) for a infrastructure where the production servers are completely segmented and isolated behind a jump box.
---------------------------------
| Production | Staging, Test, Dev |
---------------------------------
The only way to get files into production is with a sftp connection. There are only two people who have the ability to jump into production directly. An exception could be made to allow a tightly controlled automation system (like jenkins) to copy files into production.
Normally, I would recommend setting up a single chef server in the cloud, however the production servers can not have external access. (Without a lot of convincing of some very reluctant people).
One solution I see is to use two Chef servers
---------------------------------------
| chef-production | chef-local |
| Production | Staging, Test, Dev |
---------------------------------------
Using two chef servers has some problems that I'm not sure how to overcome.
- How can I keep the production and the local servers cookbooks in sync?
- How could we add new production nodes to the production chef server, without requiring one of the admins to run the knife command?
- How could we make changes to the databags in production?
I'm open to other suggestions. I'm considering not using a chef server and instead use chef-zero
or chef-solo
. My understanding is that it isn't the best solution when using multiple environments.