task.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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, error) {
  10. if t.Spec.GetAttachment() != nil {
  11. return types.Task{}, nil
  12. }
  13. containerStatus := t.Status.GetContainer()
  14. taskSpec, err := taskSpecFromGRPC(t.Spec)
  15. if err != nil {
  16. return types.Task{}, err
  17. }
  18. task := types.Task{
  19. ID: t.ID,
  20. Annotations: annotationsFromGRPC(t.Annotations),
  21. ServiceID: t.ServiceID,
  22. Slot: int(t.Slot),
  23. NodeID: t.NodeID,
  24. Spec: taskSpec,
  25. Status: types.TaskStatus{
  26. State: types.TaskState(strings.ToLower(t.Status.State.String())),
  27. Message: t.Status.Message,
  28. Err: t.Status.Err,
  29. },
  30. DesiredState: types.TaskState(strings.ToLower(t.DesiredState.String())),
  31. GenericResources: GenericResourcesFromGRPC(t.AssignedGenericResources),
  32. }
  33. // Meta
  34. task.Version.Index = t.Meta.Version.Index
  35. task.CreatedAt, _ = gogotypes.TimestampFromProto(t.Meta.CreatedAt)
  36. task.UpdatedAt, _ = gogotypes.TimestampFromProto(t.Meta.UpdatedAt)
  37. task.Status.Timestamp, _ = gogotypes.TimestampFromProto(t.Status.Timestamp)
  38. if containerStatus != nil {
  39. task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID
  40. task.Status.ContainerStatus.PID = int(containerStatus.PID)
  41. task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode)
  42. }
  43. // NetworksAttachments
  44. for _, na := range t.Networks {
  45. task.NetworksAttachments = append(task.NetworksAttachments, networkAttachmentFromGRPC(na))
  46. }
  47. if t.Status.PortStatus == nil {
  48. return task, nil
  49. }
  50. for _, p := range t.Status.PortStatus.Ports {
  51. task.Status.PortStatus.Ports = append(task.Status.PortStatus.Ports, types.PortConfig{
  52. Name: p.Name,
  53. Protocol: types.PortConfigProtocol(strings.ToLower(swarmapi.PortConfig_Protocol_name[int32(p.Protocol)])),
  54. PublishMode: types.PortConfigPublishMode(strings.ToLower(swarmapi.PortConfig_PublishMode_name[int32(p.PublishMode)])),
  55. TargetPort: p.TargetPort,
  56. PublishedPort: p.PublishedPort,
  57. })
  58. }
  59. return task, nil
  60. }