ktempl renders template files formatted using Go template with data returned from a Kubernetes cluster.
Primary data for ktempl is a list of nodes returned by a query to a Kubernetes.
By default, ktempl fetches all nodes from the Kubernetes cluster.
You can limit/filter nodes list using -l
and available kubernetes key=value labels.
Also you get list of nodes that host specific pods only by providing -p
and -l
to select specific pods.
Secondary data is a key=value
data provided by user using --set
arguments.
Optionally, after successful render, ktemp might execute command provided by user.
Initial motivation was to write piece of software which can be used as a glue between not flexible services, without built-in service discovery capabilities, and Kubernetes. One such example is the Varnish HTTP accelerator, where you need to pass backend servers configuration, and reload Varnish daemon if configuration changes.
Inspired by many configuration management frameworks which operate templates to generate configs, e.g., Helm, consul-template, Ansible, Puppet, etc.
You should have a kubeconfig
file with proper authentication and context details supplied.
User listed in the kubeconfig
should be allowed to list nodes and pods.
As a minimum user should be allowed to list either nodes or pods.
Default kubeconfig location ~/.kube/config
More details on how to obtain that file can be found here.
Download from the releases page. Example setup on linux machine:
curl -OL https://github.com/den-is/ktempl/releases/download/0.0.1/ktempl_0.0.1_`uname -s`_x86_64.tar.gz &&\
tar xzvf ktempl_0.0.1_`uname -s`_x86_64.tar.gz &&\
cp ktempl_0.0.1_`uname -s`_x86_64/ktempl /usr/local/bin
Compile it yourself. Minimum recommended Go version is 1.17+.
go get -u github.com/den-is/ktempl
Templates are formated using Go template language and support Sprig template library.
Two main variables are passed to template for rendering:
.Nodes
- list of nodes returned by Kubernetes.Values
- dictionary of key=values passed to ktempl using--set
in the terminal orvalues:
in the config file.
Each node in .Nodes
has next fields
.mynode.Name
.mynode.InternalIP
.mynode.Annotations
.mynode.Labels
Example template file
# Welcome to {{ .Values.title | lower | repeat 5 }} <<<<
{{- range $i, $n := .Nodes }}
Node {{$n.Name }} has {{ $n.InternalIP }} IP and port {{ $.Values.port }}
{{- end }}
More examples here
# query nodes with a specific label
ktempl -l disk=ssd -t myexamle.tpl
# query pods with a specific label
ktempl -p -l app=myapp1 -t myexamle.tpl
# extended example
ktempl -l app=stagingapps -t example.tpl -o output.conf --set port=32456 --exec="touch success_exec.txt"
Optionally you can supply ktempl with a config file.
The default is config.yaml
in the same directory as binary.
Or /etc/ktempl/config.yaml
.
Or whatever you supply with -c
command-line option.
Config file settings | CLI flags | Description |
---|---|---|
kubeconfig |
-k, --kubeconfig |
Path to kubeconfig |
pods |
-p, --pods |
Query pods and get nodes they are running on |
namespace |
-n, --namespace |
Kubernetes namespace where to look Pods for. Used with -p |
selector |
-l, --selector |
Kubernetes label selectors string |
template |
-t, --template |
Path to template |
output |
-o, --output |
Path where to put rendered results. default stdout |
permissions |
N/A |
Output file permissions. default 0644. should be in 4 digit format! |
set |
--set |
Additional key=values passed to template rendering engine |
exec |
-e, --exec |
Command to execute after successful template render |
log.file |
--log-file |
Path to log file. Allowed values disabled , stdout , stderr , path_to_log_file_dst . Default disabled . |
log.level |
--log-level |
Minimum log message level to log. Default info . Available levels by hierarchy: trace , debug , info , warn , error , fatal , panic |
N/A |
-c, --config |
Path to ktempl config file |
daemon |
-d, --daemon |
Run ktempl in service mode, rather than singleshot |
interval |
-i, --interval |
Interval between polls. default 15s. Valid time units are "s", "m", "h". |
retries |
N/A |
NOT YET IMPLEMENTED Number of retries to fetch data from Kubernetes |
timeout |
N/A |
NOT YET IMPLEMENTED ktempl operations timeout |
Denis Iskandarov denis@cloudboom.io