Signed-off-by: Victor Vieux <vieux@docker.com>
| ... | ... |
@@ -13,6 +13,7 @@ import ( |
| 13 | 13 |
"github.com/docker/docker/pkg/ioutils" |
| 14 | 14 |
apiclient "github.com/docker/engine-api/client" |
| 15 | 15 |
"github.com/docker/engine-api/types/swarm" |
| 16 |
+ "github.com/docker/go-units" |
|
| 16 | 17 |
"github.com/spf13/cobra" |
| 17 | 18 |
) |
| 18 | 19 |
|
| ... | ... |
@@ -101,7 +102,10 @@ func printService(out io.Writer, service swarm.Service) {
|
| 101 | 101 |
} |
| 102 | 102 |
} |
| 103 | 103 |
fmt.Fprintln(out, "Placement:") |
| 104 |
- fmt.Fprintln(out, " Strategy:\tSPREAD") |
|
| 104 |
+ fmt.Fprintln(out, " Strategy:\tSpread") |
|
| 105 |
+ if service.Spec.TaskTemplate.Placement != nil && len(service.Spec.TaskTemplate.Placement.Constraints) > 0 {
|
|
| 106 |
+ ioutils.FprintfIfNotEmpty(out, " Constraints\t: %s\n", strings.Join(service.Spec.TaskTemplate.Placement.Constraints, ", ")) |
|
| 107 |
+ } |
|
| 105 | 108 |
fmt.Fprintf(out, "UpdateConfig:\n") |
| 106 | 109 |
fmt.Fprintf(out, " Parallelism:\t%d\n", service.Spec.UpdateConfig.Parallelism) |
| 107 | 110 |
if service.Spec.UpdateConfig.Delay.Nanoseconds() > 0 {
|
| ... | ... |
@@ -109,6 +113,42 @@ func printService(out io.Writer, service swarm.Service) {
|
| 109 | 109 |
} |
| 110 | 110 |
fmt.Fprintf(out, "ContainerSpec:\n") |
| 111 | 111 |
printContainerSpec(out, service.Spec.TaskTemplate.ContainerSpec) |
| 112 |
+ |
|
| 113 |
+ if service.Spec.TaskTemplate.Resources != nil {
|
|
| 114 |
+ fmt.Fprintln(out, "Resources:") |
|
| 115 |
+ printResources := func(out io.Writer, r *swarm.Resources) {
|
|
| 116 |
+ if r.NanoCPUs != 0 {
|
|
| 117 |
+ fmt.Fprintf(out, " CPU:\t\t%g\n", float64(r.NanoCPUs)/1e9) |
|
| 118 |
+ } |
|
| 119 |
+ if r.MemoryBytes != 0 {
|
|
| 120 |
+ fmt.Fprintf(out, " Memory:\t\t%s\n", units.BytesSize(float64(r.MemoryBytes))) |
|
| 121 |
+ } |
|
| 122 |
+ } |
|
| 123 |
+ if service.Spec.TaskTemplate.Resources.Reservations != nil {
|
|
| 124 |
+ fmt.Fprintln(out, "Reservations:") |
|
| 125 |
+ printResources(out, service.Spec.TaskTemplate.Resources.Reservations) |
|
| 126 |
+ } |
|
| 127 |
+ if service.Spec.TaskTemplate.Resources.Limits != nil {
|
|
| 128 |
+ fmt.Fprintln(out, "Limits:") |
|
| 129 |
+ printResources(out, service.Spec.TaskTemplate.Resources.Limits) |
|
| 130 |
+ } |
|
| 131 |
+ } |
|
| 132 |
+ if len(service.Spec.Networks) > 0 {
|
|
| 133 |
+ fmt.Fprintf(out, "Networks:") |
|
| 134 |
+ for _, n := range service.Spec.Networks {
|
|
| 135 |
+ fmt.Fprintf(out, " %s", n.Target) |
|
| 136 |
+ } |
|
| 137 |
+ } |
|
| 138 |
+ |
|
| 139 |
+ if len(service.Endpoint.Ports) > 0 {
|
|
| 140 |
+ fmt.Fprintln(out, "Ports:") |
|
| 141 |
+ for _, port := range service.Endpoint.Ports {
|
|
| 142 |
+ fmt.Fprintf(out, " Name = %s\n", port.Name) |
|
| 143 |
+ fmt.Fprintf(out, " Protocol = %s\n", port.Protocol) |
|
| 144 |
+ fmt.Fprintf(out, " TargetPort = %d\n", port.TargetPort) |
|
| 145 |
+ fmt.Fprintf(out, " PublishedPort = %d\n", port.PublishedPort) |
|
| 146 |
+ } |
|
| 147 |
+ } |
|
| 112 | 148 |
} |
| 113 | 149 |
|
| 114 | 150 |
func printContainerSpec(out io.Writer, containerSpec swarm.ContainerSpec) {
|
| ... | ... |
@@ -124,4 +164,13 @@ func printContainerSpec(out io.Writer, containerSpec swarm.ContainerSpec) {
|
| 124 | 124 |
} |
| 125 | 125 |
ioutils.FprintfIfNotEmpty(out, " Dir\t\t%s\n", containerSpec.Dir) |
| 126 | 126 |
ioutils.FprintfIfNotEmpty(out, " User\t\t%s\n", containerSpec.User) |
| 127 |
+ if len(containerSpec.Mounts) > 0 {
|
|
| 128 |
+ fmt.Fprintln(out, " Mounts:") |
|
| 129 |
+ for _, v := range containerSpec.Mounts {
|
|
| 130 |
+ fmt.Fprintf(out, " Target = %s\n", v.Target) |
|
| 131 |
+ fmt.Fprintf(out, " Source = %s\n", v.Source) |
|
| 132 |
+ fmt.Fprintf(out, " Writable = %v\n", v.Writable) |
|
| 133 |
+ fmt.Fprintf(out, " Type = %v\n", v.Type) |
|
| 134 |
+ } |
|
| 135 |
+ } |
|
| 127 | 136 |
} |