feat: added jinja2 and userdata plugins

This commit is contained in:
David Allen 2025-08-19 21:33:58 -06:00
parent 5c4bbe0b58
commit 2da5ca3702
Signed by: towk
GPG key ID: 0430CDBE22619155
3 changed files with 80 additions and 13 deletions

View file

@ -1,5 +1,9 @@
package configurator package configurator
import (
"git.towk2.me/towk/configurator/pkg/storage"
)
type Plugin interface { type Plugin interface {
Name() string Name() string
Version() string Version() string
@ -7,10 +11,6 @@ type Plugin interface {
Metadata() map[string]string Metadata() map[string]string
Init() error Init() error
Run(args []string) error Run(data storage.KVStore, args []string) error
Cleanup() error Cleanup() error
} }
func RunPlugin() {
}

View file

@ -1,19 +1,58 @@
package plugin package plugin
import (
"bytes"
"git.towk2.me/towk/configurator/pkg/storage"
"github.com/nikolalohinski/gonja/v2"
"github.com/nikolalohinski/gonja/v2/exec"
)
type Jinja2 struct{} type Jinja2 struct{}
func Name() string { return "jinja2" } func (p *Jinja2) Name() string { return "jinja2" }
func Version() string { return "test" } func (p *Jinja2) Version() string { return "test" }
func Description() string { return "Renders Jinja 2 templates" } func (p *Jinja2) Description() string { return "Renders Jinja 2 templates" }
func Metadata() map[string]string { func (p *Jinja2) Metadata() map[string]string {
return map[string]string{ return map[string]string{
"author.name": "David J. Allen", "author.name": "David J. Allen",
"author.email": "davidallendj@gmail.com", "author.email": "davidallendj@gmail.com",
} }
} }
func Init() { func (p *Jinja2) Init() error {
// initialize Jinja2 (gonja) // nothing to initialize
return nil
}
func (p *Jinja2) Run(data storage.KVStore, args []string) error {
// render the files using Jinja 2 from args
newContent := []string{}
for _, arg := range args {
var (
context *exec.Context
template *exec.Template
output bytes.Buffer
err error
)
template, err = gonja.FromString(arg)
if err != nil {
panic(err)
}
context = exec.NewContext(data.GetData().(map[string]any))
if err = template.Execute(&output, context); err != nil { // Prints: Hello Bob!
panic(err)
}
newContent = append(newContent, output.String())
}
// write back to the data storage
data.Set("out", newContent)
return nil
}
func (p *Jinja2) Cleanup() error {
// nothing to clean up
return nil
} }
func Run() {}
func Cleanup() {}

28
pkg/plugins/userdata.go Normal file
View file

@ -0,0 +1,28 @@
package plugin
import "git.towk2.me/towk/configurator/pkg/storage"
type UserData struct{}
func (p *UserData) Name() string { return "jinja2" }
func (p *UserData) Version() string { return "test" }
func (p *UserData) Description() string { return "Renders Jinja 2 templates" }
func (p *UserData) Metadata() map[string]string {
return map[string]string{
"author.name": "David J. Allen",
"author.email": "davidallendj@gmail.com",
}
}
func (p *UserData) Init() error {
// nothing to initialize
return nil
}
func (p *UserData) Run(data storage.KVStore, args []string) error {
return nil
}
func (p *UserData) Clean() error {
return nil
}