func bsEnvSetHandler(w http.ResponseWriter, r *http.Request, t auth.Token) error { var requestConfig bs.Config err := json.NewDecoder(r.Body).Decode(&requestConfig) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: fmt.Sprintf("unable to parse body as json: %s", err), } } if len(requestConfig.Envs) > 0 && !permission.Check(t, permission.PermNodeBs) { return permission.ErrUnauthorized } for _, poolEnv := range requestConfig.Pools { hasPermission := permission.Check(t, permission.PermNodeBs, permission.Context(permission.CtxPool, poolEnv.Name)) if !hasPermission { return permission.ErrUnauthorized } } currentConfig, err := bs.LoadConfig(nil) if err != nil { if err != mgo.ErrNotFound { return err } currentConfig = &bs.Config{} } envMap := bs.EnvMap{} poolEnvMap := bs.PoolEnvMap{} err = currentConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = requestConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = bs.SaveEnvs(envMap, poolEnvMap) if err != nil { return err } keepAliveWriter := tsuruIo.NewKeepAliveWriter(w, 15*time.Second, "") defer keepAliveWriter.Stop() writer := &tsuruIo.SimpleJsonMessageEncoderWriter{Encoder: json.NewEncoder(keepAliveWriter)} err = bs.RecreateContainers(mainDockerProvisioner, writer) if err != nil { writer.Encode(tsuruIo.SimpleJsonMessage{Error: err.Error()}) } return nil }
func bsEnvSetHandler(w http.ResponseWriter, r *http.Request, t auth.Token) error { var requestConfig bs.Config err := json.NewDecoder(r.Body).Decode(&requestConfig) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: fmt.Sprintf("unable to parse body as json: %s", err), } } currentConfig, err := bs.LoadConfig() if err != nil { if err != mgo.ErrNotFound { return err } currentConfig = &bs.Config{} } envMap := bs.EnvMap{} poolEnvMap := bs.PoolEnvMap{} err = currentConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = requestConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = bs.SaveEnvs(envMap, poolEnvMap) if err != nil { return err } keepAliveWriter := tsuruIo.NewKeepAliveWriter(w, 15*time.Second, "") defer keepAliveWriter.Stop() writer := &tsuruIo.SimpleJsonMessageEncoderWriter{Encoder: json.NewEncoder(keepAliveWriter)} err = bs.RecreateContainers(mainDockerProvisioner, writer) if err != nil { writer.Encode(tsuruIo.SimpleJsonMessage{Error: err.Error()}) } return nil }
func bsEnvSetHandler(w http.ResponseWriter, r *http.Request, t auth.Token) error { var requestConfig bs.Config err := json.NewDecoder(r.Body).Decode(&requestConfig) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: fmt.Sprintf("unable to parse body as json: %s", err), } } currentConfig, err := bs.LoadConfig() if err != nil { if err != mgo.ErrNotFound { return err } currentConfig = &bs.Config{} } envMap := bs.EnvMap{} poolEnvMap := bs.PoolEnvMap{} err = currentConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = requestConfig.UpdateEnvMaps(envMap, poolEnvMap) if err != nil { return &errors.HTTP{ Code: http.StatusBadRequest, Message: err.Error(), } } err = bs.SaveEnvs(envMap, poolEnvMap) if err != nil { return err } err = bs.RecreateContainers(mainDockerProvisioner) if err != nil { return err } w.WriteHeader(http.StatusNoContent) return nil }