@@ -172,13 +172,8 @@ type MutateFn func() error
172
172
173
173
// AddFinalizer accepts a metav1 object and adds the provided finalizer if not present.
174
174
func AddFinalizer (o metav1.Object , finalizer string ) {
175
- finalizers := o .GetFinalizers ()
176
- for _ , f := range finalizers {
177
- if f == finalizer {
178
- return
179
- }
180
- }
181
- o .SetFinalizers (append (finalizers , finalizer ))
175
+ newFinalizers := AddString (o .GetFinalizers (), finalizer )
176
+ o .SetFinalizers (append (newFinalizers , finalizer ))
182
177
}
183
178
184
179
// AddFinalizerIfPossible tries to convert a runtime object to a metav1 object and add the provided finalizer.
@@ -194,16 +189,8 @@ func AddFinalizerIfPossible(o runtime.Object, finalizer string) error {
194
189
195
190
// RemoveFinalizer accepts a metav1 object and removes the provided finalizer if present.
196
191
func RemoveFinalizer (o metav1.Object , finalizer string ) {
197
- finalizers := o .GetFinalizers ()
198
- n := 0
199
- for _ , f := range finalizers {
200
- if f != finalizer {
201
- finalizers [n ] = f
202
- n ++
203
- }
204
- }
205
- finalizers = finalizers [:n ]
206
- o .SetFinalizers (finalizers )
192
+ newFinalizers := RemoveString (o .GetFinalizers (), finalizer )
193
+ o .SetFinalizers (newFinalizers )
207
194
}
208
195
209
196
// RemoveFinalizerIfPossible tries to convert a runtime object to a metav1 object and remove the provided finalizer.
@@ -216,3 +203,27 @@ func RemoveFinalizerIfPossible(o runtime.Object, finalizer string) error {
216
203
RemoveFinalizer (m , finalizer )
217
204
return nil
218
205
}
206
+
207
+ // AddString returns a []string with s appended if it is not already found in the provided slice.
208
+ func AddString (slice []string , s string ) []string {
209
+ newSlice := make ([]string , 0 )
210
+ for i , item := range slice {
211
+ if item == s {
212
+ return append (newSlice , slice [i + 1 :]... )
213
+ }
214
+ newSlice = append (newSlice , item )
215
+ }
216
+ return append (slice , s )
217
+ }
218
+
219
+ // RemoveString returns a newly created []string that contains all items from slice that are not equal to s.
220
+ func RemoveString (slice []string , s string ) []string {
221
+ newSlice := make ([]string , 0 )
222
+ for _ , item := range slice {
223
+ if item == s {
224
+ continue
225
+ }
226
+ newSlice = append (newSlice , item )
227
+ }
228
+ return newSlice
229
+ }
0 commit comments