A flexible commandline tool for template rendering. Supports lots of local and remote datasources.
This is a pre-release for v4.0.0 intended for testing. More changes will come before release!
(preliminary release notes follow - these will be updated for v4.0.0)
🥳 It's finally (almost) here! Welcome to gomplate v4.0.0-pre-2! This release is a (pre-release of a) major release, with breaking changes. Read on for more details...
Probably the most important feature that's evolved in gomplate over the years is its support for reading and parsing data from a variety of sources. Using URLs to specify where to find data has proven to be quite flexible, and has allowed for a lot of different data sources to be supported.
In early 2021, I took what I had learned from supporting all of these different
data sources, and I created a new module called
go-fsimpl
, which provides a
number of Go filesystem implementations that can be used with Go's filesystem
interfaces.
My goal with go-fsimpl
was always to use it in gomplate, and now that it
supports most of the data sources that gomplate supports, it's time to make the
switch! As a result, and because go-fsimpl
presents a much more consistent
and unified approach to data sources, I've had to drop support for one data
source, and in fixing some inconsistencies in how URLs have been handled by some
of the data sources, I've had to make some breaking changes there as well.
Please, if you're using gomplate in production, please read these release notes carefully and in full, and review your usage of gomplate to make sure you can adapt to these changes.
Support for the boltdb
URL scheme has been removed. The implementation was
never very robust, and I'm not aware of anyone using it. It had some unique
quirks that would have made it quite difficult to support in go-fsiml
as-is,
so I've decided to drop it.
slim
binariesThe slim
binaries were deprecated in v3.11, and will no longer be produced.
When using the datasource
function with a subpath (second argument), the
subpath has previously been intepreted by some data sources as a simple addition
to the URL, and by others as a relative URL to be interpreted relative to the
data source's base URL (as specified by the --datasource
flag).
Now, all data sources will interpret the subpath as a relative URL, and will
resolve it relative to the data source's base URL. This means that, given a base
URL of git+https://github.com/hairyhenderson/gomplate//random
and a subpath of
random.go
, the resulting URL will be
git+https://github.com/hairyhenderson/gomplate//random.go
. To correct this,
make sure that base URLs end with a trailing slash when the last component is a
directory.
Also, if the subpath begins with a slash, it will be interpreted as an absolute
path, and will replace the base URL's path. For example, given a base URL of
git+file:///tmp/repos//myrepo/
and a subpath of /myfile.txt
, the resulting
URL will be git+file:///myfile.txt
. To correct this, make sure that subpaths
don't begin with a slash. Note that for the special //
separator indicating
the separation between a Git repository and the path within, a subpath should
now begin with .//
rather than //
.
This affects at least the git
and file
data sources.
Previously, some data sources would assume URLs that end without a trailing slash are directories, and relative lookups would be performed within that directory. This was inconsistent with how URLs are normally interpreted, and could lead to unexpected results.
Now, all data sources will always interpret URLs without a trailing slash as files, and relative lookups will be performed within the parent directory of the URL.
For example, given a base URL of vault:///secret
and a subpath of foo
, the
resulting URL will be vault:///foo
. To correct this, make sure that base URLs
end with a trailing slash when the last component is a directory.
The aws+smp
data source previously returned the AWS output object, with
both metadata and data. Users needed to reference the Value
field to get the
actual data. Now, the aws+smp
data source will return the data directly.
The consul
data source supports directory semantics, but previously returned
all the data as a JSON array of key/value pair objects. Now, the consul
data
source will return directory listings like all other data sources, as a JSON
array of strings (the names of the keys).
Support for the Vault app-id auth method has been removed. This method was deprecated in Vault 0.6.1, and removed in Vault 1.13. If you're still using this method, you must switch to a different auth method.
The following functions have been removed:
See the deprecation policy).
slice
alias for coll.Slice
(use coll.Slice
instead)net.Parse*
functions which produced values from the inet.af/netaddr
module have been deprecated and replaced with functions using the Go standard
library's net/netip
package:
net.ParseIP
(use net.ParseAddr
instead)])net.ParseIPPrefix
(use net.ParsePrefix
insteadnet.ParseIPRange
(use net.ParseRange
instead)AWS_META_ENDPOINT
environment variable for overriding the
IMDS endpoint in aws
functions has been deprecated in favor of the
AWS-native AWS_EC2_METADATA_SERVICE_ENDPOINT
. This will be removed in a
later v4 minor release (i.e. not in v4.0.0, but before v5).Plenty of people have contributed to gomplate by filing issues, suggesting new features, or submitting pull requests. I'd like to especially thank the following people for submitting pull requests in this release:
Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
Full Changelog (since v3.11) Changes since v4.0.0-pre-1
strings.SkipLines
functioncoll.GoSlice
and deprecate slice
aliasstrings.Title
not lowercase acronyms - thanks to @zregvart!index
supports nested keys - thanks to @isavcic!index
and .
coll.GoSlice
example (fixes #1517)t.Setenv
to set env vars in tests - thanks to @Juneezee!github.com/Masterminds/semver
to github.com/Masterminds/semver/v3
- thanks to @wuhuizuo!Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.6...v3.11.7
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.5...v3.11.6
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.4...v3.11.5
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.3...v3.11.4
This is a very minor patch release to update a dependency that's causing gomplate to trigger vulnerability scanners for CVE-2022-27664.
To the best of my understanding gomplate is not vulnerable, as it doesn't expose any HTTP servers - this patch release is purely to help vulnerability scans pass!
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.2...v3.11.3
Another patch release to allow gomplate to be compiled with Go 1.19.
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.1...v3.11.2
Just a simple patch release to fix a bug that prevented the go install
installation method.
Full Changelog: https://github.com/hairyhenderson/gomplate/compare/v3.11.0...v3.11.1
👋 Welcome to another gomplate release! Once more, a number of bug fixes and new features. Thanks to the community, gomplate is now available via MacPorts as well!
Plenty of people have contributed to gomplate by filing issues, suggesting new features, or submitting pull requests. I'd like to especially thank the following people for submitting pull requests in this release:
I'm starting to work on gomplate v4, the next major release (with breaking changes). In preparation for this, I'm listing some features as deprecated (see the deprecation policy). Note that some of these may have been deprecated for a while, but I'd like to call them out explicitly here.
slim
binaries are deprecated, and will no longer be produced starting
with v4.0.0.strings.Sort
(use coll.Sort
instead)conv.Dict
(use coll.Dict
instead)conv.Slice
(use coll.Slice
instead)conv.Has
(use coll.Has
instead)conv.Bool
(use conv.ToBool
instead)Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
gomplate.Renderer
API is available for rendering templates programmatically. This should be of interest for developers wishing to use gomplate as a library. See the Go docs for examples.file:
URL scheme is supported. The full set of datasource URL schemes will be supported in a future release.templates
config option, and deprecates the previous format. See the docs for templates
for more information.break
, and continue
.crypto.ECDSAGenerateKey
crypto.ECDSADerivePublicKey
net
namespace for working with networks in CIDR notation - thanks to @bartoszj for the contribution!
crypto.SHA*
, but returns raw bytes instead of strings)
crypto.EncryptAES
crypto.DecryptAES
listDatasources
function - thanks to @jeevansai502 for the contribution!JSON
and YAML
functions where escaped forward slashes (\/
) were not being correctly interpretedstrings.Title
to handle unicode punctuation (moves to alternate implementation after Go 1.18 deprecated the standard library function)strings.Indent
would not work correctly when a new-line character is used (now disallowed)aws+sm
datasource will now correctly read a secret written as binary (SecretBinary
) rather than a string (SecretString
)inputDir
is read recursivelyslim
binary, and update the Go install instructions for recent Go versionsconv.URL
: Add example of how to redact the passwordtime.Now
: Add example of how to use Time.IsDST
strings.Split
: More examples to clarify how to use strings.Split
- thanks to @karlschriek for the contribution!🥳 It's high time for another gomplate release! This release contains quite a few bug fixes and improvements.
Some packaging updates:
darwin-arm64
) platform!Be sure to also check out the multi-platform Docker images available at hairyhenderson/gomplate
.
If you've gained value out of gomplate and want to find a way to encourage development, please consider sponsoring gomplate!
conv.ToInt
now returns -1
instead of overflowing on 32-bit systems to protect against CWE-190 and CWE-681
crypto.RSAGenerateKey
function now enforces a minimum key size of 2048 bits to protect against CWE-326.darwin-arm64
binarymaster
(fixes #1049)CONSUL_HTTP_ADDR
parsing (fixes #1209)random
functions--input-dir=.
(found in #1081)k8s.io/client-go
to valid semver (fixes #1061)