Skip to content

Instantly share code, notes, and snippets.

@mischief
Created February 29, 2016 03:48
Show Gist options
  • Select an option

  • Save mischief/d0c6fd6765dbe03518aa to your computer and use it in GitHub Desktop.

Select an option

Save mischief/d0c6fd6765dbe03518aa to your computer and use it in GitHub Desktop.
go templater
package main
import (
"bytes"
"flag"
"io"
"io/ioutil"
"log"
"os"
"strings"
"text/template"
"gopkg.in/yaml.v2"
)
var (
contextFile = flag.String("c", "", "context yaml file")
dumpCtx = flag.Bool("d", false, "dump context")
)
func main() {
flag.Parse()
log.SetFlags(log.LstdFlags | log.Lshortfile)
buf := new(bytes.Buffer)
if _, err := io.Copy(buf, os.Stdin); err != nil {
log.Fatal(err)
}
tmpl, err := template.New("stdin").Parse(buf.String())
if err != nil {
log.Fatal(err)
}
ctx := make(map[string]interface{})
if *contextFile != "" {
ctxbytes, err := slurp(*contextFile)
if err != nil {
log.Fatal(err)
}
err = yaml.Unmarshal(ctxbytes, &ctx)
if err != nil {
log.Fatalf("%s: %v", *contextFile, err)
}
}
env := e2m()
ctx["env"] = env
if *dumpCtx {
for k, v := range ctx {
log.Printf("%q = %q", k, v)
}
}
err = tmpl.Execute(os.Stdout, ctx)
if err != nil {
log.Fatal(err)
}
}
func slurp(file string) ([]byte, error) {
f, err := os.Open(file)
if err != nil {
return nil, err
}
byt, err := ioutil.ReadAll(f)
if err != nil {
return nil, err
}
return byt, nil
}
func e2m() map[string]string {
env := os.Environ()
m := make(map[string]string)
for _, e := range env {
spl := strings.SplitN(e, "=", 2)
m[spl[0]] = spl[1]
}
return m
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment