Summary
In this chapter, we saw a few practical uses of Chef. We learnt how we can extend it to manage deployments using a dynamic server list via Capistrano. Next, we went about learning how to deploy applications using the deploy
resource provided by Chef. This resource is extremely useful as it allows Chef to act as both a configuration management system and a deployment system. We also saw how we can use Chef to provision clusters and build distributed systems. Finally, we learnt about Test-driven development using Chefspec and minitest-chef-handler.