Configuration

Overview

Lokomotive uses a HCL2 based configuration language to allow users to configure clusters and components. This configuration is read from .lokocfg files by lokoctl.

Typically, configuration for a Lokomotive cluster consists of one or more .lokocfg files as well as a lokocfg.vars file for variables and/or secret values. The details are explained below.

A configuration directory for a Lokomotive cluster for example could look like this:

my-cluster/
├── cert-manager.lokocfg
├── cluster.lokocfg
├── dex.lokocfg
├── gangway.lokocfg
├── httpbin.lokocfg
├── ingress.lokocfg
└── lokocfg.vars

Configuration through .lokocfg files

By default, lokoctl loads and merges configuration from all .lokocfg files in the current directory. Depending on the issued command, different configuration blocks then get parsed and used.

For example, when running lokoctl cluster apply, lokoctl will look for a cluster "<provider>" { ... } block in all loaded lokocfg files, install or apply new configuration to the cluster and afterwards proceed with installing or applying new configuration to all configured components, too.

Another example, when running lokoctl component apply, lokoctl will attempt to install or apply new configuration to all configured components from all loaded lokocfg files. On the other hand, lokoctl component apply cert-manager would only evaluate the component "cert-manager" { ... } block and only install or apply new configuration to the cert-manager component.

With the --lokocfg command-line parameter, it is possible to load .lokocfg files from a different directory or to load only a single file:

lokoctl cluster apply --lokocfg path/to/my-cluster.lokocfg

Variables and the lokocfg.vars file

It is possible to define variables for values that should be configurable or secrets in a lokocfg.vars file.

The lokocfg.vars file is not meant to be stored in a source code repository.

For example, if you define a variables in a .lokocfg file as below:

variable "github_client_id" {
  type = "string"
}

component "foo" {
  github_client_id = var.github_client_id
}

The corresponding value definition in lokocfg.vars would be:

github_client_id = "aaabbbccc"

With the --lokocfg-vars command-line flag, you can specify the path to the lokocfg.vars file to load.

Interpolation functions

lokoctl supports the following interpolation functions when loading .lokocfg files and the lokocfg.vars file.

pathexpand: expands a path with ~ in it.

Example:

foo_path = pathexpand("~/foo")

file: reads the content of the passed file and returns it as string. Example:

snippet = file("my-snippets/snippet.txt")