Blossom Logo Deploy your apps with Heroku-like simplicity using Blossom See Your Savings

Advanced Variables

Basic variables layering should provides enough flexibility and is generally recommended. This page covers more advanced variables layering.

Advanced Layering Example

Here’s a more complex structure to demonstrate advanced layering.

.kubes/variables
├── base
│   └── deployment.rb
├── base.rb
├── dev.rb
├── prod.rb
└── web
    ├── deployment
    │   ├── dev.rb
    │   └── prod.rb
    └── deployment.rb

Concrete Example

Let’s look at a concrete web/deployment.yaml.

Here are the files that get layered when KUBES_ENV=dev:

.kubes/variables/base.rb
.kubes/variables/dev.rb
.kubes/variables/base/deployment.rb
.kubes/variables/web/deployment.rb
.kubes/variables/web/deployment/dev.rb

And when KUBES_ENV=prod:

.kubes/variables/base.rb
.kubes/variables/prod.rb
.kubes/variables/base/deployment.rb
.kubes/variables/web/deployment.rb
.kubes/variables/web/deployment/prod.rb

With advanced layering you can target a specific role and kind. So variables are only scoped to the resources you want.

App-Level Overrides

If KUBES_APP is set, then app level layer overrides will also be processed. Example:

KUBES_APP=app1 kubes deploy

Here’s an example with some of the additional files that get layered:

.kubes/variables/app1.rb
.kubes/variables/app1/base.rb
.kubes/variables/app1/dev.rb

This is useful if you’re using kubes as part of a central deployer pattern. For the full list of layers refer to the table below:

Full Layering Table

Here’s a table showing the the full layering.

Folder/Pattern Example
base.rb base.rb
ENV.rb dev.rb
base/all.rb base/all.rb
base/all/ENV.rb base/all/dev.rb
base/KIND.rb base/deployment.rb
base/KIND/base.rb base/deployment/base.rb
base/KIND/ENV.rb base/deployment/dev.rb
ROLE/KIND.rb web/deployment.rb
ROLE/KIND/base.rb web/deployment/base.rb
ROLE/KIND/ENV.rb web/deployment/dev.rb

If KUBES_APP is set then these additional layers are also processed:

Folder/Pattern Example
APP.rb app1.rb
APP/base.rb app1/base.rb
APP/ENV.rb app1/dev.rb
APP/base/all.rb app1/base/all.rb
APP/base/all/ENV.rb app1/base/all/dev.rb
APP/base/KIND.rb app1/base/deployment.rb
APP/base/KIND/base.rb app1/base/deployment/base.rb
APP/base/KIND/ENV.rb app1/base/deployment/dev.rb
APP/ROLE/KIND.rb app1/web/deployment.rb
APP/ROLE/KIND/base.rb app1/web/deployment/base.rb
APP/ROLE/KIND/ENV.rb app1/web/deployment/dev.rb

Generator

To help you get started quickly, you can generate starter variable code.

$ kubes new variable
      create  .kubes/variables/dev.rb

.kubes/variables/dev.rb

@example = "dev-value"

To create the prod variables, set KUBES_ENV=prod.

$ KUBES_ENV=prod kubes new variable
      create  .kubes/variables/prod.rb

.kubes/variables/prod.rb

@example = "prod-value"