diff --git a/pkg/tmpl/get_or_nil.go b/pkg/tmpl/get_or_nil.go index 72d9b5e1..4a216e40 100644 --- a/pkg/tmpl/get_or_nil.go +++ b/pkg/tmpl/get_or_nil.go @@ -38,6 +38,10 @@ func get(path string, varArgs ...interface{}) (interface{}, error) { var v interface{} var ok bool switch typedObj := obj.(type) { + case *map[string]interface{}: + obj = *typedObj + } + switch typedObj := obj.(type) { case map[string]interface{}: v, ok = typedObj[keys[0]] if !ok { diff --git a/pkg/tmpl/get_or_nil_test.go b/pkg/tmpl/get_or_nil_test.go index e3eb100d..54f30bdf 100644 --- a/pkg/tmpl/get_or_nil_test.go +++ b/pkg/tmpl/get_or_nil_test.go @@ -53,6 +53,26 @@ func TestGetMap(t *testing.T) { } } +func TestGetMapPtr(t *testing.T) { + obj := map[string]interface{}{"Foo": map[string]interface{}{"Bar": "Bar"}} + objPrt := &obj + + v1, err := get("Foo.Bar", objPrt) + + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if v1 != "Bar" { + t.Errorf("unexpected value for path Foo.Bar in %v: expected=Bar, actual=%v", objPrt, v1) + } + + _, err = get("Foo.baz", objPrt) + + if err == nil { + t.Errorf("expected error but was not occurred") + } +} + func TestGet_Default(t *testing.T) { obj := map[string]interface{}{"Foo": map[string]interface{}{}, "foo": 1}