77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
|
||
|
"forge.cadoles.com/pcaseiro/templatefile/api"
|
||
|
"forge.cadoles.com/pcaseiro/templatefile/pkg/templater"
|
||
|
"github.com/alexflint/go-arg"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
)
|
||
|
|
||
|
func Daemon(port int) (err error) {
|
||
|
r := gin.Default()
|
||
|
|
||
|
r.POST("/generate", api.Generate)
|
||
|
|
||
|
err = r.Run(fmt.Sprintf("0.0.0.0:%d", port)) // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
|
||
|
if err != nil {
|
||
|
return (err)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
var args struct {
|
||
|
Daemon bool `arg:"-d,--daemon,env:TEMPLATER_DAEMON" default:"false" help:"Enable api server"`
|
||
|
Port int `arg:"-p,--port,env:TEMPLATER_PORT" default:"8080" help:"Listening port for the api server"`
|
||
|
Type string `arg:"-t,--type,env:TEMPLATE_TYPE" default:"hcl" help:"Template type (go/template or hcl)"`
|
||
|
Output string `arg:"-o,--output,env:TEMPLATER_OUTPUT" default:"stdout" help:"Destination of the result (stdout or file path)"`
|
||
|
Config string `arg:"-c,--config,env:TEMPLATE_CONFIG" help:"Configuration values"`
|
||
|
File string `arg:"-f,--template-file,env:TEMPLATE_FILE" help:"Template file path"`
|
||
|
}
|
||
|
|
||
|
arg.MustParse(&args)
|
||
|
|
||
|
if args.Daemon {
|
||
|
err := Daemon(args.Port)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
} else {
|
||
|
var config []byte
|
||
|
templateType := args.Type
|
||
|
templateFile := args.File
|
||
|
output := args.Output
|
||
|
|
||
|
if _, err := os.Stat(args.Config); err == nil {
|
||
|
config, err = os.ReadFile(args.Config)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
} else {
|
||
|
config = []byte(args.Config)
|
||
|
}
|
||
|
|
||
|
result := ""
|
||
|
if templateType == "go" {
|
||
|
result = templater.ProcessGoTemplate(templateFile, config)
|
||
|
} else if templateType == "hcl" {
|
||
|
result = templater.ProcessHCLTemplate(templateFile, config)
|
||
|
} else {
|
||
|
panic(fmt.Errorf("Unsupported template type"))
|
||
|
}
|
||
|
if output == "stdout" {
|
||
|
fmt.Printf("%s", result)
|
||
|
} else {
|
||
|
err := os.WriteFile(output, []byte(result), 0644)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|