mirror of
https://github.com/rancher/steve.git
synced 2025-07-02 17:52:13 +00:00
* Add more fields to index when sql-caching is on. Misc changes: - Use the builtin Event class, not events.k8s.io (by looking at the dashboard client code) - Specify full path to the management.cattle.io fields. - Map `Event.type` to `Event._type` for indexing. Use a compound transform-func to first check for a "signal", and then to run all the relevant transformers until either one fails or the list is exhausted. - Includes moving the fakeSummaryCache type into a common area. Use a simpler way of running transforms. * Inline the function to get the gvk key. * Create a '--sql-cache' flag to turn on caching for the steve CLI. * Improve error-handling in object transformer. * Drop the 'GetTransform' function. * Inline the code that transforms a payload into a k8s-unstructured object.
56 lines
1.7 KiB
Go
56 lines
1.7 KiB
Go
// Package virtual provides functions/resources to define virtual fields (fields which don't exist in k8s
|
|
// but should be visible in the API) on resources
|
|
package virtual
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/rancher/steve/pkg/resources/virtual/common"
|
|
"github.com/rancher/steve/pkg/resources/virtual/events"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/client-go/tools/cache"
|
|
)
|
|
|
|
// TransformBuilder builds transform functions for specified GVKs through GetTransformFunc
|
|
type TransformBuilder struct {
|
|
defaultFields *common.DefaultFields
|
|
}
|
|
|
|
// NewTransformBuilder returns a TransformBuilder using the given summary cache
|
|
func NewTransformBuilder(cache common.SummaryCache) *TransformBuilder {
|
|
return &TransformBuilder{
|
|
defaultFields: &common.DefaultFields{
|
|
Cache: cache,
|
|
},
|
|
}
|
|
}
|
|
|
|
// GetTransformFunc returns the func to transform a raw object into a fixed object, if needed
|
|
func (t *TransformBuilder) GetTransformFunc(gvk schema.GroupVersionKind) cache.TransformFunc {
|
|
converters := make([]func(*unstructured.Unstructured) (*unstructured.Unstructured, error), 0)
|
|
if gvk.Kind == "Event" && gvk.Group == "" && gvk.Version == "v1" {
|
|
converters = append(converters, events.TransformEventObject)
|
|
}
|
|
converters = append(converters, t.defaultFields.TransformCommon)
|
|
|
|
return func(raw interface{}) (interface{}, error) {
|
|
obj, isSignal, err := common.GetUnstructured(raw)
|
|
if isSignal {
|
|
// isSignal= true overrides any error
|
|
return raw, err
|
|
}
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetUnstructured: failed to get underlying object: %w", err)
|
|
}
|
|
// Conversions are run in this loop:
|
|
for _, f := range converters {
|
|
obj, err = f(obj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return obj, nil
|
|
}
|
|
}
|