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  }