Browse code

add some more fields in docker service inspect -p

Signed-off-by: Victor Vieux <vieux@docker.com>

Victor Vieux authored on 2016/06/17 06:34:28
Showing 1 changed files
... ...
@@ -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
 }