github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/daemon/cluster/convert/task.go (about) 1 package convert 2 3 import ( 4 "strings" 5 6 types "github.com/docker/docker/api/types/swarm" 7 swarmapi "github.com/docker/swarmkit/api" 8 gogotypes "github.com/gogo/protobuf/types" 9 ) 10 11 // TaskFromGRPC converts a grpc Task to a Task. 12 func TaskFromGRPC(t swarmapi.Task) types.Task { 13 if t.Spec.GetAttachment() != nil { 14 return types.Task{} 15 } 16 containerStatus := t.Status.GetContainer() 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: taskSpecFromGRPC(t.Spec), 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 } 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 38 task.Status.Timestamp, _ = gogotypes.TimestampFromProto(t.Status.Timestamp) 39 40 if containerStatus != nil { 41 task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID 42 task.Status.ContainerStatus.PID = int(containerStatus.PID) 43 task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode) 44 } 45 46 // NetworksAttachments 47 for _, na := range t.Networks { 48 task.NetworksAttachments = append(task.NetworksAttachments, networkAttachmentFromGRPC(na)) 49 } 50 51 if t.Status.PortStatus == nil { 52 return task 53 } 54 55 for _, p := range t.Status.PortStatus.Ports { 56 task.Status.PortStatus.Ports = append(task.Status.PortStatus.Ports, types.PortConfig{ 57 Name: p.Name, 58 Protocol: types.PortConfigProtocol(strings.ToLower(swarmapi.PortConfig_Protocol_name[int32(p.Protocol)])), 59 PublishMode: types.PortConfigPublishMode(strings.ToLower(swarmapi.PortConfig_PublishMode_name[int32(p.PublishMode)])), 60 TargetPort: p.TargetPort, 61 PublishedPort: p.PublishedPort, 62 }) 63 } 64 65 return task 66 }