From cfc192a2b58c33583223a54fad896c40360a953d Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Wed, 26 Jun 2024 12:53:57 +0300 Subject: [PATCH] more utils --- pkg/apimachinery/utils/meta.go | 18 ++++++++++++++++++ pkg/apimachinery/utils/meta_test.go | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/apimachinery/utils/meta.go b/pkg/apimachinery/utils/meta.go index a994ec83b04..b6ba87a902b 100644 --- a/pkg/apimachinery/utils/meta.go +++ b/pkg/apimachinery/utils/meta.go @@ -58,6 +58,7 @@ type GrafanaMetaAccessor interface { metav1.Object GetGroupVersionKind() schema.GroupVersionKind + GetRuntimeObject() (runtime.Object, bool) // Helper to get resource versions as int64, however this is not required // See: https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions @@ -90,6 +91,8 @@ type GrafanaMetaAccessor interface { GetOriginHash() string GetOriginTimestamp() (*time.Time, error) + GetSpec() (any, error) + // Find a title in the object // This will reflect the object and try to get: // * spec.title @@ -133,6 +136,11 @@ func (m *grafanaMetaAccessor) GetResourceVersionInt64() (int64, error) { return strconv.ParseInt(v, 10, 64) } +func (m *grafanaMetaAccessor) GetRuntimeObject() (runtime.Object, bool) { + obj, ok := m.raw.(runtime.Object) + return obj, ok +} + func (m *grafanaMetaAccessor) SetResourceVersionInt64(rv int64) { m.obj.SetResourceVersion(strconv.FormatInt(rv, 10)) } @@ -486,6 +494,16 @@ func (m *grafanaMetaAccessor) GetGroupVersionKind() schema.GroupVersionKind { return gvk } +func (m *grafanaMetaAccessor) GetSpec() (spec any, err error) { + defer func() { + if r := recover(); r != nil { + err = fmt.Errorf("error reading spec") + } + }() + spec = m.r.FieldByName("Spec").Interface() + return +} + func (m *grafanaMetaAccessor) FindTitle(defaultTitle string) string { // look for Spec.Title or Spec.Name spec := m.r.FieldByName("Spec") diff --git a/pkg/apimachinery/utils/meta_test.go b/pkg/apimachinery/utils/meta_test.go index 3a7965595f0..b769c2a2866 100644 --- a/pkg/apimachinery/utils/meta_test.go +++ b/pkg/apimachinery/utils/meta_test.go @@ -228,5 +228,13 @@ func TestMetaAccessor(t *testing.T) { }, obj2.GetAnnotations()) require.Equal(t, "xxx", meta.FindTitle("xxx")) + + rt, ok := meta.GetRuntimeObject() + require.Equal(t, obj2, rt) + require.True(t, ok) + + spec, err := meta.GetSpec() + require.Equal(t, obj2.Spec, spec) + require.NoError(t, err) }) }