Don't fail on single resource status error

Relates to #301
This commit is contained in:
Andrei Pohilko
2023-03-24 17:39:29 +00:00
parent 8826124f70
commit 80022c3ef8
3 changed files with 13 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
v1 "k8s.io/apimachinery/pkg/apis/testapigroup/v1"
"net/http"
"sort"
"strconv"
@@ -149,10 +150,10 @@ func (h *HelmHandler) Resources(c *gin.Context) {
}
info, err := app.K8s.GetResourceInfo(obj.Kind, ns, obj.Name)
if err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, err)
return
log.Warnf("Failed to get resource info for %s %s/%s: %+v", obj.Name, ns, obj.Name, err)
info = &v1.Carp{}
}
obj.Status = *EnhanceStatus(info)
obj.Status = *EnhanceStatus(info, err)
}
}

View File

@@ -56,12 +56,12 @@ func (h *KubeHandler) GetResourceInfo(c *gin.Context) {
return
}
EnhanceStatus(res)
EnhanceStatus(res, nil)
c.IndentedJSON(http.StatusOK, res)
}
func EnhanceStatus(res *v12.Carp) *v12.CarpStatus {
func EnhanceStatus(res *v12.Carp, err error) *v12.CarpStatus {
s := res.Status
if s.Conditions == nil {
s.Conditions = []v12.CarpCondition{}
@@ -75,7 +75,10 @@ func EnhanceStatus(res *v12.Carp) *v12.CarpStatus {
}
// custom logic to provide most meaningful status for the resource
if s.Phase == "Error" {
if err != nil {
c.Reason = "ErrorGettingStatus"
c.Message = err.Error()
} else if s.Phase == "Error" {
c.Status = Unhealthy
} else if slices.Contains([]string{"Available", "Active", "Established", "Bound", "Ready"}, string(s.Phase)) {
c.Status = Healthy