mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-23 15:27:01 +00:00
56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# 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](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
|
|
3. write the outputs (stdout)
|
|
|
|
## Function invocation
|
|
|
|
The function is invoked by authoring a [local Resource](local-resource)
|
|
with `metadata.annotations.[config.kubernetes.io/function]` and running:
|
|
|
|
kustomize config 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 config run 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 config run local-resource/
|
|
|
|
The replica count should be updated, but your annotation should remain.
|