Files
kubesphere/vendor/github.com/open-policy-agent/opa/topdown/template.go
KubeSphere CI Bot 447a51f08b feat: kubesphere 4.0 (#6115)
* feat: kubesphere 4.0

Signed-off-by: ci-bot <ci-bot@kubesphere.io>

* feat: kubesphere 4.0

Signed-off-by: ci-bot <ci-bot@kubesphere.io>

---------

Signed-off-by: ci-bot <ci-bot@kubesphere.io>
Co-authored-by: ks-ci-bot <ks-ci-bot@example.com>
Co-authored-by: joyceliu <joyceliu@yunify.com>
2024-09-06 11:05:52 +08:00

46 lines
1.0 KiB
Go

package topdown
import (
"bytes"
"text/template"
"github.com/open-policy-agent/opa/ast"
"github.com/open-policy-agent/opa/topdown/builtins"
)
func renderTemplate(_ BuiltinContext, operands []*ast.Term, iter func(*ast.Term) error) error {
preContentTerm, err := builtins.StringOperand(operands[0].Value, 1)
if err != nil {
return err
}
templateVariablesTerm, err := builtins.ObjectOperand(operands[1].Value, 2)
if err != nil {
return err
}
var templateVariables map[string]interface{}
if err := ast.As(templateVariablesTerm, &templateVariables); err != nil {
return err
}
tmpl, err := template.New("template").Parse(string(preContentTerm))
if err != nil {
return err
}
// Do not attempt to render if template variable keys are missing
tmpl.Option("missingkey=error")
var buf bytes.Buffer
if err := tmpl.Execute(&buf, templateVariables); err != nil {
return err
}
return iter(ast.StringTerm(buf.String()))
}
func init() {
RegisterBuiltinFunc(ast.RenderTemplate.Name, renderTemplate)
}