Setters
Setters
Setters provide a solution for template-free setting or substitution of field
values through package metadata (OpenAPI). They are a safer alternative to other
substitution techniques which do not have the context of the structured data
– e.g. using sed
to replace values.
The OpenAPI definitions for setters are defined in a Kptfile and referenced by a fields through comments on the fields.
Setters may be invoked to modify the configuration using kpt cfg set
to set and/or substitute values.
Auto setters
The values of few setters are auto-filled when the package is fetched(/updated).
Package consumers need not invoke kpt cfg set
on them explicitly.
gcloud configs
This category of auto-setters derive the values from the output of gcloud config list
command. Following are the names of supported gcloud
auto-setters:
gcloud.core.project
gcloud.project.projectNumber
gcloud.compute.region
gcloud.compute.zone
Inherit Setter Values from Parent Package
Notice: This is an experimental feature and is subjected to changes soon
When a remote kpt package is fetched(/updated) into local directory, kpt searches
for its closest parent directory(if any) with a Kptfile
in the file system and
auto-fills matching setters in the fetched(/updated) package with the setter values
from the parent package. Setters are matched based on setter names.
e.g. Consider an example of wordpress
package on local
wordpress
├── Kptfile
└── deployment.yaml
$ kpt cfg list-setters wordpress/
wordpress/
NAME VALUE SET BY DESCRIPTION COUNT REQUIRED IS SET
namespace my-space 1 No Yes
If mysql
package is fetched into the local directory tree of wordpress
package, and if both packages contain setter namespace
, then the namespace
setter of mysql
is automatically set to the value from wordpress
package i.e.
mysql
inherits setter value from wordpress
package.
$ kpt pkg get git@github.com:example.git/mysql ./wordpress/
fetching package / from git@github.com:example.git/mysql to wordpress/mysql
automatically set 1 field(s) for setter "namespace" to value "my-namespace" in
package "wordpress/mysql" derived from parent "wordpress/Kptfile"
$ tree wordpress/
wordpress
├── Kptfile
├── mysql # subpackage
│ ├── Kptfile
│ └── deployment.yaml
└── deployment.yaml