diff --git a/pkg/engine/engine.go b/pkg/engine/engine.go
index e415913a3783aa3185c5f628e9c853d75aa3a91b..93927bcb55f12568f655de51faf6fd9039da5f1d 100644
--- a/pkg/engine/engine.go
+++ b/pkg/engine/engine.go
@@ -24,6 +24,8 @@ import (
 	"text/template"
 
 	"github.com/Masterminds/sprig"
+	"github.com/ghodss/yaml"
+
 	"k8s.io/helm/pkg/chartutil"
 	"k8s.io/helm/pkg/proto/hapi/chart"
 )
@@ -49,11 +51,23 @@ func New() *Engine {
 	f := sprig.TxtFuncMap()
 	delete(f, "env")
 	delete(f, "expandenv")
+
+	// Add a function to convert to YAML:
+	f["toYaml"] = toYaml
 	return &Engine{
 		FuncMap: f,
 	}
 }
 
+func toYaml(v interface{}) string {
+	data, err := yaml.Marshal(v)
+	if err != nil {
+		// Swallow errors inside of a template.
+		return ""
+	}
+	return string(data)
+}
+
 // Render takes a chart, optional values, and value overrides, and attempts to render the Go templates.
 //
 // Render can be called repeatedly on the same engine.
diff --git a/pkg/engine/engine_test.go b/pkg/engine/engine_test.go
index ef71bbd0c087fe9fc2893cd03d314d67ec79d91e..d9e5954128300a1f81668c95f82c1957f3be3fcf 100644
--- a/pkg/engine/engine_test.go
+++ b/pkg/engine/engine_test.go
@@ -27,6 +27,19 @@ import (
 	"github.com/golang/protobuf/ptypes/any"
 )
 
+func TestToYaml(t *testing.T) {
+	expect := "foo: bar\n"
+	v := struct {
+		Foo string `json:"foo"`
+	}{
+		Foo: "bar",
+	}
+
+	if got := toYaml(v); got != expect {
+		t.Errorf("Expected %q, got %q", expect, got)
+	}
+}
+
 func TestEngine(t *testing.T) {
 	e := New()