mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 10:15:22 +00:00
95 lines
2.9 KiB
Markdown
95 lines
2.9 KiB
Markdown
# kustomize plugins
|
|
|
|
This directory holds [kustomize plugins][extending kustomize],
|
|
each in its own sub-directory.
|
|
|
|
### Directories
|
|
|
|
* `builtin`
|
|
|
|
These are plugins written as [Go plugins].
|
|
|
|
They are converted to statically linked code in the
|
|
kustomize binary by a code generator ([pluginator]) at
|
|
kustomize build time.
|
|
|
|
They are maintained as part of kustomize.
|
|
|
|
* `someteam.example.com/v1`
|
|
|
|
Example plugins, maintained
|
|
and tested by the kustomize maintainers,
|
|
but not built-in to kustomize.
|
|
|
|
Some of these might get promoted to `builtin` someday,
|
|
as happened with the [Helm Chart Inflator].
|
|
|
|
* `untested/v1`
|
|
|
|
Untested, unmaintained plugins.
|
|
|
|
These might be former examples that have been abandoned and
|
|
may soon be deleted, or they might be WIP plugins that will
|
|
someday become examples or builtins.
|
|
|
|
#### Testing
|
|
|
|
Regardless of the [style](#plugin-styles) used to write a plugin,
|
|
it should be accompanied by a Go unit test, written using the framework
|
|
maintained by the kustomize maintainers for just that purpose.
|
|
|
|
To see how this works, run any plugin test, e.g.
|
|
this plugin written in bash:
|
|
```
|
|
pushd plugin/someteam.example.com/v1/bashedconfigmap
|
|
go test -v .
|
|
popd
|
|
```
|
|
|
|
For plugins with many tests, it's possible to target just one test:
|
|
```
|
|
pushd plugin/builtin/patchstrategicmergetransformer
|
|
go test -v -run TestBadPatchStrategicMergeTransformer PatchStrategicMergeTransformer_test.go
|
|
popd
|
|
```
|
|
|
|
### Plugin styles
|
|
|
|
For more discussion, see [extending kustomize].
|
|
|
|
* a bare executable
|
|
|
|
This can be anything, e.g. a shell script, a shell
|
|
script that runs java in a JVM, or python in a python
|
|
VM, etc. They accept a YAML stream of resources on
|
|
stdin, and emit a YAML stream on stdout. They accept
|
|
configuration data in a file specified as the first
|
|
argument on their command line.
|
|
|
|
If the executable is written in Go, it can take advantage
|
|
of the same libraries as the kustomize builtin plugins.
|
|
|
|
* a [KRM function]
|
|
|
|
These are containerized executables, that are pickier
|
|
about their input. Rather than accepting a YAML stream
|
|
of k8s resources, they want one `ResourceList` object
|
|
(with the resources in that list).
|
|
|
|
* a [Go plugin]
|
|
|
|
These are built as shared object libraries. Like
|
|
a Go program, they're written in an unimportable
|
|
`main` package with its own `go.mod` file.
|
|
Go plugins cannot be reliably distributed (see docs),
|
|
and are meant only as a structured way to write a
|
|
builtin plugin intended for distribution with kustomize.
|
|
|
|
[pluginator]: ../cmd/pluginator
|
|
[Helm Chart Inflator]: ./builtin/helmchartinflationgenerator
|
|
[KRM function]: https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md
|
|
[Go plugin]: https://golang.org/pkg/plugin
|
|
[Go plugins]: https://golang.org/pkg/plugin
|
|
[extending kustomize]: https://kubectl.docs.kubernetes.io/guides/extending_kustomize/
|
|
|