@@ -3,7 +3,6 @@ package service
33import (
44 "context"
55 "encoding/json"
6- "fmt"
76 "sync"
87
98 log "github.com/sirupsen/logrus"
@@ -25,7 +24,7 @@ const (
2524)
2625
2726type ACRService interface {
28- ChangeRevision (ctx context.Context , application * application.Application , useAnnotations bool ) error
27+ ChangeRevision (ctx context.Context , application * application.Application ) error
2928}
3029
3130type acrService struct {
@@ -63,7 +62,7 @@ func getChangeRevision(app *application.Application) string {
6362 return ""
6463}
6564
66- func (c * acrService ) ChangeRevision (ctx context.Context , a * application.Application , useAnnotations bool ) error {
65+ func (c * acrService ) ChangeRevision (ctx context.Context , a * application.Application ) error {
6766 c .lock .Lock ()
6867 defer c .lock .Unlock ()
6968
@@ -81,108 +80,36 @@ func (c *acrService) ChangeRevision(ctx context.Context, a *application.Applicat
8180 return nil
8281 }
8382
84- currentRevision , previousRevision := c .getRevisions (ctx , a )
85- if currentRevision == "" {
86- c .logger .Infof ("Got empty current revision for application %s, is it an unsupported multisource or helm repo based application?" , app .Name )
87- return nil
88- }
89- revision , err := c .calculateRevision (ctx , app , currentRevision , previousRevision )
83+ revision , err := c .calculateRevision (ctx , app )
9084 if err != nil {
9185 return err
9286 }
9387
94- var revisions []string
9588 if revision == nil || * revision == "" {
9689 c .logger .Infof ("Revision for application %s is empty" , app .Name )
97- } else {
98- c .logger .Infof ("Change revision for application %s is %s" , app .Name , * revision )
99- revisions = []string {* revision }
90+ return nil
10091 }
10192
93+ c .logger .Infof ("Change revision for application %s is %s" , app .Name , * revision )
94+
10295 app , err = c .applicationClientset .ArgoprojV1alpha1 ().Applications (app .Namespace ).Get (ctx , app .Name , metav1.GetOptions {})
10396 if err != nil {
10497 return err
10598 }
10699
107- patchMap := make (map [string ]any , 2 )
108-
109- if len (revisions ) > 0 {
110- if app .Status .OperationState != nil && app .Status .OperationState .Operation .Sync != nil {
111- c .logger .Infof ("Patch operation status for application %s" , app .Name )
112- patchMap = c .patchOperationSyncResultWithChangeRevision (revisions )
113- } else {
114- c .logger .Infof ("Patch operation for application %s" , app .Name )
115- patchMap = c .patchOperationWithChangeRevision (revisions )
116- }
117- }
118- if useAnnotations {
119- err = c .addAnnotationPatch (patchMap , app , * revision , revisions , currentRevision , []string {currentRevision })
120- if err != nil {
121- return err
122- }
123- }
124- if len (patchMap ) > 0 {
125- c .logger .Infof ("Patching resource: %v" , patchMap )
126- patch , err := json .Marshal (patchMap )
127- if err != nil {
128- return err
129- }
130- _ , err = c .applicationClientset .ArgoprojV1alpha1 ().Applications (a .Namespace ).Patch (ctx , a .Name , types .MergePatchType , patch , metav1.PatchOptions {})
131- return err
132- }
133- c .logger .Infof ("No patch needed" )
134- return nil
135- }
136-
137- func addPatchIfNeeded (annotations map [string ]string , currentAnnotations map [string ]string , key string , val string ) {
138- currentVal , ok := currentAnnotations [key ]
139- if ! ok || currentVal != val {
140- annotations [key ] = val
141- }
142- }
143-
144- func (c * acrService ) addAnnotationPatch (m map [string ]any ,
145- a * application.Application ,
146- changeRevision string ,
147- changeRevisions []string ,
148- gitRevision string ,
149- gitRevisions []string ,
150- ) error {
151- c .logger .Infof ("annotating application '%s', changeRevision=%s, changeRevisions=%v, gitRevision=%s, gitRevisions=%v" , a .Name , changeRevision , changeRevisions , gitRevision , gitRevisions )
152- annotations := map [string ]string {}
153- currentAnnotations := a .Annotations
100+ revisions := []string {* revision }
154101
155- if changeRevision != "" {
156- addPatchIfNeeded (annotations , currentAnnotations , CHANGE_REVISION_ANN , changeRevision )
157- }
158- if len (changeRevisions ) > 0 {
159- changeRevisionsJSON , err := json .Marshal (changeRevisions )
160- if err != nil {
161- return fmt .Errorf ("failed to marshall changeRevisions %v: %w" , changeRevisions , err )
162- }
163- addPatchIfNeeded (annotations , currentAnnotations , CHANGE_REVISIONS_ANN , string (changeRevisionsJSON ))
164- }
165- if gitRevision != "" {
166- addPatchIfNeeded (annotations , currentAnnotations , GIT_REVISION_ANN , gitRevision )
167- }
168- if len (gitRevisions ) > 0 {
169- gitRevisionsJSON , err := json .Marshal (gitRevisions )
170- if err != nil {
171- return fmt .Errorf ("failed to marshall gitRevisions %v: %w" , gitRevisions , err )
172- }
173- addPatchIfNeeded (annotations , currentAnnotations , GIT_REVISIONS_ANN , string (gitRevisionsJSON ))
102+ if app .Status .OperationState != nil && app .Status .OperationState .Operation .Sync != nil {
103+ c .logger .Infof ("Patch operation status for application %s" , app .Name )
104+ return c .patchOperationSyncResultWithChangeRevision (ctx , app , revisions )
174105 }
175106
176- if len (annotations ) == 0 {
177- c .logger .Info ("no need to add annotations" )
178- } else {
179- c .logger .Infof ("added annotations to application %s patch: %v" , a .Name , annotations )
180- m ["metadata" ] = map [string ]any {"annotations" : annotations }
181- }
182- return nil
107+ c .logger .Infof ("Patch operation for application %s" , app .Name )
108+ return c .patchOperationWithChangeRevision (ctx , app , revisions )
183109}
184110
185- func (c * acrService ) calculateRevision (ctx context.Context , a * application.Application , currentRevision string , previousRevision string ) (* string , error ) {
111+ func (c * acrService ) calculateRevision (ctx context.Context , a * application.Application ) (* string , error ) {
112+ currentRevision , previousRevision := c .getRevisions (ctx , a )
186113 c .logger .Infof ("Calculate revision for application '%s', current revision '%s', previous revision '%s'" , a .Name , currentRevision , previousRevision )
187114 changeRevisionResult , err := c .applicationServiceClient .GetChangeRevision (ctx , & appclient.ChangeRevisionRequest {
188115 AppName : ptr .To (a .GetName ()),
@@ -196,28 +123,33 @@ func (c *acrService) calculateRevision(ctx context.Context, a *application.Appli
196123 return changeRevisionResult .Revision , nil
197124}
198125
199- func (c * acrService ) patchOperationWithChangeRevision (revisions []string ) map [ string ] any {
126+ func (c * acrService ) patchOperationWithChangeRevision (ctx context. Context , a * application. Application , revisions []string ) error {
200127 if len (revisions ) == 1 {
201- return map [string ]any {
128+ patch , _ := json . Marshal ( map [string ]any {
202129 "operation" : map [string ]any {
203130 "sync" : map [string ]any {
204131 "changeRevision" : revisions [0 ],
205132 },
206133 },
207- }
134+ })
135+ _ , err := c .applicationClientset .ArgoprojV1alpha1 ().Applications (a .Namespace ).Patch (ctx , a .Name , types .MergePatchType , patch , metav1.PatchOptions {})
136+ return err
208137 }
209- return map [string ]any {
138+
139+ patch , _ := json .Marshal (map [string ]any {
210140 "operation" : map [string ]any {
211141 "sync" : map [string ]any {
212142 "changeRevisions" : revisions ,
213143 },
214144 },
215- }
145+ })
146+ _ , err := c .applicationClientset .ArgoprojV1alpha1 ().Applications (a .Namespace ).Patch (ctx , a .Name , types .MergePatchType , patch , metav1.PatchOptions {})
147+ return err
216148}
217149
218- func (c * acrService ) patchOperationSyncResultWithChangeRevision (revisions []string ) map [ string ] any {
150+ func (c * acrService ) patchOperationSyncResultWithChangeRevision (ctx context. Context , a * application. Application , revisions []string ) error {
219151 if len (revisions ) == 1 {
220- return map [string ]any {
152+ patch , _ := json . Marshal ( map [string ]any {
221153 "status" : map [string ]any {
222154 "operationState" : map [string ]any {
223155 "operation" : map [string ]any {
@@ -227,9 +159,12 @@ func (c *acrService) patchOperationSyncResultWithChangeRevision(revisions []stri
227159 },
228160 },
229161 },
230- }
162+ })
163+ _ , err := c .applicationClientset .ArgoprojV1alpha1 ().Applications (a .Namespace ).Patch (ctx , a .Name , types .MergePatchType , patch , metav1.PatchOptions {})
164+ return err
231165 }
232- return map [string ]any {
166+
167+ patch , _ := json .Marshal (map [string ]any {
233168 "status" : map [string ]any {
234169 "operationState" : map [string ]any {
235170 "operation" : map [string ]any {
@@ -239,7 +174,9 @@ func (c *acrService) patchOperationSyncResultWithChangeRevision(revisions []stri
239174 },
240175 },
241176 },
242- }
177+ })
178+ _ , err := c .applicationClientset .ArgoprojV1alpha1 ().Applications (a .Namespace ).Patch (ctx , a .Name , types .MergePatchType , patch , metav1.PatchOptions {})
179+ return err
243180}
244181
245182func getCurrentRevisionFromOperation (a * application.Application ) string {
0 commit comments