in scheduler/client/cli/run_job.go [57:136]
func (c *runJobCmd) Run(cl *client.SimpleClient, cmd *cobra.Command, args []string) error {
log.Info("Running on scoot, args:", args)
jobDef := scoot.NewJobDefinition()
jobDef.Tag = &c.tag
switch {
case len(args) > 0 && c.jobFilePath != "":
return errors.New("You must provide either args or a job definition")
case len(args) > 0:
if c.snapshotId == "" {
log.Info("No snapshotID provided - cmd will be run in an empty tmpdir.")
} else if !strings.Contains(c.snapshotId, "-") {
//this is not a bundleID, assume it's a sha that's available upstream. Cf. snapshot/git/gitdb/README.md
streamId := fmt.Sprintf("stream-gc-%s-%s", c.streamName, c.snapshotId)
log.Infof("Converting sha to a stream-based snapshot_id: %s -> %s", c.snapshotId, streamId)
c.snapshotId = streamId
}
task := scoot.NewTaskDefinition()
taskId := "task1"
task.Command = scoot.NewCommand()
task.Command.Argv = args
task.SnapshotId = &c.snapshotId
task.TaskId = &taskId
jobDef.Tasks = []*scoot.TaskDefinition{task}
case c.jobFilePath != "":
f, err := os.Open(c.jobFilePath)
if err != nil {
return err
}
asBytes, err := ioutil.ReadAll(f)
if err != nil {
return err
}
var jsonJob CLIJobDef
err = json.Unmarshal(asBytes, &jsonJob)
if err != nil {
return err
}
if jsonJob.DefaultTaskTimeoutMs > 0 {
jobDef.DefaultTaskTimeoutMs = &jsonJob.DefaultTaskTimeoutMs
}
jobDef.Tag = &jsonJob.Tag
jobDef.Basis = &jsonJob.Basis
jobDef.JobType = &jsonJob.JobType
jobDef.Requestor = &jsonJob.Requestor
jobDef.Priority = &jsonJob.Priority
jobDef.Tasks = []*scoot.TaskDefinition{}
for _, jsonTask := range jsonJob.Tasks {
jt := jsonTask
taskDef := scoot.NewTaskDefinition()
taskDef.Command = scoot.NewCommand()
taskDef.Command.Argv = jt.Args
taskDef.Command.EnvVars = make(map[string]string)
for k, v := range jt.EnvVars {
taskDef.Command.EnvVars[k] = v
}
taskDef.SnapshotId = &jt.SnapshotID
taskDef.TaskId = &jt.TaskID
jobDef.Tasks = append(jobDef.Tasks, taskDef)
if jt.TimeoutMs > 0 {
taskDef.TimeoutMs = &jt.TimeoutMs
}
}
}
jobId, err := cl.ScootClient.RunJob(jobDef)
if err != nil {
switch err := err.(type) {
case *scoot.InvalidRequest:
return fmt.Errorf("Invalid Request: %v", err.GetMessage())
default:
return fmt.Errorf("Error running job: %v %T", err, err)
}
}
fmt.Println(jobId.ID) // must go to std out in case caller looking in stdout for the results
log.Infof("JobID: %s", jobId.ID)
return nil
}