airshipctl/krm-functions/templater
Siraj Yasin 8b9f1b4fd0 Fix Templater condition issue
* for some reason the one liner with multiple conditions is not
  working and due to which the generation of ethernet_mac_address
  is completely ignored

Change-Id: I642fc744c039cafbbd9cea48f861931fb67948c1
2021-09-29 21:11:36 +00:00
..
local-resource Fix Templater condition issue 2021-09-29 21:11:36 +00:00
Dockerfile Use quay.io/airshipit/golang images 2021-09-14 15:19:50 -05:00
main.go Switching airshipctl and krm-functions to kustomize 4.2.0 2021-07-22 17:06:32 +00:00
README.md Fixed some typos and error message 2021-09-22 12:54:22 +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 substitution value as Map. template defines the template with placeholders to substitute the value from the values Map