Win the cloud with Winnaker!
I am happy to announce that we, at Target, decided to open source a tool called Winnaker. This tool will allow the user to audit Spinnaker from an end user point of view.
But first what is Spinnaker?
The first time I heard the word Spinnaker, my reaction was, “wait, what does that even mean in English?”
Shortly after, I found myself implementing a demo of Spinnaker as a potential replacement for our internal cloud deployment tool.
Spinnaker is a cloud agnostic continuous delivery tool, which means we can push our code to any cloud provider we like. In fact, Spinnaker takes agnosticism to the next level by introducing three abstractions.
- Load balancers
- Server groups
- Security groups
By enforcing this level of simplicity, it allows the implementation of deployment strategies such as Highlander, Red/Black on a vast different type of infrastructure (VM, Container, Kubernetes, public cloud, private cloud) with a high level of confidence and an incredible level of ease of use for the app developers.
Spinnaker also roots for the immutable infrastructure design pattern. Baking your image once and deploying the image everywhere is another bold move that differentiates Spinnaker from the other tools.
Why Winnaker ?
Short answer is because of automation!
Test the functionality of the CD system as a whole.
Spinnaker has different components (CloudDriver, Rosco, Deck,…). Each of these components have their own unit tests and health checks that can be monitored.
We learned the hard way that relying only on component health checks is not effective enough to ensure developers won’t face any error when they deploy their apps.
A few things can go wrong when off monitoring radar:
- Connectivity between the separate components
- Maxing out cloud provider API rate limit
- Base infrastructure configurations (subnet address space, identity management roles)
So we decided to audit Spinnaker and cloud’s whole functionality with a sample app. If baking and deploying our sample app in different accounts and regions passes, then we are positive that it works!
However, that kind of testing is time consuming and boring for humans. Winnaker brings back the fun to the testing.
Winnaker is the product of automating the auditing of your deployment process.
Automate Troubleshooting
Every error in Spinnaker means something new that we document, but who reads the documentation? Additionally, documentation goes out of date all the time.
Winnaker has a list of known error messages and it comes up with suggestions that you may want to use based on the error message.
For instance, this is an example of a Winnaker output :
- Failed for : This application has no explicit mapping for /error
- Suggestion : Check Deck
And you can add your own suggestion for errors.
What are the features of Winnaker ?
- Start a pipeline on Spinnaker with different options (force baking, deploy,…)
- Get stage details and return the non-zero error code.
- Screenshot the stages
- Pressure test your cloud deployment
- Integrates with HipChat
- Troubleshoot suggestions
- Works with different cloud providers.
How do you install Winnaker ?
There is nothing to install. Everything ships in a docker container. Winnaker uses chromedriver, python, virtualdisplay and selenium. Installing any of those things separately can be a recipe for headache sometimes.
What do you need ?
- A Spinnaker URL
- A sample app and sample pipeline to run
More extensive documentation is located in Winnaker’s GitHub repository. Please feel free to open issues or submit PRs.
About the Author
Medya Ghazizadeh is a Senior Engineer and part of Target’s Cloud Platform Engineering team.