From 19e2b88695bbf7d69b116cfafe8f3e02184165fa Mon Sep 17 00:00:00 2001 From: Ruslan Aliev Date: Thu, 15 Aug 2024 18:03:00 -0500 Subject: [PATCH] Return list of installed/updated charts to shipyard Required for airflow upgrade. Change-Id: Icd7c0814755c2606181e3bec5f5c05ad1bda43a8 Signed-off-by: Ruslan Aliev --- pkg/apply/apply.go | 20 ++++++++++++++++++++ pkg/server/server.go | 9 ++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/apply/apply.go b/pkg/apply/apply.go index 044d4c8..bd62186 100644 --- a/pkg/apply/apply.go +++ b/pkg/apply/apply.go @@ -59,6 +59,8 @@ type RunCommand struct { Manifests string TargetManifest string Out io.Writer + Installed *[]string + Updated *[]string airManifest *AirshipManifest airGroups map[string]*AirshipChartGroup @@ -167,6 +169,8 @@ func (c *RunCommand) InstallChart( restConfig *rest.Config) error { log.Printf("installing chart %s %s %s", chart.GetName(), chart.Name, chart.Namespace) + updated := false + var prevGen int64 obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(chart) if err != nil { return err @@ -181,6 +185,7 @@ func (c *RunCommand) InstallChart( } log.Printf("chart has been successfully created %s", chart.Name) } else { + prevGen = oldObj.GetGeneration() uObj := &unstructured.Unstructured{Object: obj} uObj.SetResourceVersion(oldObj.GetResourceVersion()) log.Printf("chart %s was found, updating", chart.Name) @@ -194,6 +199,7 @@ func (c *RunCommand) InstallChart( return err } log.Printf("chart has been successfully updated %s", chart.Name) + updated = true } wOpts := armadawait.WaitOptions{ @@ -208,6 +214,20 @@ func (c *RunCommand) InstallChart( err = wOpts.Wait(context.Background()) log.Printf("finished with chart %s", chart.GetName()) + if !updated && c.Installed != nil { + *c.Installed = append(*c.Installed, chart.Name) + } else if updated && c.Updated != nil { + if updObj, err := resClient.Namespace(chart.Namespace).Get( + context.Background(), chart.GetName(), metav1.GetOptions{}); err != nil { + log.Printf("unable to get current generation of chart %s: %s", chart.Name, err.Error()) + } else { + newGen := updObj.GetGeneration() + // Chart actually has been updated + if newGen > prevGen { + *c.Updated = append(*c.Updated, chart.Name) + } + } + } return err } diff --git a/pkg/server/server.go b/pkg/server/server.go index b047203..f7380a5 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -77,7 +77,10 @@ func Apply(c *gin.Context) { return } - runOpts := apply.RunCommand{Manifests: dataReq.Href, TargetManifest: targetManifest, Out: os.Stdout} + installed := make([]string, 0) + updated := make([]string, 0) + runOpts := apply.RunCommand{Manifests: dataReq.Href, TargetManifest: targetManifest, Out: os.Stdout, + Installed: &installed, Updated: &updated} if err := runOpts.RunE(); err != nil { c.String(500, "apply error", err.Error()) return @@ -85,8 +88,8 @@ func Apply(c *gin.Context) { c.JSON(200, gin.H{ "message": gin.H{ - "install": []any{}, - "upgrade": []any{}, + "install": installed, + "upgrade": updated, "diff": []any{}, "purge": []any{}, "protected": []any{},