ENGINEERING STABILITY INTO KOMBUSTION'S PLUGIN SYSTEM
Kombustion is a CloudFormation tool that uses plugins to pre-process templates. It enables DevOps to re-use CloudFormation best practices, and standardise deployment patterns.
Kombustion's intent is to provide a reliable enhancement to CloudFormation. Starting with native CloudFormation templates, Kombustion uses plugins to enable offline reliable preprocessing transformations.
When you start using a plugin in your template, Kombustion relies on the following formula to guarantee stability of the generated template.
(SourceTemplate, Plugins) => Generated Template
Given the same
SourceTemplate, and the same
Plugins you will always get the same
To get this stability you need to commit
.kombustion to your source control. These files and folder are created when you initialise Kombustion, and install a plugin.
It's best practice for Plugins to be pure functions without side-effects. That is, with the same input they will always have the same output.
Kombustion makes an effort to prevent lock in, providing a way to "eject" from using it with
kombustion generate. This will save the template after it has been processed with plugins. With the generated template, you can use the
aws cli to upsert it.
You don't need to though, as Kombustion has a built in upsert function, with carefully chosen exit codes to make CI integration much easier.
In general when calling upsert if the changes requested (for example: Create Stack, or Update Stack) and are not cleanly applied, an error is returned.
And when calling Delete Stack if the stack is not fully deleted, an error is returned.
In addition Kombustion prints out the stack event logs inline so you have all the information you need to debug a failed upsert or delete, from within your CI log.
Without using any plugins, Kombustion will happily upsert a CloudFormation template. So you can start using it with your existing templates, and add plugins when you need to.
Download Kombustion from kombustion.io.
Follow our guide to writing your first plugin.