// recAllTpls recurses through the templates in a chart. // // As it recurses, it also sets the values to be appropriate for the template // scope. func recAllTpls(c *chart.Chart, templates map[string]renderable, parentVals chartutil.Values, top bool) { // This should never evaluate to a nil map. That will cause problems when // values are appended later. cvals := chartutil.Values{} if top { // If this is the top of the rendering tree, assume that parentVals // is already resolved to the authoritative values. cvals = parentVals } else if c.Metadata != nil && c.Metadata.Name != "" { // If there is a {{.Values.ThisChart}} in the parent metadata, // copy that into the {{.Values}} for this template. newVals := chartutil.Values{} if vs, err := parentVals.Table("Values"); err == nil { if tmp, err := vs.Table(c.Metadata.Name); err == nil { newVals = tmp } } cvals = map[string]interface{}{ "Values": newVals, "Release": parentVals["Release"], "Chart": c.Metadata, } } for _, child := range c.Dependencies { recAllTpls(child, templates, cvals, false) } for _, t := range c.Templates { templates[t.Name] = renderable{ tpl: string(t.Data), vals: cvals, } } }
// recAllTpls recurses through the templates in a chart. // // As it recurses, it also sets the values to be appropriate for the template // scope. func recAllTpls(c *chart.Chart, templates map[string]renderable, parentVals chartutil.Values, top bool, parentID string) { // This should never evaluate to a nil map. That will cause problems when // values are appended later. cvals := chartutil.Values{} if top { // If this is the top of the rendering tree, assume that parentVals // is already resolved to the authoritative values. cvals = parentVals } else if c.Metadata != nil && c.Metadata.Name != "" { // If there is a {{.Values.ThisChart}} in the parent metadata, // copy that into the {{.Values}} for this template. newVals := chartutil.Values{} if vs, err := parentVals.Table("Values"); err == nil { if tmp, err := vs.Table(c.Metadata.Name); err == nil { newVals = tmp } } cvals = map[string]interface{}{ "Values": newVals, "Release": parentVals["Release"], "Chart": c.Metadata, "Files": chartutil.NewFiles(c.Files), } } newParentID := c.Metadata.Name if parentID != "" { // We artificially reconstruct the chart path to child templates. This // creates a namespaced filename that can be used to track down the source // of a particular template declaration. newParentID = path.Join(parentID, "charts", newParentID) } for _, child := range c.Dependencies { recAllTpls(child, templates, cvals, false, newParentID) } for _, t := range c.Templates { templates[path.Join(newParentID, t.Name)] = renderable{ tpl: string(t.Data), vals: cvals, } } }