jebblue wrote:
dpkg --get-selections > pkgs.txt
update-alternatives --get-selections > pkgalts.txt
crontab -l > userid-cron.txt
Then just reverse them to set up each new instance and rsync the hom dir.
Or some version of the above.
That's not config management, that's "What packages do I have installed, and what's my crontab?" I suppose that works if your configuration is just the distro-provided defaults, but that's almost never the case. A proper config management setup would allow you to kill the machine (zero the disks, remove the vm, etc.) and delete all the backups of the machine, and still be able to replace it with a functional copy, without needing any manual setup of any kind (except maybe installing the agent for the config management system you're using, but even that can be automated with the OS install).
Nuvini wrote:
- Push changes to multiple servers (and/or certain server-"groups")
- Rollback changes if something went wrong
- Able to easily set up a new, fresh server with certain variables, install some packages, etc... I believe this is the most basic functionality so this shouldn't be a problem.
- Easy to use (web) interface to see the status of nodes and deploying a new one. Bonuspoints for a link to (or options to built a) link to the Linode API so it can automatically create a new server, log in to it and set it up. (to do this, I believe the "master" must be able to use purely SSH, and I believe Salt has this option (instead of having to install a client on the server first)).
Salt can do all of that, including creating new Linodes and deploying the minion onto them. I'm almost positive you could tell it to do the minion install from a StackScript, so that you don't even have to deal with SSH at all (minion keys may be an issue in this case; it's worth looking into). A web interface to Salt is in the works, but it's nowhere near finished yet. All of the components of Salt are open source on
GitHub, so feel free to contribute improvements

.
masonm wrote:
- Puppet requires you to write everything in a declarative DSL. It's a very elegant language, but it forces a lot of constraints on you, and takes a long time for non-sysadmins to really grok. Chef uses Ruby for everything and is easier for programmers to understand, since it lets you write things in an imperative style. I spent much longer trying to wrestle Puppet into doing what I wanted than I did with Chef, but the end result with Puppet was usually cleaner and simpler. If I was part of a big team of sysadmins, then that tradeoff might be worth it, but I'm not.
I've heard a lot of horror stories about writing Puppet manifests, so this must be where they come from. The large setup requirements for a useful Puppet installation is also big turn-off. Personally, I'm not a fan of ruby, so for me, that throws out both Chef and Puppet.
My main complaint with Ansible is that it chiefly uses SSH, which doesn't scale very well with large numbers of servers. Salt seems to solve all of my major requirements, and easily scales to tens to hundreds of thousands of servers without issue. There's a lot of really intelligent design decisions that go into Salt every day, and they give you more than enough rope to hang yourself with, which is a good thing.
At the end of the day, you should probably try them all, and see which one works best for your needs.