render

command module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 15, 2018 License: Apache-2.0 Imports: 9 Imported by: 0

README

render

Version Travis CI Github All Releases Go Report Card GoDoc

Universal data-driven templates for generating textual output. Can be used as a single static binary (no dependencies) or as a golang library.

The renderer extends go-template and Sprig functions.

If you are interested in one of the use cases, take a look at this blog post about Kubernetes resources rendering. Also see Helm compatibility.

Installation

Binaries

For binaries please visit the Releases Page.

The binaries are statically compiled and does not require any dependencies.

Via Go
$ go get github.com/reefbarman/render

Usage

$ render --help
NAME:
   render - Universal file renderer

USAGE:
   render [global options] command [command options] [arguments...]

VERSION:
   v0.0.4-cf8e3d3

AUTHOR:
   reefbarman

COMMANDS:
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d               run in debug mode
   --in value                the input template file, stdin if empty
   --out value               the output file, stdout if empty
   --config value            optional configuration YAML file, can be used multiple times
   --set value, --var value  additional parameters in key=value format, can be used multiple times
   --help, -h                show help
   --version, -v             print the version

Notes:

  • --in, --out take only files (not directories) at the moment, --in will consume any file as long as it can be parsed
  • stdin and stdout can be used instead of --in and --out
  • --config accepts any YAML file, can be used multiple times, the values of the configs will be merged
  • --set, --var are the same (one is used in Helm, the other in Terraform), we provide both for convenience, any values set here will override values form configuration files
Command line

Example usage of render with stdin, stdout and --var:

$ echo "something {{ .value }}" | render --var "value=new"
something new

Example usage of render with --in, --out and --config:

$ echo "something {{ .value }}" > test.txt.tmpl
$ echo "value: new" > test.config.yaml
$ ./render --in test.txt.tmpl --out test.txt --config test.config.yaml
$ cat test.txt
something new

Also see a more advanced template example.

As a library
package example

import (
    "github.com/reefbarman/render/renderer"
    "github.com/reefbarman/render/renderer/configuration"
)

func CustomRender(template string) (string, error) {
    config := configuration.Configuration{}
    r := renderer.New(config, renderer.MissingKeyErrorOption)
    return r.Render("nameless", template)
}

See also RenderWith function that takes a custom functions map.

Also see tests for more usage examples.

Notable standard and sprig functions

All syntax and functions:

Custom functions
  • render - calls the render from inside of the template, making the renderer recursive
  • readFile - reads a file from a path, relative paths are translated to absolute paths, based on root function
  • root - the root path, used for relative to absolute path translation in any file based operations; by default PWD is used
  • toYaml - provides a configuration data structure fragment as a YAML format
  • gzip, ungzip - use gzip compression and extraction inside the templates, for best results use with b64enc and b64dec

See also example template and a more detailed documentation.

Helm compatibility

As of now, there is a limited Helm 2 Chart compatibility, simple Charts will render just fine.

There is no plan to implement full compatibility with Helm, because of unnecessary complexity that would bring.

Limitations and future work

Planned new functions
  • encrypt, decrypt - cloud KMS (AWS, Amazon, Google) based encryption for any data
Planned new features
  • directories as --in and --out arguments, currently only files are supported
Operating system support

We provide cross-compiled binaries for most platforms, but is currently used mainly with linux/amd64.

Contribution

Feel free to file issues or pull requests.

Development

mkdir $GOPATH/src/github.com/reefbarman/
git clone 

go get -u github.com/golang/dep/cmd/dep

export PATH=$PATH:$GOPATH/bin
cd $GOPATH/src/github.com/reefbarman/render
make all

The name

We believe in obvious names. It renders. It's a verb. It's render.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package renderer implements data-driven templates for generating textual output The renderer extends the standard golang text/template and sprig functions.
Package renderer implements data-driven templates for generating textual output The renderer extends the standard golang text/template and sprig functions.
configuration
Package configuration defines data structure (configuration) for the data-driven renderer Configuration is a tree structure and can be created from a YAML files or 'key=value' pairs.
Package configuration defines data structure (configuration) for the data-driven renderer Configuration is a tree structure and can be created from a YAML files or 'key=value' pairs.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL