# 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](image), and built using `make image`.

## Function invocation

The function is invoked by authoring a [Local Resource](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