github.com/nginxinc/kubernetes-ingress@v1.12.5/internal/configs/version1/template_executor.go (about) 1 package version1 2 3 import ( 4 "bytes" 5 "path" 6 "text/template" 7 ) 8 9 // TemplateExecutor executes NGINX configuration templates. 10 type TemplateExecutor struct { 11 mainTemplate *template.Template 12 ingressTemplate *template.Template 13 } 14 15 // NewTemplateExecutor creates a TemplateExecutor. 16 func NewTemplateExecutor(mainTemplatePath string, ingressTemplatePath string) (*TemplateExecutor, error) { 17 // template name must be the base name of the template file https://golang.org/pkg/text/template/#Template.ParseFiles 18 nginxTemplate, err := template.New(path.Base(mainTemplatePath)).ParseFiles(mainTemplatePath) 19 if err != nil { 20 return nil, err 21 } 22 23 ingressTemplate, err := template.New(path.Base(ingressTemplatePath)).Funcs(helperFunctions).ParseFiles(ingressTemplatePath) 24 if err != nil { 25 return nil, err 26 } 27 28 return &TemplateExecutor{ 29 mainTemplate: nginxTemplate, 30 ingressTemplate: ingressTemplate, 31 }, nil 32 } 33 34 // UpdateMainTemplate updates the main NGINX template. 35 func (te *TemplateExecutor) UpdateMainTemplate(templateString *string) error { 36 newTemplate, err := template.New("nginxTemplate").Parse(*templateString) 37 if err != nil { 38 return err 39 } 40 41 te.mainTemplate = newTemplate 42 43 return nil 44 } 45 46 // UpdateIngressTemplate updates the ingress template. 47 func (te *TemplateExecutor) UpdateIngressTemplate(templateString *string) error { 48 newTemplate, err := template.New("ingressTemplate").Funcs(helperFunctions).Parse(*templateString) 49 if err != nil { 50 return err 51 } 52 53 te.ingressTemplate = newTemplate 54 55 return nil 56 } 57 58 // ExecuteMainConfigTemplate generates the content of the main NGINX configuration file. 59 func (te *TemplateExecutor) ExecuteMainConfigTemplate(cfg *MainConfig) ([]byte, error) { 60 var configBuffer bytes.Buffer 61 err := te.mainTemplate.Execute(&configBuffer, cfg) 62 63 return configBuffer.Bytes(), err 64 } 65 66 // ExecuteIngressConfigTemplate generates the content of a NGINX configuration file for an Ingress resource. 67 func (te *TemplateExecutor) ExecuteIngressConfigTemplate(cfg *IngressNginxConfig) ([]byte, error) { 68 var configBuffer bytes.Buffer 69 err := te.ingressTemplate.Execute(&configBuffer, cfg) 70 71 return configBuffer.Bytes(), err 72 }