task.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package convert
  2. import (
  3. "strings"
  4. types "github.com/docker/docker/api/types/swarm"
  5. swarmapi "github.com/docker/swarmkit/api"
  6. gogotypes "github.com/gogo/protobuf/types"
  7. )
  8. // TaskFromGRPC converts a grpc Task to a Task.
  9. func TaskFromGRPC(t swarmapi.Task) types.Task {
  10. if t.Spec.GetAttachment() != nil {
  11. return types.Task{}
  12. }
  13. containerStatus := t.Status.GetContainer()
  14. task := types.Task{
  15. ID: t.ID,
  16. Annotations: annotationsFromGRPC(t.Annotations),
  17. ServiceID: t.ServiceID,
  18. Slot: int(t.Slot),
  19. NodeID: t.NodeID,
  20. Spec: taskSpecFromGRPC(t.Spec),
  21. Status: types.TaskStatus{
  22. State: types.TaskState(strings.ToLower(t.Status.State.String())),
  23. Message: t.Status.Message,
  24. Err: t.Status.Err,
  25. },
  26. DesiredState: types.TaskState(strings.ToLower(t.DesiredState.String())),
  27. }
  28. // Meta
  29. task.Version.Index = t.Meta.Version.Index
  30. task.CreatedAt, _ = gogotypes.TimestampFromProto(t.Meta.CreatedAt)
  31. task.UpdatedAt, _ = gogotypes.TimestampFromProto(t.Meta.UpdatedAt)
  32. task.Status.Timestamp, _ = gogotypes.TimestampFromProto(t.Status.Timestamp)
  33. if containerStatus != nil {
  34. task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID
  35. task.Status.ContainerStatus.PID = int(containerStatus.PID)
  36. task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode)
  37. }
  38. // NetworksAttachments
  39. for _, na := range t.Networks {
  40. task.NetworksAttachments = append(task.NetworksAttachments, networkAttachmentFromGRPC(na))
  41. }
  42. if t.Status.PortStatus == nil {
  43. return task
  44. }
  45. for _, p := range t.Status.PortStatus.Ports {
  46. task.Status.PortStatus.Ports = append(task.Status.PortStatus.Ports, types.PortConfig{
  47. Name: p.Name,
  48. Protocol: types.PortConfigProtocol(strings.ToLower(swarmapi.PortConfig_Protocol_name[int32(p.Protocol)])),
  49. PublishMode: types.PortConfigPublishMode(strings.ToLower(swarmapi.PortConfig_PublishMode_name[int32(p.PublishMode)])),
  50. TargetPort: p.TargetPort,
  51. PublishedPort: p.PublishedPort,
  52. })
  53. }
  54. return task
  55. }