Carolyn Van Slyck

Mega Release of Doom - Porter

Porter Logo

This is part of a miniseries explaining what I am working on lately: Porter which is based on the Cloud Native Application Bundle, or CNAB Specification. Start from the beginning

I just finished the release notes for Porter v0.5 and holy smokes, this is a MEGA RELEASE OF DOOM! 💥

The official release name is v0.5.0-ralpha.1+elderflowerspritz and as part of our release, I’ve finally gotten around to documenting how we name our releases.

Normally I’d just link to the release notes and let y’all enjoy the scavenger hunt of looking up the pull requests to figure out what features went in. But we went a lil overboard, a bunch of really cool features snuck in one after another before we realized “gee we haven’t released in a while” and I figured this one deserved a bit of showing off.

Install and Uninstall Bundles

You can now make a bundle, install it, then burn it to the ground all through porter. No need to fall back to using duffle anymore! 🎉

I am working hard to implement more commands so that you can do everything from porter.

Proper Templating

Jeremy has heard your request for templating and delivered! You can use Mustache template syntax in the manifest.

Anywhere you were previously using

something:
  source: bundle.parameters.foo

you can now use

something: "{{ bundle.parameters.foo }}"

You may have noticed the extra quotes, that’s YAML for you. It’s extra motivation for us to add support for more markup languages. 😉

Mixin Install Command and Mixin Feeds

The core of Porter are mixins and pretty soon there are going to be A LOT. I have been working on adding mixin distribution functionality to Porter to make it easier to find and manage mixins.

The first step is installing them (upgrade, and uninstall coming soon).

$ porter mixin install kubernetes --feed-url https://cdn.deislabs.io/porter/atom.xml
installed kubernetes mixin
kubernetes mixin v0.5.0-ralpha.1+elderflowerspritz (851458b)

For the moment, all of our mixins are available from a single Atom feed but you could also install a mixin that someone from the community created and uploaded to their repository’s Github releases.

I’m also working on subscriptions so that you can subscribe to a feed and stay up to date with a set of mixins, such as the ones that come with Porter by default.

Kubernetes Mixin

We have a Kubernetes mixin now! Just point it at your wonderful YAML-filled manifests, and it will handle running them in your bundle.

The docs are a wee bit missing and you should tease Jeremy unmercifully about that. But until then, here’s an example of how to use it.

You can install the mixin with the following command:

porter mixin install kubernetes --feed-url https://cdn.deislabs.io/porter/atom.xml

Terraform Mixin

ZOMG! Our first mixin contributed from the community! A huge thank you to Josh Dolitsky for making this happen, and to Vaughn for adding the finishing touches to get it release ready.

We have two real world examples demonstrating how to use the mixin with AKS and KeyVault.

You can install the mixin with the following command:

porter mixin install terraform --feed-url https://cdn.deislabs.io/porter/atom.xml

Reorganized Commands and Help Text

The porter commands have been grouped by resource, such as bundles or mixins, so that it’s easier to discover and explore the available commands in porter. As the number of commands increase in porter, this new help text template should make it easier to navigate porter’s commands.

$ porter --help
I am porter 👩🏽‍✈️, the friendly neighborhood CNAB authoring tool

Usage:
  porter [command]

Examples:
  porter create
  porter build
  porter install
  porter uninstall

Resources:
  bundles     Bundle commands
  mixins      Mixin commands

Aliased Commands:
  build       Build a bundle
  create      Create a bundle
  install     Install a bundle
  uninstall   Uninstall a bundle

Meta Commands:
  schema      Print the JSON schema for the Porter manifest
  version     Print the application version

Mask Sensitive Values

Sensitive values are masked with *** in the logs. 😎

All credentials and outputs are treated as sensitive by default. Parameters can be as well by adding sensitive: true.

Smart debugging

When you pass in --debug to porter, the flag is passed across contexts, such as into the bundle runtime during an install, so that you can see debug info EVERYWHERE.


Phew, so yeah like I said, MEGA RELEASE OF DOOM! 💥 It was well over 100 commits between v0.4 to v0.5 and I hope we all learned a very valuable lesson here. 😅