Files
k8sgpt/pkg/analyzer/catalogsource.go

54 lines
1.4 KiB
Go

package analyzer
import (
"fmt"
"strings"
"github.com/k8sgpt-ai/k8sgpt/pkg/common"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
)
type CatalogSourceAnalyzer struct{}
var catSrcGVR = schema.GroupVersionResource{
Group: "operators.coreos.com",
Version: "v1alpha1",
Resource: "catalogsources",
}
func (CatalogSourceAnalyzer) Analyze(a common.Analyzer) ([]common.Result, error) {
kind := "CatalogSource"
if a.Client.GetDynamicClient() == nil {
return nil, fmt.Errorf("dynamic client is nil in %s analyzer", kind)
}
list, err := a.Client.GetDynamicClient().
Resource(catSrcGVR).Namespace(metav1.NamespaceAll).
List(a.Context, metav1.ListOptions{})
if err != nil {
return nil, err
}
var results []common.Result
for _, item := range list.Items {
ns, name := item.GetNamespace(), item.GetName()
state, _, _ := unstructured.NestedString(item.Object, "status", "connectionState", "lastObservedState")
addr, _, _ := unstructured.NestedString(item.Object, "status", "connectionState", "address")
// Only report if state is present and not READY
if state != "" && strings.ToUpper(state) != "READY" {
results = append(results, common.Result{
Kind: kind,
Name: ns + "/" + name,
Error: []common.Failure{{
Text: fmt.Sprintf("connectionState=%s (address=%s)", state, addr),
}},
})
}
}
return results, nil
}