From 802228adbca9e642d6f8f7a8220874668ac97694 Mon Sep 17 00:00:00 2001 From: Andrey Pokhilko Date: Tue, 4 Jul 2023 14:04:05 +0100 Subject: [PATCH] Fix issue with object getting failure (#15) * Fix issue with object getting failure * Cosmetics * Build image in PR --- .github/workflows/build.yml | 2 +- pkg/backend/controller.go | 43 +++++++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef54f76..a4dd9a9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,7 +79,7 @@ jobs: - name: Build and push uses: docker/build-push-action@v4 - if: github.event_name != 'pull_request' + # if: github.event_name != 'pull_request' with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/pkg/backend/controller.go b/pkg/backend/controller.go index b320806..34c84e8 100644 --- a/pkg/backend/controller.go +++ b/pkg/backend/controller.go @@ -48,10 +48,24 @@ type ConditionedObject interface { resource.Conditioned } -type ManagedUnstructured struct { // no dedicated type for it in base CP +type ManagedUnstructured struct { // no dedicated type for it in base CP, just resource.Managed interface uxres.Unstructured } +func NewManagedUnstructured() *ManagedUnstructured { + res := ManagedUnstructured{ + Unstructured: *uxres.New(), + } + + res.Object["spec"] = map[string]interface{}{ + "providerConfigRef": map[string]interface{}{ + "name": "", + }, + } + + return &res +} + func (m *ManagedUnstructured) GetProviderConfigReference() *xpv1.Reference { // TODO: find a way to organize code better // TODO: check field existence @@ -234,8 +248,8 @@ func (c *Controller) GetClaim(ec echo.Context) error { claimRef := v12.ObjectReference{Namespace: ec.Param("namespace"), Name: ec.Param("name")} claimRef.SetGroupVersionKind(gvk) - claim := uclaim.Unstructured{} - err := c.getDynamicResource(&claimRef, &claim) + claim := uclaim.New() + err := c.getDynamicResource(&claimRef, claim) if err != nil { return err } @@ -249,10 +263,10 @@ func (c *Controller) GetClaim(ec echo.Context) error { MRs := []*ManagedUnstructured{} for _, mrRef := range xr.GetResourceReferences() { - mr := ManagedUnstructured{} - _ = c.getDynamicResource(&mrRef, &mr) + mr := NewManagedUnstructured() + _ = c.getDynamicResource(&mrRef, mr) - MRs = append(MRs, &mr) + MRs = append(MRs, mr) } claim.Object["managedResources"] = MRs @@ -296,6 +310,13 @@ func (c *Controller) getDynamicResource(ref *v12.ObjectReference, res Conditione res.SetNamespace(ref.Namespace) res.SetName(ref.Name) + // we need to guarantee for frontend that "metadata" is in structure + if r, ok := res.(*uxres.Unstructured); ok { + if _, ok := r.Object["metadata"]; !ok { + r.Object["metadata"] = map[string]interface{}{} + } + } + return err } @@ -346,8 +367,8 @@ func (c *Controller) GetManaged(ec echo.Context) error { ref := v12.ObjectReference{Name: ec.Param("name")} ref.SetGroupVersionKind(gvk) - xr := ManagedUnstructured{} - err := c.getDynamicResource(&ref, &xr) + xr := NewManagedUnstructured() + err := c.getDynamicResource(&ref, xr) if err != nil { return err } @@ -493,10 +514,10 @@ func (c *Controller) GetComposite(ec echo.Context) error { // MR refs MRs := []*ManagedUnstructured{} for _, mrRef := range xr.GetResourceReferences() { - mr := ManagedUnstructured{} - _ = c.getDynamicResource(&mrRef, &mr) + mr := NewManagedUnstructured() + _ = c.getDynamicResource(&mrRef, mr) - MRs = append(MRs, &mr) + MRs = append(MRs, mr) } xr.Object["managedResources"] = MRs }