Use ghodss/yaml for yaml marshaling & unmarshaling in template (#1556)
Fixes #1555 Co-authored-by: Yoann Ciabaud <yoann@linxo.com> Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com>
This commit is contained in:
parent
4c0987a618
commit
54eb73b423
1
go.mod
1
go.mod
|
|
@ -8,6 +8,7 @@ require (
|
||||||
github.com/Masterminds/sprig/v3 v3.1.0
|
github.com/Masterminds/sprig/v3 v3.1.0
|
||||||
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a
|
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a
|
||||||
github.com/frankban/quicktest v1.11.2 // indirect
|
github.com/frankban/quicktest v1.11.2 // indirect
|
||||||
|
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
|
||||||
github.com/go-test/deep v1.0.7
|
github.com/go-test/deep v1.0.7
|
||||||
github.com/golang/mock v1.4.4
|
github.com/golang/mock v1.4.4
|
||||||
github.com/google/go-cmp v0.5.2
|
github.com/google/go-cmp v0.5.2
|
||||||
|
|
|
||||||
2
go.sum
2
go.sum
|
|
@ -205,6 +205,8 @@ github.com/fujiwara/tfstate-lookup v0.0.14 h1:cjSRXGRWRq57WCDt5VESFpFBNTQF18eCAv
|
||||||
github.com/fujiwara/tfstate-lookup v0.0.14/go.mod h1:08o5Rm5pKzvIxoZe3D0NIT8AHYBqTzyUU03BZ/c0IKA=
|
github.com/fujiwara/tfstate-lookup v0.0.14/go.mod h1:08o5Rm5pKzvIxoZe3D0NIT8AHYBqTzyUU03BZ/c0IKA=
|
||||||
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew=
|
||||||
|
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I=
|
||||||
github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ package tmpl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/ghodss/yaml"
|
||||||
"github.com/roboll/helmfile/pkg/helmexec"
|
"github.com/roboll/helmfile/pkg/helmexec"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
"gopkg.in/yaml.v2"
|
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package tmpl
|
package tmpl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
@ -47,12 +49,31 @@ func TestReadFile_PassAbsPath(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestToYaml_UnsupportedNestedMapKey(t *testing.T) {
|
||||||
|
expected := ``
|
||||||
|
vals := Values(map[string]interface{}{
|
||||||
|
"foo": map[interface{}]interface{}{
|
||||||
|
"bar": "BAR",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
actual, err := ToYaml(vals)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("expected error but got none")
|
||||||
|
} else if err.Error() != "error marshaling into JSON: json: unsupported type: map[interface {}]interface {}" {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(actual, expected) {
|
||||||
|
t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestToYaml(t *testing.T) {
|
func TestToYaml(t *testing.T) {
|
||||||
expected := `foo:
|
expected := `foo:
|
||||||
bar: BAR
|
bar: BAR
|
||||||
`
|
`
|
||||||
vals := Values(map[string]interface{}{
|
vals := Values(map[string]interface{}{
|
||||||
"foo": map[interface{}]interface{}{
|
"foo": map[string]interface{}{
|
||||||
"bar": "BAR",
|
"bar": "BAR",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
@ -70,7 +91,7 @@ func TestFromYaml(t *testing.T) {
|
||||||
bar: BAR
|
bar: BAR
|
||||||
`
|
`
|
||||||
expected := Values(map[string]interface{}{
|
expected := Values(map[string]interface{}{
|
||||||
"foo": map[interface{}]interface{}{
|
"foo": map[string]interface{}{
|
||||||
"bar": "BAR",
|
"bar": "BAR",
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
@ -83,6 +104,27 @@ func TestFromYaml(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFromYamlToJson(t *testing.T) {
|
||||||
|
input := `foo:
|
||||||
|
bar: BAR
|
||||||
|
`
|
||||||
|
want := `{"foo":{"bar":"BAR"}}`
|
||||||
|
|
||||||
|
m, err := FromYaml(input)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
got, err := json.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if d := cmp.Diff(want, string(got)); d != "" {
|
||||||
|
t.Errorf("unexpected result: want (-), got (+):\n%s", d)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSetValueAtPath_OneComponent(t *testing.T) {
|
func TestSetValueAtPath_OneComponent(t *testing.T) {
|
||||||
input := map[string]interface{}{
|
input := map[string]interface{}{
|
||||||
"foo": "",
|
"foo": "",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue