airshipctl/krm-functions/templater
Sean Eagan 299b2833b2 Pin krm function calls
This pins krm function calls to version `v2` which represents [0] [1] the latest
2.x.x semantic version. If we need to make breaking changes to any krm functions,
that can now be done by incrementing their major version and thus not
breaking these references.

[0]: https://review.opendev.org/c/airship/airshipctl/+/762924
[1]: https://review.opendev.org/c/airship/airshipctl/+/780875

Closes: #419
Change-Id: I6cf6519511c77da6cac7e46a6b56ea338bcf150c
2021-03-24 09:28:54 -05:00
..
image Container build for Templater plugin 2020-10-22 00:07:24 +00:00
local-resource Pin krm function calls 2021-03-24 09:28:54 -05:00
Dockerfile.sample Update Go base images 2020-11-11 16:49:51 +00:00
main.go Container build for Templater plugin 2020-10-22 00:07:24 +00:00
Makefile Change image tags 2020-11-10 12:23:25 -06:00
README.md Container build for Templater plugin 2020-10-22 00:07:24 +00:00

Templater function

This plugin is an implementation of a templater function written using go and uses the kyaml and airshipctl libraries for parsing the input and writing the output.

Function implementation

The function is implemented as an image, and built using make image.

Function invocation

The function is invoked by authoring a Local Resource with metadata.annotations.[config.kubernetes.io/function] and running:

kustomize fn run local-resource/

This exits non-zero if there is an error.

Running the Example

Run the function with:

kustomize fn run local-resource/

The generated resources will appear in local-resource/

$ cat local-resource/*

apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: node-1
spec:
  bootMACAddress: 00:aa:bb:cc:dd

apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: node-2
spec:
  bootMACAddress: 00:aa:bb:cc:ee
...

Configuration file format

Templater configuration resource is represented as a standard k8s resource with Group, Version, Kind and Metadata header. Templater configuration is defined using template and values fields with following structure.

values:
  hosts:
  - macAddress: 00:aa:bb:cc:dd
    name: node-1
  - macAddress: 00:aa:bb:cc:ee
    name: node-2
template: |
  {{ range .hosts -}}
  ---
  apiVersion: metal3.io/v1alpha1
  kind: BareMetalHost
  metadata:
    name: {{ .name }}
  spec:
    bootMACAddress: {{ .macAddress }}
  {{ end -}}

values defines the substituion value as Map. template defines the template with placeholders to substitue the value from the values Map