mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
14ac9f60d0
Add api/cli support for adding host port PublishMode in services. Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
81 lines
2.6 KiB
Go
81 lines
2.6 KiB
Go
package convert
|
|
|
|
import (
|
|
"strings"
|
|
|
|
types "github.com/docker/docker/api/types/swarm"
|
|
swarmapi "github.com/docker/swarmkit/api"
|
|
"github.com/docker/swarmkit/protobuf/ptypes"
|
|
)
|
|
|
|
// TaskFromGRPC converts a grpc Task to a Task.
|
|
func TaskFromGRPC(t swarmapi.Task) types.Task {
|
|
if t.Spec.GetAttachment() != nil {
|
|
return types.Task{}
|
|
}
|
|
containerConfig := t.Spec.Runtime.(*swarmapi.TaskSpec_Container).Container
|
|
containerStatus := t.Status.GetContainer()
|
|
networks := make([]types.NetworkAttachmentConfig, 0, len(t.Spec.Networks))
|
|
for _, n := range t.Spec.Networks {
|
|
networks = append(networks, types.NetworkAttachmentConfig{Target: n.Target, Aliases: n.Aliases})
|
|
}
|
|
|
|
task := types.Task{
|
|
ID: t.ID,
|
|
Annotations: types.Annotations{
|
|
Name: t.Annotations.Name,
|
|
Labels: t.Annotations.Labels,
|
|
},
|
|
ServiceID: t.ServiceID,
|
|
Slot: int(t.Slot),
|
|
NodeID: t.NodeID,
|
|
Spec: types.TaskSpec{
|
|
ContainerSpec: containerSpecFromGRPC(containerConfig),
|
|
Resources: resourcesFromGRPC(t.Spec.Resources),
|
|
RestartPolicy: restartPolicyFromGRPC(t.Spec.Restart),
|
|
Placement: placementFromGRPC(t.Spec.Placement),
|
|
LogDriver: driverFromGRPC(t.Spec.LogDriver),
|
|
Networks: networks,
|
|
},
|
|
Status: types.TaskStatus{
|
|
State: types.TaskState(strings.ToLower(t.Status.State.String())),
|
|
Message: t.Status.Message,
|
|
Err: t.Status.Err,
|
|
},
|
|
DesiredState: types.TaskState(strings.ToLower(t.DesiredState.String())),
|
|
}
|
|
|
|
// Meta
|
|
task.Version.Index = t.Meta.Version.Index
|
|
task.CreatedAt, _ = ptypes.Timestamp(t.Meta.CreatedAt)
|
|
task.UpdatedAt, _ = ptypes.Timestamp(t.Meta.UpdatedAt)
|
|
|
|
task.Status.Timestamp, _ = ptypes.Timestamp(t.Status.Timestamp)
|
|
|
|
if containerStatus != nil {
|
|
task.Status.ContainerStatus.ContainerID = containerStatus.ContainerID
|
|
task.Status.ContainerStatus.PID = int(containerStatus.PID)
|
|
task.Status.ContainerStatus.ExitCode = int(containerStatus.ExitCode)
|
|
}
|
|
|
|
// NetworksAttachments
|
|
for _, na := range t.Networks {
|
|
task.NetworksAttachments = append(task.NetworksAttachments, networkAttachementFromGRPC(na))
|
|
}
|
|
|
|
if t.Status.PortStatus == nil {
|
|
return task
|
|
}
|
|
|
|
for _, p := range t.Status.PortStatus.Ports {
|
|
task.Status.PortStatus.Ports = append(task.Status.PortStatus.Ports, types.PortConfig{
|
|
Name: p.Name,
|
|
Protocol: types.PortConfigProtocol(strings.ToLower(swarmapi.PortConfig_Protocol_name[int32(p.Protocol)])),
|
|
PublishMode: types.PortConfigPublishMode(strings.ToLower(swarmapi.PortConfig_PublishMode_name[int32(p.PublishMode)])),
|
|
TargetPort: p.TargetPort,
|
|
PublishedPort: p.PublishedPort,
|
|
})
|
|
}
|
|
|
|
return task
|
|
}
|