Skip to content

Commit 39da54b

Browse files
authored
chore(v2): extensions refactor (#1803)
1 parent dd8ec05 commit 39da54b

File tree

2 files changed

+41
-22
lines changed

2 files changed

+41
-22
lines changed

pkg/extensions/upgrade.go

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const (
1919
actionInstall = helmAction("Install")
2020
actionUpgrade = helmAction("Upgrade")
2121
actionUninstall = helmAction("Uninstall")
22+
actionNoChange = helmAction("NoChange")
2223
)
2324

2425
type helmAction string
@@ -60,9 +61,13 @@ func Upgrade(ctx context.Context, kcli client.Client, hcli helm.Client, prev *ec
6061
return errors.Wrapf(err, "install extension %s", result.Ext.Name)
6162
}
6263
case actionUpgrade:
63-
if err := handleExtensionUpgrade(ctx, kcli, hcli, in, result.Ext, result.NeedsUpgrade); err != nil {
64+
if err := handleExtensionUpgrade(ctx, kcli, hcli, in, result.Ext); err != nil {
6465
return errors.Wrapf(err, "upgrade extension %s", result.Ext.Name)
6566
}
67+
case actionNoChange:
68+
if err := handleExtensionNoop(ctx, kcli, in, result.Ext); err != nil {
69+
return errors.Wrapf(err, "noop extension %s", result.Ext.Name)
70+
}
6671
case actionUninstall:
6772
continue
6873
}
@@ -78,7 +83,7 @@ func handleExtensionInstall(ctx context.Context, kcli client.Client, hcli helm.C
7883
return errors.Wrap(err, "check if release exists")
7984
}
8085
if exists {
81-
slog.Info(fmt.Sprintf("Extension %s already installed", ext.Name))
86+
slog.Info("Extension already installed", "name", ext.Name)
8287
return nil
8388
}
8489
if err := install(ctx, hcli, ext); err != nil {
@@ -88,27 +93,30 @@ func handleExtensionInstall(ctx context.Context, kcli client.Client, hcli helm.C
8893
})
8994
}
9095

91-
func handleExtensionUpgrade(ctx context.Context, kcli client.Client, hcli helm.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart, needsUpgrade bool) (finalErr error) {
96+
func handleExtensionUpgrade(ctx context.Context, kcli client.Client, hcli helm.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart) (finalErr error) {
9297
return handleExtension(ctx, kcli, in, ext, actionUpgrade, func() error {
93-
if !needsUpgrade {
94-
slog.Info(fmt.Sprintf("%s already up to date", ext.Name))
95-
return nil
96-
}
9798
if err := upgrade(ctx, hcli, ext); err != nil {
9899
return errors.Wrap(err, "upgrade")
99100
}
100101
return nil
101102
})
102103
}
103104

105+
func handleExtensionNoop(ctx context.Context, kcli client.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart) error {
106+
return handleExtension(ctx, kcli, in, ext, actionUpgrade, func() error {
107+
slog.Info("Extension is up to date", "name", ext.Name)
108+
return nil
109+
})
110+
}
111+
104112
func handleExtensionUninstall(ctx context.Context, kcli client.Client, hcli helm.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart) (finalErr error) {
105113
return handleExtension(ctx, kcli, in, ext, actionUninstall, func() error {
106114
exists, err := hcli.ReleaseExists(ctx, ext.TargetNS, ext.Name)
107115
if err != nil {
108116
return errors.Wrap(err, "check if release exists")
109117
}
110118
if !exists {
111-
slog.Info(fmt.Sprintf("Extension %s already uninstalled", ext.Name))
119+
slog.Info("Extension already uninstalled", "name", ext.Name)
112120
return nil
113121
}
114122
if err := uninstall(ctx, hcli, ext); err != nil {
@@ -119,39 +127,46 @@ func handleExtensionUninstall(ctx context.Context, kcli client.Client, hcli helm
119127
}
120128

121129
func handleExtension(ctx context.Context, kcli client.Client, in *ecv1beta1.Installation, ext ecv1beta1.Chart, action helmAction, processFn func() error) (finalErr error) {
130+
slogArgs := slogArgs(ext, action)
131+
122132
processed, err := extensionAlreadyProcessed(ctx, kcli, in, ext)
123133
if err != nil {
124134
return errors.Wrap(err, "check if extension is already processed")
125135
} else if processed {
126-
slog.Info(fmt.Sprintf("Extension %s already processed!", ext.Name))
136+
slog.Info("Extension already processed!", slogArgs...)
127137
return nil
128138
}
129139

130-
actionIng, _ := formatAction(action)
131-
132-
slog.Info(fmt.Sprintf("%s extension %s", actionIng, ext.Name))
140+
slog.Info("Extension processing", slogArgs...)
133141

134-
err = markExtensionAsProcessing(ctx, kcli, in, ext, action)
135-
if err != nil {
136-
return errors.Wrap(err, "mark extension as processing")
142+
if action != actionNoChange {
143+
err = markExtensionAsProcessing(ctx, kcli, in, ext, action)
144+
if err != nil {
145+
return errors.Wrap(err, "mark extension as processing")
146+
}
137147
}
138148

139149
defer func() {
140150
if r := recover(); r != nil {
151+
actionIng, _ := formatAction(action)
141152
finalErr = fmt.Errorf("%s %s recovered from panic: %v: %s", actionIng, ext.Name, r, string(debug.Stack()))
142153
}
143154

144155
err := markExtensionProcessed(ctx, kcli, in, ext, action, finalErr)
145156
if err != nil {
146-
slog.Error("Failed to mark extension as processed", "error", err)
157+
if finalErr == nil {
158+
finalErr = errors.Wrap(err, "mark extension as processed")
159+
} else {
160+
slog.Error("Failed to mark extension as processed", append(slogArgs, "error", err)...)
161+
}
147162
}
148163
}()
149164

150165
if err := processFn(); err != nil {
151166
return errors.Wrap(err, "process extension")
152167
}
153168

154-
slog.Info(fmt.Sprintf("Extension %s is ready!", ext.Name))
169+
slog.Info("Extension is ready!", slogArgs...)
155170

156171
return nil
157172
}
@@ -211,3 +226,7 @@ func setCondition(ctx context.Context, kcli client.Client, in *ecv1beta1.Install
211226
Message: message,
212227
})
213228
}
229+
230+
func slogArgs(ext ecv1beta1.Chart, action helmAction) []any {
231+
return []any{"name", ext.Name, "action", action}
232+
}

pkg/extensions/util.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,8 @@ func uninstall(ctx context.Context, hcli helm.Client, ext ecv1beta1.Chart) error
100100
}
101101

102102
type diffResult struct {
103-
Action helmAction
104-
Ext ecv1beta1.Chart
105-
NeedsUpgrade bool
103+
Action helmAction
104+
Ext ecv1beta1.Chart
106105
}
107106

108107
func diffExtensions(oldExts, newExts ecv1beta1.Extensions) []diffResult {
@@ -130,9 +129,10 @@ func diffExtensions(oldExts, newExts ecv1beta1.Extensions) []diffResult {
130129
if !ok {
131130
// chart was added.
132131
r.Action = actionInstall
133-
} else {
132+
} else if !reflect.DeepEqual(oldChart, newChart) {
134133
r.Action = actionUpgrade
135-
r.NeedsUpgrade = !reflect.DeepEqual(oldChart, newChart)
134+
} else {
135+
r.Action = actionNoChange
136136
}
137137
results = append(results, r)
138138
}

0 commit comments

Comments
 (0)