@@ -74,6 +74,19 @@ var volumetypeDependency = dependency.NewDeletionGuardDependency[*orcv1alpha1.Vo
7474 finalizer , externalObjectFieldOwner ,
7575)
7676
77+ // No deletion guard for image, because images can be safely deleted while
78+ // referenced by a volume
79+ var imageDependency = dependency .NewDependency [* orcv1alpha1.VolumeList , * orcv1alpha1.Image ](
80+ "spec.resource.imageRef" ,
81+ func (volume * orcv1alpha1.Volume ) []string {
82+ resource := volume .Spec .Resource
83+ if resource == nil || resource .ImageRef == nil {
84+ return nil
85+ }
86+ return []string {string (* resource .ImageRef )}
87+ },
88+ )
89+
7790// serverToVolumeMapFunc creates a mapping function that reconciles volumes when:
7891// - a volume ID appears in server status but the volume doesn't have attachment info for that server
7992// - a volume has attachment info for a server, but the server no longer lists that volume
@@ -209,18 +222,27 @@ func (c volumeReconcilerConstructor) SetupWithManager(ctx context.Context, mgr c
209222 return err
210223 }
211224
225+ imageWatchEventHandler , err := imageDependency .WatchEventHandler (log , k8sClient )
226+ if err != nil {
227+ return err
228+ }
229+
212230 builder := ctrl .NewControllerManagedBy (mgr ).
213231 WithOptions (options ).
214232 Watches (& orcv1alpha1.VolumeType {}, volumetypeWatchEventHandler ,
215233 builder .WithPredicates (predicates .NewBecameAvailable (log , & orcv1alpha1.VolumeType {})),
216234 ).
235+ Watches (& orcv1alpha1.Image {}, imageWatchEventHandler ,
236+ builder .WithPredicates (predicates .NewBecameAvailable (log , & orcv1alpha1.Image {})),
237+ ).
217238 Watches (& orcv1alpha1.Server {}, handler .EnqueueRequestsFromMapFunc (serverToVolumeMapFunc (ctx , k8sClient )),
218239 builder .WithPredicates (predicates .NewServerVolumesChanged (log )),
219240 ).
220241 For (& orcv1alpha1.Volume {})
221242
222243 if err := errors .Join (
223244 volumetypeDependency .AddToManager (ctx , mgr ),
245+ imageDependency .AddToManager (ctx , mgr ),
224246 credentialsDependency .AddToManager (ctx , mgr ),
225247 credentials .AddCredentialsWatch (log , mgr .GetClient (), builder , credentialsDependency ),
226248 ); err != nil {
0 commit comments