The art of provisioning systems is the past, nowadays is time for the Cloud architectures, where everything should be as ephemeral as possible, with the exception of the data. Those wars between sysadmins about who has the system with more uptime are gone (fortunately). The systems should be replicable and if one needs and update, just recreate it, it is said that is not a pet. Of course, there are always special use cases, but ephemeral is the philosophy of the Cloud.
First was automation …
During last years of my career I have tried different provisioning and configuration management systems. First, promoted by my former colleague Hector, we tried Puppet (in AIX, more than 4 years ago … early versions, having to compile everything in AIX …) but the fact of having most of the tasks automated was amazing. When I joined Springer, I learnt Chef because it was the tool which they were using, but honestly, I have never been convinced about Chef and I had the feeling that is one step behind Puppet. Then we decided to give a try to Ansible, which is becoming more an more mature. Chef and Ansible are more oriented to tasks, Puppet is oriented to states. To manage tasks and different heterogeneus systems (like those which can be found in big companies) I prefer Ansible because of it simplicity and for the rest of use cases where Ansible is not suitable, Puppet is better . I have not tried SaltStack, Fabric, and other but I think all those tools are based on the same idea: taking care of servers (VMs or bare-metal).
… and then BOSH came to the stage
When were trying Cloud Foundry, first we tried Chef (yes, there were a way to install CF with Chef!) and then Simon decided to give a try to a tool called (micro)BOSH. In the beginning was not easy: no documentation, bugs, … the learning curve was hard, getting used to its way of working took time and sometimes frustration. But, with each new CF release, Bosh was there in charge of upgrading the platform, with every new BOSH releases came more features, more documentation, more community. Then I embraced Bosh. Now, I cannot imagine how to to manage a platform like CF with a different tool.
In the last months, I made some Bosh releases and now I am programming a CPI for Ironic (OpenStack bare metal provisioning). I do not want to go back to traditional provisioning tools. For me, all of those provisioning systems are like going back to the past, to the horrible world of trying to maintain/manage/control VMs. They are focused on VM’s, not on building services, and in my opinion, that is the main reason why they are not suitable for Cloud architectures. After discovering Bosh everything else seems spaghetti code to me. Bosh abstracts the infrastructure to help me focusing on the architecture of the services, I do not care about VMs. It is the only tool I know which does checks/validation and manages the entire life-cyle of the components of a service. The VMs are just the needed evil for Bosh. If I decide to migrate a service to another infrastructure (AWS/OpenSTack/CloudStack …) I do not need to change anything regarding the service (only DNS, IPs, VM types and those other things regarding the new infrastructure). Moreover, with the new BOSH 2.0 manifest style is even easier that before: the manifest (configuration settings of the service) can be exactly the same on different infrastructures because their specific parameters will be in cloudconfig manifest, so no more YAML merging tools! An operator will maintain the service running in OpenStack in the same way they were doing in VSphere. Forget about how to recover the previous release of your service; forget about scaling out, about integrated DNS, about bastion hosts for ssh connections; forget about unresponsive VMs and where is the persistent data …
I know Bosh is an opinionated tool, but I think nobody should give an opinion about it without giving a try to manage services with it. It is not about reading other’s opinion on the Internet (like this one), most of those are old complains about how difficult was starting with BOSH and creating releases. There are documentation and examples in bosh.io, a lot of releases are being created by the community; just take one, spend one week trying it and I hope you will see why I think this tool’s philosophy is the future: Nobody wants to maintain VMs. People want building services and Puppet/Chef/Ansible/… are just different implementation about the same idea. New approaches like Bosh, Kubernetes, etc … will evolve and become some kind of standards (I do not know if the tools itself will remain, but for sure the idea), because they do not care about VMs (or containers): they are focused on services. For everything else there is Ansible :-)