package main import ( "flag" "fmt" "io" "net/http" "os" "git.algo.com.cn/public/saasapi" "git.algo.com.cn/public/saasapi/pkg/saashttp" ) type scriptRunParams struct { luaScript string did string os saasapi.OS saasHttp *saashttp.SaasClient } func RunScriptRun(args ...string) error { fs := flag.NewFlagSet("run", flag.ExitOnError) cfgFile := paramConfig(fs) luaFile := paramLua(fs) did := paramDid(fs) tos := paramOS(fs) if err := fs.Parse(args); err != nil { fmt.Fprintln(os.Stderr, "command line parse error", "err", err) return err } if fs.NArg() > 0 || len(*luaFile) == 0 || len(*did) == 0 { fs.PrintDefaults() return nil } if !(*tos == 1 || *tos == 2) { fmt.Fprintln(os.Stderr, "OS error") return nil } file, err := os.Open(*luaFile) if err != nil { fmt.Fprintln(os.Stderr, "lua file error", "err", err) return err } defer file.Close() body, err := io.ReadAll(file) if err != nil { fmt.Fprintln(os.Stderr, "lua file read error", "err", err) return err } cfg, err := LoadConfigFile(*cfgFile) if err != nil { fmt.Fprintln(os.Stderr, "LoadConfigFile error", "err", err) return err } scriptRunParams := scriptRunParams{ luaScript: string(body), did: *did, os: saasapi.OS(*tos), saasHttp: &saashttp.SaasClient{ Client: &http.Client{}, ApiUrls: saashttp.InitAPIUrl(&cfg.ApiUrls), Auth: &cfg.Auth, }, } return doScriptRun(scriptRunParams) } func doScriptRun(scriptRunParams scriptRunParams) error { saasReq := &saasapi.SaasReq{ Cmd: &saasapi.SaasReq_ScriptRun{ ScriptRun: &saasapi.ScriptRun{ LuaScript: scriptRunParams.luaScript, ServerDid: scriptRunParams.did, Os: scriptRunParams.os, }, }, } res, err := scriptRunParams.saasHttp.ScriptRun(saasReq) if err != nil { fmt.Fprintln(os.Stderr, "run script error", "err", err) return err } if res.Code != saasapi.ErrorCode_SUCC { err = fmt.Errorf("run script failed. code:%v, status:%v", res.Code, res.Status) fmt.Fprintln(os.Stderr, err) return err } scriptRunRes := res.GetScriptRunRes() fmt.Println("ERROROUT_OUTPUT:") fmt.Print(scriptRunRes.GetErrorOutput()) fmt.Println() fmt.Println("PRINT_OUTPUT:") fmt.Print(scriptRunRes.GetPrintOutput()) fmt.Println() fmt.Println("DATASPACE_OUTPUT:") fmt.Print(scriptRunRes.GetDataspaceOut()) fmt.Println() fmt.Println("TARGETS_OUTPUT:") fmt.Print(scriptRunRes.GetTargetsOutput()) return nil }