package jobs import ( "encoding/json" "fmt" "xcecli/common/request" "xcecli/config" "xcecli/models" "github.com/spf13/cobra" ) func NewJobRestart(configManager *config.ConfigManager) *JobRestart { return &JobRestart{ configManager: configManager, jobID: "", askedHosts: "", } } type JobRestart struct { configManager *config.ConfigManager jobID string askedHosts string } func (c *JobRestart) ParseCmdArgs(cmd *cobra.Command, args []string) error { for _, arg := range args { if arg != "" && c.jobID == "" { c.jobID = arg } } // check if any filter conditions are set if c.jobID == "" { // if no job IDs or filter conditions are specified, default to processing all jobs of the current user return fmt.Errorf("no job ID is specified") } return nil } func (c *JobRestart) RunJobsRestart() error { // Get server information serverInfo, _ := c.configManager.GetServerInfo() // Create API client apiClient := request.NewAPIClient(serverInfo.URL) return c.restartJobsByID(apiClient, serverInfo.Token) } func (c *JobRestart) restartJobsByID(apiClient *request.APIClient, token string) error { url := fmt.Sprintf("/xce/v1/jobs/%s/restart", c.jobID) req := &models.JobRestartRequest{ AskedHosts: c.askedHosts, } return c.printJobRestartResponse(req, apiClient, token, url) } func (c *JobRestart) printJobRestartResponse(req interface{}, apiClient *request.APIClient, token string, url string) error { reqData, err := json.Marshal(req) if err != nil { errMsg := request.ExtractErrorMessage(err) return fmt.Errorf("failed to encode request data: [%s]", errMsg) } var resp models.JobRestartResponse err = apiClient.PostRequestToAPIServer( token, url, reqData, &resp, ) if err != nil { return err } row := resp.Data if row != nil { fmt.Printf("%s\n", row.Message) } return nil }