-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3298 from monopole/makeUntestedPluginDir
Start directory for 'untested' plugins.
- Loading branch information
Showing
6 changed files
with
88 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,27 +1,87 @@ | ||
This directory and the directories below it | ||
are not _importable_ Go packages. | ||
|
||
Each directory contains a kustomize plugin, | ||
which is either | ||
|
||
* some random non-Go based executable, | ||
e.g. a bash script that runs java | ||
in a JVM, or python in a python VM, etc. | ||
|
||
* the source code for a Go executable, | ||
i.e. a `main.go` in the unimportable | ||
`main` package, | ||
ideally declaring its dependencies | ||
with it's own `go.mod` file. | ||
|
||
* the source code for a Go | ||
plugin, which is also an unimportable | ||
`main` package ideally with its | ||
own `go.mod` file, formulated to be | ||
a Go plugin. If in the `builtin` | ||
sub-directory, these plugins are converted | ||
to statically linkable code. | ||
|
||
To read more about plugins, see | ||
[doc.go](/api/internal/plugins/doc.go) | ||
# 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: | ||
``` | ||
cd plugin/someteam.example.com/v1/bashedconfigmap | ||
go test -v . | ||
``` | ||
and examine the associated Go test code. | ||
|
||
### 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/ | ||
|
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.