@@ -19,6 +19,7 @@ const (
1919 actionInstall = helmAction ("Install" )
2020 actionUpgrade = helmAction ("Upgrade" )
2121 actionUninstall = helmAction ("Uninstall" )
22+ actionNoChange = helmAction ("NoChange" )
2223)
2324
2425type 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+
104112func 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
121129func 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+ }
0 commit comments