mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-06 10:43:56 +00:00
meta.EachListItem should support runtime.Unstructured
Allows callers to iterate over that construct.
This commit is contained in:
parent
17e19dfce6
commit
3662184786
@ -67,6 +67,9 @@ func GetItemsPtr(list runtime.Object) (interface{}, error) {
|
|||||||
// EachListItem invokes fn on each runtime.Object in the list. Any error immediately terminates
|
// EachListItem invokes fn on each runtime.Object in the list. Any error immediately terminates
|
||||||
// the loop.
|
// the loop.
|
||||||
func EachListItem(obj runtime.Object, fn func(runtime.Object) error) error {
|
func EachListItem(obj runtime.Object, fn func(runtime.Object) error) error {
|
||||||
|
if unstructured, ok := obj.(runtime.Unstructured); ok {
|
||||||
|
return unstructured.EachListItem(fn)
|
||||||
|
}
|
||||||
// TODO: Change to an interface call?
|
// TODO: Change to an interface call?
|
||||||
itemsPtr, err := GetItemsPtr(obj)
|
itemsPtr, err := GetItemsPtr(obj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -69,6 +69,39 @@ func (obj *Unstructured) IsList() bool {
|
|||||||
}
|
}
|
||||||
func (obj *UnstructuredList) IsList() bool { return true }
|
func (obj *UnstructuredList) IsList() bool { return true }
|
||||||
|
|
||||||
|
func (obj *Unstructured) EachListItem(fn func(runtime.Object) error) error {
|
||||||
|
if obj.Object == nil {
|
||||||
|
return fmt.Errorf("content is not a list")
|
||||||
|
}
|
||||||
|
field, ok := obj.Object["items"]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("content is not a list")
|
||||||
|
}
|
||||||
|
items, ok := field.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, item := range items {
|
||||||
|
child, ok := item.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("items member is not an object")
|
||||||
|
}
|
||||||
|
if err := fn(&Unstructured{Object: child}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (obj *UnstructuredList) EachListItem(fn func(runtime.Object) error) error {
|
||||||
|
for i := range obj.Items {
|
||||||
|
if err := fn(&obj.Items[i]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (obj *Unstructured) UnstructuredContent() map[string]interface{} {
|
func (obj *Unstructured) UnstructuredContent() map[string]interface{} {
|
||||||
if obj.Object == nil {
|
if obj.Object == nil {
|
||||||
obj.Object = make(map[string]interface{})
|
obj.Object = make(map[string]interface{})
|
||||||
|
@ -242,10 +242,14 @@ type Unstructured interface {
|
|||||||
// IsUnstructuredObject is a marker interface to allow objects that can be serialized but not introspected
|
// IsUnstructuredObject is a marker interface to allow objects that can be serialized but not introspected
|
||||||
// to bypass conversion.
|
// to bypass conversion.
|
||||||
IsUnstructuredObject()
|
IsUnstructuredObject()
|
||||||
// IsList returns true if this type is a list or matches the list convention - has an array called "items".
|
|
||||||
IsList() bool
|
|
||||||
// UnstructuredContent returns a non-nil, mutable map of the contents of this object. Values may be
|
// UnstructuredContent returns a non-nil, mutable map of the contents of this object. Values may be
|
||||||
// []interface{}, map[string]interface{}, or any primitive type. Contents are typically serialized to
|
// []interface{}, map[string]interface{}, or any primitive type. Contents are typically serialized to
|
||||||
// and from JSON.
|
// and from JSON.
|
||||||
UnstructuredContent() map[string]interface{}
|
UnstructuredContent() map[string]interface{}
|
||||||
|
// IsList returns true if this type is a list or matches the list convention - has an array called "items".
|
||||||
|
IsList() bool
|
||||||
|
// EachListItem should pass a single item out of the list as an Object to the provided function. Any
|
||||||
|
// error should terminate the iteration. If IsList() returns false, this method should return an error
|
||||||
|
// instead of calling the provided function.
|
||||||
|
EachListItem(func(Object) error) error
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user