func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { var swarm types.Spec if err := json.NewDecoder(r.Body).Decode(&swarm); err != nil { return err } rawVersion := r.URL.Query().Get("version") version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { return fmt.Errorf("Invalid swarm version '%s': %s", rawVersion, err.Error()) } var flags types.UpdateFlags if value := r.URL.Query().Get("rotateWorkerToken"); value != "" { rot, err := strconv.ParseBool(value) if err != nil { return fmt.Errorf("invalid value for rotateWorkerToken: %s", value) } flags.RotateWorkerToken = rot } if value := r.URL.Query().Get("rotateManagerToken"); value != "" { rot, err := strconv.ParseBool(value) if err != nil { return fmt.Errorf("invalid value for rotateManagerToken: %s", value) } flags.RotateManagerToken = rot } if value := r.URL.Query().Get("rotateManagerUnlockKey"); value != "" { rot, err := strconv.ParseBool(value) if err != nil { return fmt.Errorf("invalid value for rotateManagerUnlockKey: %s", value) } flags.RotateManagerUnlockKey = rot } if err := sr.backend.Update(version, swarm, flags); err != nil { logrus.Errorf("Error configuring swarm: %v", err) return err } return nil }