Files
sunhpc-go/internal/template/engine.go
2026-02-14 05:36:00 +08:00

62 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package template
import (
"bytes"
"fmt"
"os"
"os/exec"
"path/filepath"
"text/template"
"sunhpc/internal/config"
"sunhpc/internal/log"
)
// RenderAndExecute 从模板目录加载模板,渲染后生成临时脚本并执行
// tmplName: 模板文件名(位于 /etc/sunhpc/tmpl.d/
// data: 模板变量
func RenderAndExecute(tmplName string, data interface{}) error {
tmplPath := filepath.Join(config.TmplDir, tmplName)
if _, err := os.Stat(tmplPath); err != nil {
return fmt.Errorf("模板文件不存在: %s", tmplPath)
}
content, err := os.ReadFile(tmplPath)
if err != nil {
return err
}
t, err := template.New(tmplName).Parse(string(content))
if err != nil {
return err
}
var buf bytes.Buffer
if err := t.Execute(&buf, data); err != nil {
return err
}
// 生成临时脚本
tmpFile, err := os.CreateTemp("/tmp", "sunhpc-*.sh")
if err != nil {
return err
}
defer os.Remove(tmpFile.Name())
if _, err := tmpFile.Write(buf.Bytes()); err != nil {
tmpFile.Close()
return err
}
tmpFile.Close()
if err := os.Chmod(tmpFile.Name(), 0755); err != nil {
return err
}
log.Infof("执行模板脚本: %s", tmpFile.Name())
cmd := exec.Command("/bin/bash", tmpFile.Name())
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}