Skip to content
Snippets Groups Projects
README.md 9.24 KiB

Beaver

   ____
  | __ )  ___  __ ___   _____ _ __
  |  _ \ / _ \/ _` \ \ / / _ \ '__|
  | |_) |  __/ (_| |\ V /  __/ |
  |____/ \___|\__,_| \_/ \___|_|

Description

beaver is a tool to build your k8s templates in a descriptive way.

Features

  • template engine:
  • patch engine:
  • multi-environment variables
  • sha256 sum for any compiled resource can be used as variable
  • inheritance between beaver project
  • each built resource outputs its own file

Usage

beaver build <path/to/beaver/project>

see beaver build --help for more options.

Beaver project

A beaver project consists of a folder with a beaver config file, either beaver.yaml or beaver.yml.

Beaver config file

# Default namespace used for this project
namespace: default
# the desired beaver version. If the binary you use to process this file has a
# different version number, it will refuse to process the project to avoid
# messing with your resources.
beaverversion: 3.2.3
# an inherited beaver project - which can also inherit another beaver project
# when starting your first beaver project you create a base file without inherit
# then you create some other file that inherits from your base to reflect
# some kind of environment change (production vs dev)
inherit: ../../base  # path is relative to this beaver config file
# you can also inherit from multiple bases at the same time
inherits:
- ../../base1
- ../../base2
# a beaver project is essentially a collection of charts (either helm or ytt)
# your project charts
charts:
  postgres:                           # your chart local name
    type: helm                        # can be either helm or ytt
    path: ../.vendor/helm/postgresql  # path to your chart - relative to this file
    name: pgsql                       # overwrite **helm** application name, cannot be used for ytt charts
    # Keyword `namespace` only available for Helm charts
    namespace: my-namespace           # Set namespace only for the current chart(Optional)


# You can define beaver variables
# they can be used inside your charts value files
# There are two methods
# First method :
# this method was the original one and is here for historical reasons
# but we highly recommend you use the second method which is nicer and
# will lead to better templates
variables:
- name: tag      # give your variable a name
  value: v1.2.3  # and a value


# Second method :
# which is the recommended way to go (implemented later)
variables:
  tag: v1.2.3
  my_dict1:
    my_key1: value1
    my_dict2:
      my_key2: value2
    my_list:
      - elem1
      - elem2


# You can also use inherit to overlay variables
# in project/base1/beaver.yaml :
variables:
  my_dict:
    key1: value1
    key2: value2


# If you want to redefine all the dict
# in project/base2/beaver.yaml :
inherit: ../base1
variables:
  my_dict:
    newKey1: value3

# Or if you want to redefine only part of the dict
inherit: ../base1
variables:
  my_dict.key1: value3

# resulting dict :
variables:
  my_dict:
    key1:value3
    key2: value1

# generate beaver variables from compiled resource file sha256
sha:
- key: configmap_demo               # use to generate beaver variable name
  resource: ConfigMap.v1.demo.yaml  # compiled resource filename

# create some resources using `kubectl create`
create:
- type: configmap       # resource kind as passed to kubectl create
  name: xbus-pipelines  # resource name
  args:                 # kubectl create arguments
  - flag: --from-file
    value: pipelines

Value files

Value files filename uses the following format:

<chart_local_name>.[yaml,yml]

you can provide a value file for your chart using its local name, and beaver will pass this file to your template engine.

If you have a value file with the same name inside an inherited project then beaver will also pass this one, but prior to your project file. This ensures that your current values overwrite inherited values.

example:

# folder structure
.
├── base
│   ├── beaver.yml
│   └── postgres.yml
└── environments
    └── demo
        ├── beaver.yml
        └── postgres.yaml