Browse code

Fix crash caused by `docker service inspect --pretty`

This fix tries to fix the crash caused by `docker service inspect --pretty`,
by performing necessary nil pointer check.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
(cherry picked from commit b6857e91c1625695abbf5897e13f688028880c33)
Signed-off-by: Victor Vieux <victorvieux@gmail.com>

Yong Tang authored on 2016/11/17 09:46:31
Showing 2 changed files
... ...
@@ -263,6 +263,9 @@ func (ctx *serviceInspectContext) HasResources() bool {
263 263
 }
264 264
 
265 265
 func (ctx *serviceInspectContext) HasResourceReservations() bool {
266
+	if ctx.Service.Spec.TaskTemplate.Resources == nil || ctx.Service.Spec.TaskTemplate.Resources.Reservations == nil {
267
+		return false
268
+	}
266 269
 	return ctx.Service.Spec.TaskTemplate.Resources.Reservations.NanoCPUs > 0 || ctx.Service.Spec.TaskTemplate.Resources.Reservations.MemoryBytes > 0
267 270
 }
268 271
 
... ...
@@ -281,6 +284,9 @@ func (ctx *serviceInspectContext) ResourceReservationMemory() string {
281 281
 }
282 282
 
283 283
 func (ctx *serviceInspectContext) HasResourceLimits() bool {
284
+	if ctx.Service.Spec.TaskTemplate.Resources == nil || ctx.Service.Spec.TaskTemplate.Resources.Limits == nil {
285
+		return false
286
+	}
284 287
 	return ctx.Service.Spec.TaskTemplate.Resources.Limits.NanoCPUs > 0 || ctx.Service.Spec.TaskTemplate.Resources.Limits.MemoryBytes > 0
285 288
 }
286 289
 
... ...
@@ -1072,3 +1072,19 @@ func (s *DockerSwarmSuite) TestSwarmManagerAddress(c *check.C) {
1072 1072
 	c.Assert(err, checker.IsNil)
1073 1073
 	c.Assert(out, checker.Contains, expectedOutput)
1074 1074
 }
1075
+
1076
+func (s *DockerSwarmSuite) TestSwarmServiceInspectPretty(c *check.C) {
1077
+	d := s.AddDaemon(c, true, true)
1078
+
1079
+	name := "top"
1080
+	out, err := d.Cmd("service", "create", "--name", name, "--limit-cpu=0.5", "busybox", "top")
1081
+	c.Assert(err, checker.IsNil, check.Commentf(out))
1082
+
1083
+	expectedOutput := `
1084
+Resources:
1085
+ Limits:
1086
+  CPU:		0.5`
1087
+	out, err = d.Cmd("service", "inspect", "--pretty", name)
1088
+	c.Assert(err, checker.IsNil, check.Commentf(out))
1089
+	c.Assert(out, checker.Contains, expectedOutput, check.Commentf(out))
1090
+}