Using Spinnaker with Chef & Puppet
Feb 17, 2017 by Isaac Mosquera
Spinnaker takes a opinionated approach to deploying software. Well, Spinnaker doesn’t really deploy software, it deploys infrastructure. The concept is better known immutable infrastructure. When changes are needed in production, the old infrastructure is torn down or disabled and replaced by new sets of VMs, load balancers and sometimes databases. This approach gives you greater confidence in your deployments and gives you sophisticated features out of the box with Spinnaker like clean rollbacks and phased deployments.
While tools like Chef & Puppet aren’t necessarily opposed to this approach, typical implementations continue to re-use the same VMs as new version of the code you’re deploying packages are deployed. So while mutable and immutable don’t generally mix well, Spinnaker fortunately comes with a “Bake” stage. “Baking” is a concept where you begin with a base image, e.g. ubuntu, debian, rhel and you add your packages and configure the base image.
You can move your Chef & Puppet templates to the “Bake” stage of your Spinnaker pipeline. Behind the scenes it’s all just packer scripts. You can specify a
package name that gets passed down to your packer template template. In this example we’re using
armory-hello-deploy-chef as the package and
aws-chef.json as the packer template. Note that
aws-chef.json is a custom template and you will have to implement your own for your teams to use.
This will result in an AMI that contains your artifact and will be ready to go through the stages of deployment such as dev, stage, pre-production, production. During the deployment phases you can add environment specific
user-data that will tell your app how to behave in that environment. For instance, where to find the staging db hostname vs production db hostname.
Since all bake stages must be preceded by a build stage (i.e. Jenkins) you’ll want to build an artifact if possible. This artifact (perhaps a tar or a zip file) that was generated should be the only thing that is passed to your template file if possible. It’s important to note that Spinnaker isn’t a dependency management tool for your software or machine configuration but more about lifecycle of your deployment and infrastructure.
This approach should get you started with Spinnaker and Immutable Infrastructure pretty quickly. Let us know if you have any more questions.