Files
kustomize/functions/examples/template-go-nginx
Sebastiaan van Stijn 2867f353c2 downgrade go-difflib and go-spew to tagged releases (#5830)
* workspace sync

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

* downgrade go-difflib and go-spew to tagged releases

commit d35edbf80d updated these dependencies
to untagged versions. The diff in both dependencies show that there's no
code changes, and it's unlikely for those modules to do new releases.

Unfortunate, because of that change all projects depending on kubernetes
or any of it's modules now had to upgrade to unreleased versions of
these.

This patch reverts those updates (but it may take some time before
all other projects can be reverted).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>

---------

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2025-01-07 03:48:28 +01:00
..

Template GoTemplate

This is an example of implementing a template function using a go template.

This example uses a more sophisticated approach for building abstractions.

Function implementation

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

The template is implemented as a go program with a go template. It parses the functionConfig into a go struct and uses the kyaml module for parsing the function input, and writing the function output.

  1. read the inputs (stdin)
  2. apply filters
  • (custom filter) generate the nginx Deployment and Service from go templates using the functionConfig as the template input.
  • merge the generated Deployment and Service with the input Deployment and Service if present
  • set filenames on the Resources (NAME.yaml)
  • format the Resources
  1. write the outputs (stdout)

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 generates the local-resource/config directory containing the template output.

  • the template output may be modified by adding fields -- such as initContainers, sidecarConatiners, cpu resource limits, etc -- and these fields will be retained when re-running run
  • the function input example-use.yaml may be changed and rerunning run will update only the parts changed in the template output.

Running the Example

Run the config with:

kustomize build --enable-alpha-plugins local-resource/

This will create the directory

local-resource/config

Add an annotation to the Deployment Resource and change the replica count of the kind: Nginx Resource in example-use.yaml. Rerun the template:

kustomize build --enable-alpha-plugins local-resource/

The replica count should be updated, but your annotation should remain.