Gomplate
A flexible commandline tool for template rendering. Supports lots of local and remote datasources.
_Read the docs at [docs.gomplate.ca][docs-url], chat with developers and community in the [#gomplate channel][] on [Gophers Slack][]_ The project is written primarily in Go, distributed under the MIT License license, first published in 2016. It has gained significant community traction with 3,162 stars and 216 forks on GitHub. Key topics include: boltdb, cli, cloud, config, consul.
Read the docs at docs.gomplate.ca, chat with developers and community in the #gomplate channel on Gophers Slack
gomplate is a template renderer which supports a growing list of datasources,
such as: JSON (including EJSON - encrypted JSON), YAML, AWS EC2 metadata,
Hashicorp Consul and Hashicorp Vault secrets.
Come chat with developers and community in the #gomplate channel on Gophers Slack and on GitHub Discussions!
Here are some hands-on examples of how gomplate works:
console$ # at its most basic, gomplate can be used with environment variables... $ echo 'Hello, {{ .Env.USER }}' | gomplate Hello, hairyhenderson $ # but that's kind of boring. gomplate has tons of functions to do useful stuff, too $ gomplate -i 'the answer is: {{ mul 6 7 }}' the answer is: 42 $ # and, since gomplate uses Go's templating syntax, you can do fun things like: $ gomplate -i '{{ range seq 5 1 }}{{ . }} {{ if eq . 1 }}{{ "blastoff" | toUpper }}{{ end }}{{ end }}' 5 4 3 2 1 BLASTOFF $ # the real fun comes when you use datasources! $ cat ./config.yaml foo: bar: baz: qux $ gomplate -d config=./config.yaml -i 'the value we want is: {{ (datasource "config").foo.bar.baz }}' the value we want is: qux $ # datasources are defined by URLs, and gomplate is not limited to just file-based datasources: $ gomplate -d ip=https://ipinfo.io -i 'country code: {{ (ds "ip").country }}' country code: CA $ # standard input can be used as a datasource too: $ echo '{"cities":["London", "Johannesburg", "Windhoek"]}' | gomplate -d city=stdin:///in.json -i '{{ range (ds "city").cities }}{{.}}, {{end}}' London, Johannesburg, Windhoek, $ # and here's something a little more complicated: $ export CITIES='city: [London, Johannesburg, Windhoek]' $ cat in.tmpl {{ range $i, $city := (ds "cities").city -}} {{ add 1 $i }}: {{ include "weather" (print $city "?0") }} {{ end }} $ gomplate -d 'cities=env:///CITIES?type=application/yaml' -d 'weather=https://wttr.in/?0' -H 'weather=User-Agent: curl' -f in.tmpl 1: Weather report: London \ / Partly cloudy _ /"".-. 4-7 °C \_( ). ↑ 20 km/h /(___(__) 10 km 0.0 mm 2: Weather report: Johannesburg \ / Partly cloudy _ /"".-. 15 °C \_( ). ↘ 0 km/h /(___(__) 10 km 2.2 mm 3: Weather report: Windhoek \ / Partly cloudy _ /"".-. 20 °C \_( ). ↑ 6 km/h /(___(__) 20 km 0.0 mm
Read the documentation at docs.gomplate.ca, and join the discussion
in GitHub Discussions!
Please report any bugs found in the issue tracker.
License
Copyright (c) 2016-2023 Dave Henderson
Contributors
Showing top 12 contributors by commit count.
