diff --git a/go.mod b/go.mod index b43f06a5e..246cc1397 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.10.0 + github.com/unrolled/render v1.7.0 github.com/urfave/cli/v2 v2.27.1 golang.org/x/net v0.35.0 golang.org/x/term v0.29.0 diff --git a/go.sum b/go.sum index 097b56147..6453add6e 100644 --- a/go.sum +++ b/go.sum @@ -139,6 +139,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/unrolled/render v1.7.0 h1:1yke01/tZiZpiXfUG+zqB+6fq3G4I+KDmnh0EhPq7So= +github.com/unrolled/render v1.7.0/go.mod h1:LwQSeDhjml8NLjIO9GJO1/1qpFJxtfVIpzxXKjfVkoI= github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= diff --git a/pkg/scheduler/routes/route.go b/pkg/scheduler/routes/route.go index c3c7251ed..0c8ccabdf 100644 --- a/pkg/scheduler/routes/route.go +++ b/pkg/scheduler/routes/route.go @@ -19,11 +19,11 @@ package routes import ( "bytes" "encoding/json" - "fmt" "io" "net/http" "github.com/julienschmidt/httprouter" + "github.com/unrolled/render" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" extenderv1 "k8s.io/kube-scheduler/extender/v1" @@ -65,15 +65,12 @@ func PredicateRoute(s *scheduler.Scheduler) httprouter.Handle { } } - if resultBody, err := json.Marshal(extenderFilterResult); err != nil { - klog.ErrorS(err, "Failed to marshal extender filter result", "result", extenderFilterResult) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(err.Error())) - } else { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - w.Write(resultBody) + klog.V(5).InfoS("Returning predicate response", "result", extenderFilterResult) + + err := render.New(render.Options{IndentJSON: true}).JSON(w, http.StatusOK, extenderFilterResult) + if err != nil { + klog.ErrorS(err, "Failed to write JSON response") + return } } } @@ -101,17 +98,12 @@ func Bind(s *scheduler.Scheduler) httprouter.Handle { } } - if response, err := json.Marshal(extenderBindingResult); err != nil { - klog.ErrorS(err, "Failed to marshal binding result", "result", extenderBindingResult) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusInternalServerError) - errMsg := fmt.Sprintf("{'error':'%s'}", err.Error()) - w.Write([]byte(errMsg)) - } else { - klog.V(5).InfoS("Returning bind response", "result", extenderBindingResult) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - w.Write(response) + klog.V(5).InfoS("Returning bind response", "result", extenderBindingResult) + + err := render.New(render.Options{IndentJSON: true}).JSON(w, http.StatusOK, extenderBindingResult) + if err != nil { + klog.ErrorS(err, "Failed to write JSON response") + return } } }