@@ -88,23 +88,27 @@ func (h *CleanupHandler) Cleanup(ctx context.Context, cr *provisioningv1alpha1.D
8888 return fmt .Errorf ("getting IPAddressPool: %w" , err )
8989 }
9090 } else {
91- // Resource still exists, initiate deletion
92- log .Info ("Deleting IPAddressPool" ,
93- "name" , pool .Name ,
94- "namespace" , pool .Namespace )
95-
96- if err := h .client .Delete (ctx , pool ); err != nil {
97- if ! apierrors .IsNotFound (err ) {
98- // Deletion failed with non-NotFound error
99- log .Error (err , "Failed to delete IPAddressPool" )
100- return fmt .Errorf ("deleting IPAddressPool: %w" , err )
91+ // Verify ownership via labels before deleting
92+ if ! common .IsOwnedByProvisioner (pool .Labels , cr .Name , cr .Namespace ) {
93+ log .Info ("Skipping IPAddressPool deletion - not owned by this DPFHCPProvisioner" ,
94+ "name" , pool .Name ,
95+ "namespace" , pool .Namespace )
96+ } else {
97+ // Resource still exists and is owned by us, initiate deletion
98+ log .Info ("Deleting IPAddressPool" ,
99+ "name" , pool .Name ,
100+ "namespace" , pool .Namespace )
101+
102+ if err := h .client .Delete (ctx , pool ); err != nil {
103+ if ! apierrors .IsNotFound (err ) {
104+ log .Error (err , "Failed to delete IPAddressPool" )
105+ return fmt .Errorf ("deleting IPAddressPool: %w" , err )
106+ }
101107 }
102- // Resource was deleted between GET and DELETE (race condition - this is OK)
103- }
104108
105- // Resource deletion initiated, wait for it to complete
106- log . V ( 1 ). Info ( "Waiting for IPAddressPool deletion to complete " )
107- return fmt . Errorf ( "waiting for IPAddressPool deletion" )
109+ log . V ( 1 ). Info ( "Waiting for IPAddressPool deletion to complete" )
110+ return fmt . Errorf ( "waiting for IPAddressPool deletion" )
111+ }
108112 }
109113
110114 // Step 2: Delete L2Advertisement
@@ -115,32 +119,33 @@ func (h *CleanupHandler) Cleanup(ctx context.Context, cr *provisioningv1alpha1.D
115119 }, advert )
116120
117121 if err != nil {
118- // Check if resource was already deleted (NotFound is success)
119122 if apierrors .IsNotFound (err ) {
120123 log .V (1 ).Info ("L2Advertisement already deleted or never existed" )
121124 } else {
122- // Unexpected error (permission denied, network issue, etc.)
123125 log .Error (err , "Failed to get L2Advertisement" )
124126 return fmt .Errorf ("getting L2Advertisement: %w" , err )
125127 }
126128 } else {
127- // Resource still exists, initiate deletion
128- log .Info ("Deleting L2Advertisement" ,
129- "name" , advert .Name ,
130- "namespace" , advert .Namespace )
131-
132- if err := h .client .Delete (ctx , advert ); err != nil {
133- if ! apierrors .IsNotFound (err ) {
134- // Deletion failed with non-NotFound error
135- log .Error (err , "Failed to delete L2Advertisement" )
136- return fmt .Errorf ("deleting L2Advertisement: %w" , err )
129+ // Verify ownership via labels before deleting
130+ if ! common .IsOwnedByProvisioner (advert .Labels , cr .Name , cr .Namespace ) {
131+ log .Info ("Skipping L2Advertisement deletion - not owned by this DPFHCPProvisioner" ,
132+ "name" , advert .Name ,
133+ "namespace" , advert .Namespace )
134+ } else {
135+ log .Info ("Deleting L2Advertisement" ,
136+ "name" , advert .Name ,
137+ "namespace" , advert .Namespace )
138+
139+ if err := h .client .Delete (ctx , advert ); err != nil {
140+ if ! apierrors .IsNotFound (err ) {
141+ log .Error (err , "Failed to delete L2Advertisement" )
142+ return fmt .Errorf ("deleting L2Advertisement: %w" , err )
143+ }
137144 }
138- // Resource was deleted between GET and DELETE (race condition - this is OK)
139- }
140145
141- // Resource deletion initiated, wait for it to complete
142- log . V ( 1 ). Info ( "Waiting for L2Advertisement deletion to complete " )
143- return fmt . Errorf ( "waiting for L2Advertisement deletion" )
146+ log . V ( 1 ). Info ( "Waiting for L2Advertisement deletion to complete" )
147+ return fmt . Errorf ( "waiting for L2Advertisement deletion" )
148+ }
144149 }
145150
146151 // All resources cleaned up successfully
0 commit comments