<story><title>Salt: Like Puppet, Except It Doesn’t Suck</title><url>http://blog.smartbear.com/devops/a-taste-of-salt-like-puppet-except-it-doesnt-suck/</url></story><parent_chain><item><author>SandB0x</author><text>I&amp;#x27;m not a web developer but I have a side-project that runs on a cobbled together EC2 instance. The server state is in theory documented in a set of of shell scripts and virtualenv requirements files.&lt;p&gt;I know that I should be doing this in a more robust way but whenever I try and read up on configuration management tools like Puppet and Chef, they&amp;#x27;re all described in comparative terms - Puppet does X better than Vagrant which does Y better than Chef, etc. I quickly lose patience and get back to digging myself into a deeper technical hole.&lt;p&gt;Is there a non-recursive explanation of what these tools are able to do and where someone like me should start?&lt;p&gt;Edit: Thanks for the helpful responses!</text></item></parent_chain><comment><author>danudey</author><text>These tools allow you to specify a state and then specify which servers should have that state. A &amp;#x27;state&amp;#x27;, loosely speaking, is a collection of definitions of &amp;#x27;X should be Y&amp;#x27;.&lt;p&gt;For example:&lt;p&gt;Package &amp;#x27;libapache2-mod-php&amp;#x27; should be installed. File &amp;#x27;&amp;#x2F;etc&amp;#x2F;apache2&amp;#x2F;sites-available&amp;#x2F;customersite&amp;#x27; should be the contents of this file we have on the master server. File &amp;#x27;&amp;#x2F;etc&amp;#x2F;apache2&amp;#x2F;sites-enabled&amp;#x2F;customersite&amp;#x27; should be a symlink to above. Directory &amp;#x27;&amp;#x2F;var&amp;#x2F;www&amp;#x2F;customersite&amp;#x27; should be the contents of this git repository. Command &amp;#x27;apache2ctl graceful&amp;#x27; should be run if any of the above change.&lt;p&gt;With these five rules, you can turn a default install of Ubuntu into a webserver providing client files in a matter of seconds.&lt;p&gt;Once you have those rules written, you then apply them. You can wildcard, so that hosts matching &amp;#x27;www*.yourhostingco.com&amp;#x27; get these rules.&lt;p&gt;Now, when you want to add a new webserver to your cluster, you install a new Ubuntu instance, you register it with the Salt master server, and then trigger a state update, and you&amp;#x27;re done. No SCP&amp;#x27;ing files, no manual git checkouts, no copy-paste-edit configuration management.&lt;p&gt;Then, once you&amp;#x27;ve got all that, you can get into templating. You can do templating both on the contents of files (e.g. for memcached config, insert the machine&amp;#x27;s internal IP address instead of having one config per server) as well as the rules themselves to avoid having a ton of boilerplate (for module in &amp;#x27;list&amp;#x27;,&amp;#x27;of&amp;#x27;,&amp;#x27;python&amp;#x27;,&amp;#x27;modules&amp;#x27;, install the module via pip with these rules).&lt;p&gt;One of my favourite benefits of something like Salt is that if you use Salt to do all of your configuration, then just back up your salt config to github or wherever, then you always have a record of how you did things. You don&amp;#x27;t get the incomplete documentation or missing steps that happen with most approaches.&lt;p&gt;As a sysadmin managing a cluster of systems, it can be life-changing.</text></comment>
<story><title>Salt: Like Puppet, Except It Doesn’t Suck</title><url>http://blog.smartbear.com/devops/a-taste-of-salt-like-puppet-except-it-doesnt-suck/</url></story><parent_chain><item><author>SandB0x</author><text>I&amp;#x27;m not a web developer but I have a side-project that runs on a cobbled together EC2 instance. The server state is in theory documented in a set of of shell scripts and virtualenv requirements files.&lt;p&gt;I know that I should be doing this in a more robust way but whenever I try and read up on configuration management tools like Puppet and Chef, they&amp;#x27;re all described in comparative terms - Puppet does X better than Vagrant which does Y better than Chef, etc. I quickly lose patience and get back to digging myself into a deeper technical hole.&lt;p&gt;Is there a non-recursive explanation of what these tools are able to do and where someone like me should start?&lt;p&gt;Edit: Thanks for the helpful responses!</text></item></parent_chain><comment><author>mitchellh</author><text>The other responses are awesome, but I just want to nitpick one thing (as the creator of Vagrant): Vagrant isn&amp;#x27;t a configuration management tool, so it can&amp;#x27;t really be compared with Chef&amp;#x2F;Puppet.&lt;p&gt;Vagrant actually works with Chef, Puppet, CFEngine, Ansible, Salt, and more.</text></comment>