- no upfront installation on remote/slave machines - ssh should be enough
- configuration templating
- environment requires/asserts, i.e. we need a JVM in a given version before doing deployment
Ansible, Chef, Puppet, Salt
What is difference between docker, puppet, chef and vagrant?:
- turns the configuration of an environment in to source code.
- That code can then be managed from within a VCS such as git or SVN so that changes are attempted, shared, rolled forward and rolled back in a much more frictionless way than the traditional written specification documents or word-of-mouth configuration sharing (e.g. do this .... now try that ... no, OK then try this) described beautifully in Gene Kim's book The Phoenix Project.
Seems the choice of many that gets me curious what others offer in the space.
Ansible fulfills your requirements. Environment requires/asserts would be handle by tasks that can either be fired or can be decided to be skipped because they are already done (like apt task, it will install package only if it is not installed yet).
Ansible seems to be stable but sometimes you can find a subtle bug as it is still fairly young solution. On the bright side most bugs are fixed quickly.
It's open source and you can write your own plugins as well :)