func (s *WardenServer) handleSpawn(request *protocol.SpawnRequest) (proto.Message, error) { handle := request.GetHandle() script := request.GetScript() privileged := request.GetPrivileged() discardOutput := request.GetDiscardOutput() container, err := s.backend.Lookup(handle) if err != nil { return nil, err } s.bomberman.Pause(container.Handle()) defer s.bomberman.Unpause(container.Handle()) jobSpec := backend.JobSpec{ Script: script, Privileged: privileged, DiscardOutput: discardOutput, AutoLink: true, } if request.Rlimits != nil { jobSpec.Limits = resourceLimits(request.Rlimits) } jobID, err := container.Spawn(jobSpec) if err != nil { return nil, err } return &protocol.SpawnResponse{JobId: proto.Uint32(jobID)}, nil }
func (s *WardenServer) handleRun(request *protocol.RunRequest) (proto.Message, error) { handle := request.GetHandle() script := request.GetScript() privileged := request.GetPrivileged() discardOutput := request.GetDiscardOutput() container, err := s.backend.Lookup(handle) if err != nil { return nil, err } s.bomberman.Pause(container.Handle()) defer s.bomberman.Unpause(container.Handle()) jobSpec := backend.JobSpec{ Script: script, Privileged: privileged, DiscardOutput: discardOutput, AutoLink: false, } if request.Rlimits != nil { jobSpec.Limits = resourceLimits(request.Rlimits) } jobID, err := container.Spawn(jobSpec) if err != nil { return nil, err } jobResult, err := container.Link(jobID) if err != nil { return nil, err } return &protocol.RunResponse{ ExitStatus: proto.Uint32(jobResult.ExitStatus), Stdout: proto.String(string(jobResult.Stdout)), Stderr: proto.String(string(jobResult.Stderr)), }, nil }