This commit is contained in:
2026-02-14 05:36:00 +08:00
commit d7cd899983
37 changed files with 4169 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
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()
}