Skip to content

Commit 172dd7b

Browse files
committed
fix(controller): always keep CachedImage IsCached status updated
1 parent 7285f02 commit 172dd7b

3 files changed

Lines changed: 43 additions & 23 deletions

File tree

controllers/cachedimage_controller.go

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -197,26 +197,34 @@ func (r *CachedImageReconciler) Reconcile(ctx context.Context, req ctrl.Request)
197197
}
198198

199199
// Removing forceUpdate annotation
200-
forceUpdate := cachedImage.Annotations[cachedImageAnnotationForceUpdateName]
200+
forceUpdate := cachedImage.Annotations[cachedImageAnnotationForceUpdateName] == "true"
201201
patch := client.MergeFrom(cachedImage.DeepCopy())
202-
if forceUpdate == "true" {
202+
if forceUpdate {
203203
delete(cachedImage.Annotations, cachedImageAnnotationForceUpdateName)
204204
}
205205
err = r.Patch(context.Background(), &cachedImage, patch)
206206
if err != nil {
207207
return ctrl.Result{}, err
208208
}
209209

210+
isCached, err := registry.ImageIsCached(cachedImage.Spec.SourceImage)
211+
if err != nil {
212+
return ctrl.Result{}, err
213+
}
214+
215+
err = updateStatusRaw(r.Client, &cachedImage, func(status *kuikv1alpha1.CachedImageStatus) {
216+
cachedImage.Status.IsCached = isCached
217+
})
218+
if err != nil {
219+
return ctrl.Result{}, err
220+
}
221+
210222
// Adding image to registry
211-
isCached := false
212-
if forceUpdate != "true" {
213-
isCached, err = registry.ImageIsCached(cachedImage.Spec.SourceImage)
214-
if err != nil {
215-
log.Error(err, "could not determine if the image present in cache")
216-
return ctrl.Result{}, err
217-
}
223+
putImageInCache := true
224+
if isCached && !forceUpdate {
225+
putImageInCache = false
218226
}
219-
if !isCached {
227+
if putImageInCache {
220228
r.Recorder.Eventf(&cachedImage, "Normal", "Caching", "Start caching image %s", cachedImage.Spec.SourceImage)
221229
err = r.cacheImage(&cachedImage)
222230
if err != nil {
@@ -261,21 +269,25 @@ func (r *CachedImageReconciler) Reconcile(ctx context.Context, req ctrl.Request)
261269
}
262270

263271
func updateStatus(c client.Client, cachedImage *kuikv1alpha1.CachedImage, upstreamDescriptor *remote.Descriptor, update func(*kuikv1alpha1.CachedImageStatus)) error {
264-
patch := client.MergeFrom(cachedImage.DeepCopy())
265-
266-
cachedImage.Status.AvailableUpstream = upstreamDescriptor != nil
267-
cachedImage.Status.LastSync = metav1.NewTime(time.Now())
272+
return updateStatusRaw(c, cachedImage, func(status *kuikv1alpha1.CachedImageStatus) {
273+
cachedImage.Status.AvailableUpstream = upstreamDescriptor != nil
274+
cachedImage.Status.LastSync = metav1.NewTime(time.Now())
268275

269-
update(&cachedImage.Status)
276+
update(&cachedImage.Status)
270277

271-
if upstreamDescriptor != nil {
272-
cachedImage.Status.UpstreamDigest = upstreamDescriptor.Digest.Hex
273-
cachedImage.Status.UpToDate = cachedImage.Status.Digest == upstreamDescriptor.Digest.Hex
274-
} else {
275-
cachedImage.Status.UpstreamDigest = ""
276-
cachedImage.Status.UpToDate = false
277-
}
278+
if upstreamDescriptor != nil {
279+
cachedImage.Status.UpstreamDigest = upstreamDescriptor.Digest.Hex
280+
cachedImage.Status.UpToDate = cachedImage.Status.Digest == upstreamDescriptor.Digest.Hex
281+
} else {
282+
cachedImage.Status.UpstreamDigest = ""
283+
cachedImage.Status.UpToDate = false
284+
}
285+
})
286+
}
278287

288+
func updateStatusRaw(c client.Client, cachedImage *kuikv1alpha1.CachedImage, update func(*kuikv1alpha1.CachedImageStatus)) error {
289+
patch := client.MergeFrom(cachedImage.DeepCopy())
290+
update(&cachedImage.Status)
279291
return c.Status().Patch(context.Background(), cachedImage, patch)
280292
}
281293

internal/registry/registry.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ func ImageIsCached(imageName string) (bool, error) {
9494
return false, err
9595
}
9696

97-
return imageExists(reference)
97+
exists, err := imageExists(reference)
98+
if err != nil {
99+
err = fmt.Errorf("could not determine if the image present in cache: %w", err)
100+
}
101+
return exists, err
98102
}
99103

100104
func DeleteImage(imageName string) error {

internal/registry/registry_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ func Test_ImageIsCached(t *testing.T) {
145145
Endpoint = server.Addr()
146146
isCached, err := ImageIsCached(tt.image)
147147
if tt.wantErr != "" {
148+
err2 := errors.Unwrap(err)
149+
if err2 != nil {
150+
err = err2
151+
}
148152
g.Expect(err).To(BeAssignableToTypeOf(tt.errType))
149153
g.Expect(err).To(MatchError(ContainSubstring(tt.wantErr)))
150154
} else {

0 commit comments

Comments
 (0)