github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/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 containerConfig := t.Spec.Runtime.(*swarmapi.TaskSpec_Container).Container 17 containerStatus := t.Status.GetContainer() 18 networks := make([]types.NetworkAttachmentConfig, 0, len(t.Spec.Networks)) 19 for _, n := range t.Spec.Networks { 20 networks = append(networks, types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases}) 21 } 22 23 task := types.Task{ 24 ID: t.ID, 25 Annotations: annotationsFromGRPC(t.Annotations), 26 ServiceID: t.ServiceID, 27 Slot: int(t.Slot), 28 NodeID: t.NodeID, 29 Spec: types.TaskSpec{ 30 ContainerSpec: containerSpecFromGRPC(containerConfig), 31 Resources: resourcesFromGRPC(t.Spec.Resources), 32 RestartPolicy: restartPolicyFromGRPC(t.Spec.Restart), 33 Placement: placementFromGRPC(t.Spec.Placement), 34 LogDriver: driverFromGRPC(t.Spec.LogDriver), 35 Networks: networks, 36 }, 37 Status: types.TaskStatus{ 38 State: types.TaskState(strings.ToLower(t.Status.State.String())), 39 Message: t.Status.Message, 40 Err: t.Status.Err, 41 }, 42 DesiredState: types.TaskState(strings.ToLower(t.DesiredState.String())), 43 } 44 45 // Meta 46 task.Version.Index = t.Meta.Version.Index 47 task.CreatedAt, _ = gogotypes.TimestampFromProto(t.Meta.CreatedAt) 48 task.UpdatedAt, _ = gogotypes.TimestampFromProto(t.Meta.UpdatedAt) 49 50 task.Status.Timestamp, _ = gogotypes.TimestampFromProto(t.Status.Timestamp) 51 52 if containerStatus != nil { 53 task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID 54 task.Status.ContainerStatus.PID = int(containerStatus.PID) 55 task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode) 56 } 57 58 // NetworksAttachments 59 for _, na := range t.Networks { 60 task.NetworksAttachments = append(task.NetworksAttachments, networkAttachementFromGRPC(na)) 61 } 62 63 if t.Status.PortStatus == nil { 64 return task 65 } 66 67 for _, p := range t.Status.PortStatus.Ports { 68 task.Status.PortStatus.Ports = append(task.Status.PortStatus.Ports, types.PortConfig{ 69 Name: p.Name, 70 Protocol: types.PortConfigProtocol(strings.ToLower(swarmapi.PortConfig_Protocol_name[int32(p.Protocol)])), 71 PublishMode: types.PortConfigPublishMode(strings.ToLower(swarmapi.PortConfig_PublishMode_name[int32(p.PublishMode)])), 72 TargetPort: p.TargetPort, 73 PublishedPort: p.PublishedPort, 74 }) 75 } 76 77 return task 78 }