123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package supervisor
- import (
- "time"
- "github.com/docker/containerd/runtime"
- )
- type UpdateTask struct {
- baseTask
- ID string
- State runtime.State
- Resources *runtime.Resource
- }
- func (s *Supervisor) updateContainer(t *UpdateTask) error {
- i, ok := s.containers[t.ID]
- if !ok {
- return ErrContainerNotFound
- }
- container := i.container
- if t.State != "" {
- switch t.State {
- case runtime.Running:
- if err := container.Resume(); err != nil {
- return err
- }
- s.notifySubscribers(Event{
- ID: t.ID,
- Type: StateResume,
- Timestamp: time.Now(),
- })
- case runtime.Paused:
- if err := container.Pause(); err != nil {
- return err
- }
- s.notifySubscribers(Event{
- ID: t.ID,
- Type: StatePause,
- Timestamp: time.Now(),
- })
- default:
- return ErrUnknownContainerStatus
- }
- return nil
- }
- if t.Resources != nil {
- return container.UpdateResources(t.Resources)
- }
- return nil
- }
- type UpdateProcessTask struct {
- baseTask
- ID string
- PID string
- CloseStdin bool
- Width int
- Height int
- }
- func (s *Supervisor) updateProcess(t *UpdateProcessTask) error {
- i, ok := s.containers[t.ID]
- if !ok {
- return ErrContainerNotFound
- }
- processes, err := i.container.Processes()
- if err != nil {
- return err
- }
- var process runtime.Process
- for _, p := range processes {
- if p.ID() == t.PID {
- process = p
- break
- }
- }
- if process == nil {
- return ErrProcessNotFound
- }
- if t.CloseStdin {
- if err := process.CloseStdin(); err != nil {
- return err
- }
- }
- if t.Width > 0 || t.Height > 0 {
- if err := process.Resize(t.Width, t.Height); err != nil {
- return err
- }
- }
- return nil
- }
|