func exportAll(fileName string) error { exportedData := &ExportData{MajorVersion: ExportMajorVersion, MinorVersion: ExportMinorVersion, CreatedTime: time.Now()} exportedData.Data = make(map[string][]interface{}) // ... and march through everything. exportedData.Data["client"] = client.ExportAllClients() exportedData.Data["cookbook"] = exportTransformSlice(cookbook.AllCookbooks()) exportedData.Data["databag"] = exportTransformSlice(databag.AllDataBags()) exportedData.Data["environment"] = exportTransformSlice(environment.AllEnvironments()) exportedData.Data["filestore"] = exportTransformSlice(filestore.AllFilestores()) exportedData.Data["loginfo"] = exportTransformSlice(loginfo.AllLogInfos()) exportedData.Data["node"] = exportTransformSlice(node.AllNodes()) exportedData.Data["report"] = exportTransformSlice(report.AllReports()) exportedData.Data["role"] = exportTransformSlice(role.AllRoles()) exportedData.Data["sandbox"] = exportTransformSlice(sandbox.AllSandboxes()) exportedData.Data["user"] = user.ExportAllUsers() fp, err := os.Create(fileName) if err != nil { return err } enc := json.NewEncoder(fp) if err = enc.Encode(&exportedData); err != nil { return err } return nil }
func reindexAll() { reindexObjs := make([]indexer.Indexable, 0, 100) // We clear the index, *then* do the fetch because if // something comes in between the time we fetch the // objects to reindex and when it gets done, they'll // just be added naturally indexer.ClearIndex() for _, v := range client.AllClients() { reindexObjs = append(reindexObjs, v) } for _, v := range node.AllNodes() { reindexObjs = append(reindexObjs, v) } for _, v := range role.AllRoles() { reindexObjs = append(reindexObjs, v) } for _, v := range environment.AllEnvironments() { reindexObjs = append(reindexObjs, v) } defaultEnv, _ := environment.Get("_default") reindexObjs = append(reindexObjs, defaultEnv) // data bags have to be done separately dbags := databag.GetList() for _, db := range dbags { dbag, err := databag.Get(db) if err != nil { continue } dbis := make([]indexer.Indexable, dbag.NumDBItems()) i := 0 allDBItems, derr := dbag.AllDBItems() if derr != nil { logger.Errorf(derr.Error()) continue } for _, k := range allDBItems { n := k dbis[i] = n i++ } reindexObjs = append(reindexObjs, dbis...) } indexer.ReIndex(reindexObjs) return }
func reindexHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") reindexResponse := make(map[string]interface{}) opUser, oerr := actor.GetReqUser(r.Header.Get("X-OPS-USERID")) if oerr != nil { jsonErrorReport(w, r, oerr.Error(), oerr.Status()) return } switch r.Method { case "POST": if !opUser.IsAdmin() { jsonErrorReport(w, r, "You are not allowed to perform that action.", http.StatusForbidden) return } reindexObjs := make([]indexer.Indexable, 0, 100) // We clear the index, *then* do the fetch because if // something comes in between the time we fetch the // objects to reindex and when it gets done, they'll // just be added naturally indexer.ClearIndex() for _, v := range client.AllClients() { reindexObjs = append(reindexObjs, v) } for _, v := range node.AllNodes() { reindexObjs = append(reindexObjs, v) } for _, v := range role.AllRoles() { reindexObjs = append(reindexObjs, v) } for _, v := range environment.AllEnvironments() { reindexObjs = append(reindexObjs, v) } defaultEnv, _ := environment.Get("_default") reindexObjs = append(reindexObjs, defaultEnv) // data bags have to be done separately dbags := databag.GetList() for _, db := range dbags { dbag, err := databag.Get(db) if err != nil { continue } dbis := make([]indexer.Indexable, dbag.NumDBItems()) i := 0 allDBItems, derr := dbag.AllDBItems() if derr != nil { logger.Errorf(derr.Error()) continue } for _, k := range allDBItems { n := k dbis[i] = n i++ } reindexObjs = append(reindexObjs, dbis...) } indexer.ReIndex(reindexObjs) reindexResponse["reindex"] = "OK" default: jsonErrorReport(w, r, "Method not allowed. If you're trying to do something with a data bag named 'reindex', it's not going to work I'm afraid.", http.StatusMethodNotAllowed) return } enc := json.NewEncoder(w) if err := enc.Encode(&reindexResponse); err != nil { jsonErrorReport(w, r, err.Error(), http.StatusInternalServerError) } }