task.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package convert
  2. import (
  3. "strings"
  4. types "github.com/docker/engine-api/types/swarm"
  5. swarmapi "github.com/docker/swarmkit/api"
  6. "github.com/docker/swarmkit/protobuf/ptypes"
  7. )
  8. // TaskFromGRPC converts a grpc Task to a Task.
  9. func TaskFromGRPC(t swarmapi.Task) types.Task {
  10. containerConfig := t.Spec.Runtime.(*swarmapi.TaskSpec_Container).Container
  11. containerStatus := t.Status.GetContainer()
  12. task := types.Task{
  13. ID: t.ID,
  14. ServiceID: t.ServiceID,
  15. Slot: int(t.Slot),
  16. NodeID: t.NodeID,
  17. Spec: types.TaskSpec{
  18. ContainerSpec: containerSpecFromGRPC(containerConfig),
  19. Resources: resourcesFromGRPC(t.Spec.Resources),
  20. RestartPolicy: restartPolicyFromGRPC(t.Spec.Restart),
  21. Placement: placementFromGRPC(t.Spec.Placement),
  22. LogDriver: driverFromGRPC(t.Spec.LogDriver),
  23. },
  24. Status: types.TaskStatus{
  25. State: types.TaskState(strings.ToLower(t.Status.State.String())),
  26. Message: t.Status.Message,
  27. Err: t.Status.Err,
  28. },
  29. DesiredState: types.TaskState(strings.ToLower(t.DesiredState.String())),
  30. }
  31. // Meta
  32. task.Version.Index = t.Meta.Version.Index
  33. task.CreatedAt, _ = ptypes.Timestamp(t.Meta.CreatedAt)
  34. task.UpdatedAt, _ = ptypes.Timestamp(t.Meta.UpdatedAt)
  35. task.Status.Timestamp, _ = ptypes.Timestamp(t.Status.Timestamp)
  36. if containerStatus != nil {
  37. task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID
  38. task.Status.ContainerStatus.PID = int(containerStatus.PID)
  39. task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode)
  40. }
  41. // NetworksAttachments
  42. for _, na := range t.Networks {
  43. task.NetworksAttachments = append(task.NetworksAttachments, networkAttachementFromGRPC(na))
  44. }
  45. return task
  46. }