handle pipes and calling without args better
This commit is contained in:
parent
e16cb89d9f
commit
b474823853
5
go.mod
5
go.mod
@ -2,7 +2,10 @@ module gitlab.com/CRThaze/spry
|
||||
|
||||
go 1.18
|
||||
|
||||
require github.com/Masterminds/sprig/v3 v3.2.3
|
||||
require (
|
||||
github.com/Masterminds/sprig/v3 v3.2.3
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/Masterminds/goutils v1.1.1 // indirect
|
||||
|
3
go.sum
3
go.sum
@ -56,7 +56,10 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
31
main.go
31
main.go
@ -11,8 +11,10 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
sprig "github.com/Masterminds/sprig/v3"
|
||||
yaml "gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type valFileSlice []string
|
||||
@ -97,8 +99,13 @@ func mergeValues() (result map[string]interface{}) {
|
||||
for _, vf := range flags.valuesFiles {
|
||||
vfContent, err := ioutil.ReadFile(vf)
|
||||
checkErr(err)
|
||||
err = json.Unmarshal(vfContent, result)
|
||||
checkErr(err)
|
||||
if strings.HasSuffix(vf, ".json") {
|
||||
err = json.Unmarshal(vfContent, result)
|
||||
checkErr(err)
|
||||
} else {
|
||||
err = yaml.Unmarshal(vfContent, result)
|
||||
checkErr(err)
|
||||
}
|
||||
}
|
||||
for i, v := range flags.values {
|
||||
subMap := result
|
||||
@ -119,7 +126,24 @@ func mergeValues() (result map[string]interface{}) {
|
||||
func main() {
|
||||
var err error
|
||||
tpl := template.New("base").Funcs(sprig.FuncMap())
|
||||
if len(flag.Args()) == 0 || (len(flag.Args()) == 1 && flag.Args()[0] == "-") {
|
||||
if len(flag.Args()) == 0 {
|
||||
ch := make(chan struct{})
|
||||
go func() {
|
||||
select {
|
||||
case <-ch:
|
||||
return
|
||||
case <-time.After(100 * time.Millisecond):
|
||||
flag.Usage()
|
||||
os.Exit(2)
|
||||
}
|
||||
}()
|
||||
var data []byte
|
||||
data, err = io.ReadAll(os.Stdin)
|
||||
ch <- struct{}{}
|
||||
checkErr(err)
|
||||
tpl, err = tpl.Parse(string(data))
|
||||
checkErr(err)
|
||||
} else if len(flag.Args()) == 1 && flag.Args()[0] == "-" {
|
||||
var data []byte
|
||||
data, err = io.ReadAll(os.Stdin)
|
||||
checkErr(err)
|
||||
@ -129,5 +153,6 @@ func main() {
|
||||
tpl, err = tpl.ParseFiles(expandFiles(flag.Args())...)
|
||||
checkErr(err)
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "%+v\n", mergeValues())
|
||||
tpl.Execute(os.Stdout, mergeValues())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user