App config get endpoint.

This commit is contained in:
2026-01-04 23:53:49 +00:00
parent 640ee0ecd6
commit f3d51cdf6a
2 changed files with 44 additions and 0 deletions

View File

@@ -162,6 +162,7 @@ func (api *API) RegisterRoutes(r *mux.Router) {
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/deploy", api.AppsDeploy).Methods("POST")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/update", api.AppsUpdate).Methods("POST")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/eject", api.AppsEject).Methods("POST")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/config", api.AppsGetConfig).Methods("GET")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/config", api.AppsUpdateConfig).Methods("PATCH")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}", api.AppsDelete).Methods("DELETE")
r.HandleFunc("/api/v1/instances/{name}/apps/{app}/status", api.AppsGetStatus).Methods("GET")

View File

@@ -10,6 +10,7 @@ import (
"strings"
"github.com/gorilla/mux"
"gopkg.in/yaml.v3"
"github.com/wild-cloud/wild-central/daemon/internal/apps"
"github.com/wild-cloud/wild-central/daemon/internal/operations"
@@ -207,6 +208,48 @@ func (api *API) AppsEject(w http.ResponseWriter, r *http.Request) {
})
}
// AppsGetConfig returns current config values for an app instance
func (api *API) AppsGetConfig(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
instanceName := vars["name"]
appName := vars["app"]
// Validate instance exists
if err := api.instance.ValidateInstance(instanceName); err != nil {
respondError(w, http.StatusNotFound, fmt.Sprintf("Instance not found: %v", err))
return
}
// Load instance config
configPath := tools.GetInstanceConfigPath(api.dataDir, instanceName)
configData, err := os.ReadFile(configPath)
if err != nil {
respondError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to read instance config: %v", err))
return
}
var instanceConfig map[string]interface{}
if err := yaml.Unmarshal(configData, &instanceConfig); err != nil {
respondError(w, http.StatusInternalServerError, fmt.Sprintf("Failed to parse instance config: %v", err))
return
}
// Extract app config
var appConfig map[string]interface{}
if appsSection, ok := instanceConfig["apps"].(map[string]interface{}); ok {
if appConfigData, ok := appsSection[appName].(map[string]interface{}); ok {
appConfig = appConfigData
}
}
if appConfig == nil {
respondError(w, http.StatusNotFound, fmt.Sprintf("Config not found for app: %s", appName))
return
}
respondJSON(w, http.StatusOK, appConfig)
}
// AppsUpdateConfig updates an app's configuration
func (api *API) AppsUpdateConfig(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)