kexpand is a tool for expanding Kubernetes placeholder variables into their actual values. It implements the upcoming kubernetes templating specification client-side (with some extensions based on real-world requirements).
You can use templates today, and when k8s implements it on the server, you should hopefully not have to rewrite your manifests.
quoted form: $(key) => "value"
unquoted form: $((key)) => value
kexpand turns this:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: $((name))
spec:
replicas: $((replicas))
template:
metadata:
labels:
app: $((name))
spec:
containers:
- name: $((name))
image: tutum/hello-world
ports:
- containerPort: 80
Into this:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 3
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: tutum/hello-world
ports:
- containerPort: 80
Build the code (make sure you have set GOPATH):
go get -d github.com/kopeio/kexpand
cd ${GOPATH}/src/github.com/kopeio/kexpand
make
The expand
command will output the result of replacing all variables in the template file with the values from the
provided values file:
kexpand expand deployment.yaml -f values.yaml
deployment.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: $((name))
spec:
replicas: $((replicas))
template:
metadata:
labels:
app: $((name))
spec:
containers:
- name: $((name))
image: tutum/hello-world
ports:
- containerPort: 80
values.yaml:
name: hello-world
replicas: 3
The result of expanding the template will be output to stdout, where it can be redirected to a file or piped to kubectl
:
kexpand expand deployment.yaml -f values.yaml | kubectl create -f -
kexpand supports two different forms of variables: $((key))
will output a non-quoted value ($((replicas))
=> 3
),
while $(key)
will output a quoted value ($(replicas)
=> "3"
). A legacy format, {{key}}
, is also supported, but
not recommended for use.
Variables names can include any alphanumeric character along with hypens(-), period(.), and underscores(_).
kexpand supprts passing multiple files and wildcards for templates to specify multiple files at once. kexpand will add ---
between each filename as required by kubectl.
kexpand *.tmpl.yaml -f values.yaml
Base64 encoding of values is supported by adding |base64
to the key as in $(key|base64)
, $((key|base64))
, and {{keyi|base64}}
. This
is useful for secret definitions.