A BOSH template merge tool
* .---. ,---. ,---. .-. .-. ,--, ,---. *
/.\ ( .-.)| .-.\ | .-.\ | | | |.' .') | .-' /.\
/..'\ () \ | |-' )| -'/ | | | || |(_) |
-. /..'\
/'.'\ _ \ \ | |--' | ( | | | |\ \ | .-' /'.'\
/.''.'\ ( -' ) | | | |\ \ |
-')| \ -. |
--. /.''.'\
/.'.'.\ ----' /( |_| \)\
---() _\/( __.' /.'.'.\
"'""""/'.''.'.\""'"'""""""()""""""""()"""""""""""""()""'""""/'.''.'.\""'"'"
^^^[]^^^ ^^^[]^^^
Introducing Spruce
spruce
is a general purpose YAML & JSON merging tool.
It is designed to be an intuitive utility for merging YAML/JSON templates together to generate complicated YAML/JSON config files in a repeatable fashion. It can be used to stitch together some generic/top level definitions for the config and pull in overrides for site-specific configurations to DRY your configs up as much as possible.
How do I get started?
spruce
is available via Homebrew, just brew tap starkandwayne/cf; brew install spruce
Alternatively, you can download a prebuilt binaries for 64-bit Linux, or Mac OS X
How do I compile from source?
sudo snap install --classic go
go get github.com/geofffranks/spruce
cd ~/go/src/github.com/geofffranks/spruce/
make all
A Quick Example
# Let's build the first yaml file we will merge $ cat <<EOF first.yml some_data: this will be overwritten later a_random_map: key1: some data heres_an_array:
$ cat <<EOF second.yml some_data: 42 a_random_map: key2: adding more data heres_an_array:
$ spruce merge first.yml second.yml a_random_map: key1: some data key2: adding more data heres_an_array:
The data in second.yml
is overlayed on top of the data in first.yml
. Check out the
merge semantics and array merging for more info on how that was done. Or,
check out [this example on play.spruce.cf][play.spruce-example]
spruce
doesn't just stop at merging datastructures together. It also has the following
helpful subcommands:
spruce diff
- Allows you to get a useful diff of two YAML files, to see where they differ
semantically. This is more than a simple diff tool, as it examines the functional differences,
rather than just textual (e.g. key-ordering differences would be ignored)
spruce json
- Allows you to convert a YAML document into JSON, for consumption by something
that requires a JSON input. spruce merge
will handle both YAML + JSON documents, but produce
only YAML output.
spruce vaultinfo
- Takes a list of files that would be merged together, and analyzes what paths
in Vault would be looked up. Useful for determining explicitly what access an automated process
might need to Vault to obtain the right credentials, and nothing more. Also useful if you need
to audit what credentials your configs are retrieving for a system..
Licensed under the MIT License
Twice a month we will interview people behind open source businesses. We will talk about how they are building a business on top of open source projects.
We'll never share your email with anyone else.