82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
| package tmpl
 | |
| 
 | |
| import (
 | |
| 	"bytes"
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/helmfile/helmfile/pkg/filesystem"
 | |
| )
 | |
| 
 | |
| type FileRenderer struct {
 | |
| 	fs      *filesystem.FileSystem
 | |
| 	Context *Context
 | |
| 	Data    interface{}
 | |
| }
 | |
| 
 | |
| func NewFileRenderer(fs *filesystem.FileSystem, basePath string, data interface{}) *FileRenderer {
 | |
| 	return &FileRenderer{
 | |
| 		fs: fs,
 | |
| 		Context: &Context{
 | |
| 			basePath: basePath,
 | |
| 			fs:       fs,
 | |
| 		},
 | |
| 		Data: data,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func NewFirstPassRenderer(basePath string, data interface{}) *FileRenderer {
 | |
| 	fs := filesystem.DefaultFileSystem()
 | |
| 	return &FileRenderer{
 | |
| 		fs: fs,
 | |
| 		Context: &Context{
 | |
| 			preRender: true,
 | |
| 			basePath:  basePath,
 | |
| 			fs:        fs,
 | |
| 		},
 | |
| 		Data: data,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (r *FileRenderer) RenderTemplateFileToBuffer(file string) (*bytes.Buffer, error) {
 | |
| 	content, err := r.fs.ReadFile(file)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	return r.RenderTemplateContentToBuffer(content)
 | |
| }
 | |
| 
 | |
| // RenderToBytes loads the content of the file.
 | |
| // If its extension is `gotmpl` it treats the content as a go template and renders it.
 | |
| func (r *FileRenderer) RenderToBytes(path string) ([]byte, error) {
 | |
| 	var yamlBytes []byte
 | |
| 	splits := strings.Split(path, ".")
 | |
| 	if len(splits) > 0 && splits[len(splits)-1] == "gotmpl" {
 | |
| 		yamlBuf, err := r.RenderTemplateFileToBuffer(path)
 | |
| 		if err != nil {
 | |
| 			return nil, fmt.Errorf("failed to render [%s], because of %v", path, err)
 | |
| 		}
 | |
| 		yamlBytes = yamlBuf.Bytes()
 | |
| 	} else {
 | |
| 		var err error
 | |
| 		yamlBytes, err = r.fs.ReadFile(path)
 | |
| 		if err != nil {
 | |
| 			return nil, fmt.Errorf("failed to load [%s]: %v", path, err)
 | |
| 		}
 | |
| 	}
 | |
| 	return yamlBytes, nil
 | |
| }
 | |
| 
 | |
| func (r *FileRenderer) RenderTemplateContentToBuffer(content []byte) (*bytes.Buffer, error) {
 | |
| 	return r.Context.RenderTemplateToBuffer(string(content), r.Data)
 | |
| }
 | |
| 
 | |
| func (r *FileRenderer) RenderTemplateContentToString(content []byte) (string, error) {
 | |
| 	buf, err := r.Context.RenderTemplateToBuffer(string(content), r.Data)
 | |
| 	if err != nil {
 | |
| 		return "", err
 | |
| 	}
 | |
| 	return buf.String(), nil
 | |
| }
 |