mirror of
https://github.com/rancher/steve.git
synced 2025-09-12 21:39:30 +00:00
[v2.9] Virtual Resource filters (#288)
Adds logic which adds virtual fields resources. This allows these fields to be sorted/filtered on when the SQL cache is enabled. Id and metadata.state.name were added as the first two fields. Co-authored-by: Michael Bolot <michael.bolot@suse.com>
This commit is contained in:
40
pkg/resources/virtual/common/util.go
Normal file
40
pkg/resources/virtual/common/util.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
)
|
||||
|
||||
// GetUnstructured retrieves an unstructured object from the provided input. If this is a signal
|
||||
// object (like cache.DeletedFinalStateUnknown), returns true, indicating that this wasn't an
|
||||
// unstructured object, but doesn't need to be processed by our transform function
|
||||
func getUnstructured(obj any) (*unstructured.Unstructured, bool, error) {
|
||||
raw, ok := obj.(*unstructured.Unstructured)
|
||||
if !ok {
|
||||
_, isFinalUnknown := obj.(cache.DeletedFinalStateUnknown)
|
||||
if isFinalUnknown {
|
||||
// As documented in the TransformFunc interface
|
||||
return nil, true, nil
|
||||
}
|
||||
return nil, false, fmt.Errorf("object was of type %T, not unstructured", raw)
|
||||
}
|
||||
return raw, false, nil
|
||||
}
|
||||
|
||||
// toMap converts an object to a map[string]any which can be stored/retrieved from the cache. Currently
|
||||
// uses json encoding to take advantage of tag names
|
||||
func toMap(obj any) (map[string]any, error) {
|
||||
bytes, err := json.Marshal(obj)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to marshal object: %w", err)
|
||||
}
|
||||
var retObj map[string]any
|
||||
err = json.Unmarshal(bytes, &retObj)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to unmarshal object: %w", err)
|
||||
}
|
||||
return retObj, nil
|
||||
}
|
Reference in New Issue
Block a user