Server Configuration via Salt

As a developer, solving problems is at my core. My newest project was no exception. I inherited a fairly sophisticated AWS infrustructure with a mixture of machines each with its own independent level of services and applications. After budget contraints forced us to part ways with our Sys Ops team, it became my job, as lead developer to maintain and scale this growing infrastructure.

One of the most tedious and time consuming issues with maintaining your own infrastructure beyond troubleshooting when stuff  breaks, is user management, and adding new servers to your expanding stack. This is especially true in a company that’s growing and working with multiple vendors.

So what’s the solution?…Automate!

Enter Salt. Salt is a Python based server automation application that allows a central machine (Salt Master), to talk to manage any machine running the client (Salt Minion) via easy to read scripts (Salt States). Machines can be assigned roles via Salt Grains in the Salt Minion config file (ex web server, MYSQL server, Redis), and software installation, maintenance, and configuration can be targeted based on these grains. Salt also has a plethrea of built in grains that allow you to target servers by things like: OS, hostname, previously installed software, and hardware components like RAM and CPU just to name a few.

Salt, out of the box, has modules for  most major software applications,  and gives you in depth command functionality like the ability to add MYSQL users, add and drop tables, and flush in Redis.

Their documentation is really easy to read, and their Salt States’s GitHub page has a bunch of easy examples to follow.