Jelajahi Sumber

fix panic on --label-add

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
Brian Goff 9 tahun lalu
induk
melakukan
85bc3194aa

+ 2 - 2
api/client/service/update.go

@@ -249,7 +249,7 @@ func updatePlacement(flags *pflag.FlagSet, placement *swarm.Placement) {
 
 
 func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
 func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
 	if flags.Changed(flagLabelAdd) {
 	if flags.Changed(flagLabelAdd) {
-		if field == nil {
+		if *field == nil {
 			*field = map[string]string{}
 			*field = map[string]string{}
 		}
 		}
 
 
@@ -259,7 +259,7 @@ func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
 		}
 		}
 	}
 	}
 
 
-	if field != nil && flags.Changed(flagLabelRemove) {
+	if *field != nil && flags.Changed(flagLabelRemove) {
 		toRemove := flags.Lookup(flagLabelRemove).Value.(*opts.ListOpts).GetAll()
 		toRemove := flags.Lookup(flagLabelRemove).Value.(*opts.ListOpts).GetAll()
 		for _, label := range toRemove {
 		for _, label := range toRemove {
 			delete(*field, label)
 			delete(*field, label)

+ 0 - 1
integration-cli/daemon_swarm.go

@@ -120,7 +120,6 @@ func (d *SwarmDaemon) getService(c *check.C, id string) *swarm.Service {
 	c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
 	c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
 	c.Assert(err, checker.IsNil)
 	c.Assert(err, checker.IsNil)
 	c.Assert(json.Unmarshal(out, &service), checker.IsNil)
 	c.Assert(json.Unmarshal(out, &service), checker.IsNil)
-	c.Assert(service.ID, checker.Equals, id)
 	return &service
 	return &service
 }
 }
 
 

+ 41 - 0
integration-cli/docker_cli_service_update_test.go

@@ -43,3 +43,44 @@ func (s *DockerSwarmSuite) TestServiceUpdatePort(c *check.C) {
 	}
 	}
 	c.Assert(portConfig, checker.DeepEquals, expected)
 	c.Assert(portConfig, checker.DeepEquals, expected)
 }
 }
+
+func (s *DockerSwarmSuite) TestServiceUpdateLabel(c *check.C) {
+	d := s.AddDaemon(c, true, true)
+	out, err := d.Cmd("service", "create", "--name=test", "busybox", "top")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service := d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 0)
+
+	// add label to empty set
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service = d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
+
+	// add label to non-empty set
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo2=bar")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service = d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 2)
+	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "bar")
+
+	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo2")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service = d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
+	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "")
+
+	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service = d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 0)
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "")
+
+	// now make sure we can add again
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
+	c.Assert(err, checker.IsNil, check.Commentf(out))
+	service = d.getService(c, "test")
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
+}