spruce

A BOSH template merge tool

Stars
393
Forks
77
Open issues
15
Closed issues
182
Last release
8 months ago
Last commit
8 months ago
Watchers
393
Total releases
84
Total commits
774
Open PRs
1
Closed PRs
166
Repo URL
Platform
License
mit
Category
Usecase
Offers premium version?
NO
Proprietary?
NO
About

          *          .---. ,---.  ,---.  .-. .-.  ,--,  ,---.         *
         /.\        ( .-.)| .-.\ | .-.\ | | | |.' .')  | .-'        /.\
        /..'\      () \   | |-' )| -'/ | | | ||  |(_) |-.       /..'\
        /'.'\      _  \ \  | |--' |   (  | | | |\  \    | .-'       /'.'\
       /.''.'\    ( -'  ) | |    | |\ \ |-')| \  -. |--.    /.''.'\
       /.'.'.\     ----'  /(     |_| \)\---()  _\/( __.'    /.'.'.\
"'""""/'.''.'.\""'"'""""""()""""""""()"""""""""""""()""'""""/'.''.'.\""'"'"
      ^^^[]^^^                                                   ^^^[]^^^

( We'll be in #spruce)

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?

  1. Install Go, e.g. on Ubuntu sudo snap install --classic go
  2. Fetch sources via go get github.com/geofffranks/spruce
  3. Change current directory to the source root cd ~/go/src/github.com/geofffranks/spruce/
  4. Compile and execute tests 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:

  • first element EOF

and now build the second yaml file to merge on top of it

$ cat <<EOF second.yml some_data: 42 a_random_map: key2: adding more data heres_an_array:

  • (( prepend ))
  • zeroth element more_data: 84

what happens when we spruce merge?

$ spruce merge first.yml second.yml a_random_map: key1: some data key2: adding more data heres_an_array:

  • zeroth element
  • first element more_data: 84 some_data: 42

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]

Documentation What else can Spruce do for you?

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..

License

Licensed under the MIT License

Alternative Projects
No projects found

Subscribe to Open Source Businees Newsletter

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.