package utils import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sort" ) // IsDeletionCandidate checks if object is candidate to be deleted func IsDeletionCandidate(obj metav1.Object, finalizer string) bool { return obj.GetDeletionTimestamp() != nil && ContainsString(obj.GetFinalizers(), finalizer, nil) } // NeedToAddFinalizer checks if need to add finalizer to object func NeedToAddFinalizer(obj metav1.Object, finalizer string) bool { return obj.GetDeletionTimestamp() == nil && !ContainsString(obj.GetFinalizers(), finalizer, nil) } // CopyStrings copies the contents of the specified string slice // into a new slice. func CopyStrings(s []string) []string { if s == nil { return nil } c := make([]string, len(s)) copy(c, s) return c } // SortStrings sorts the specified string slice in place. It returns the same // slice that was provided in order to facilitate method chaining. func SortStrings(s []string) []string { sort.Strings(s) return s } // ContainsString checks if a given slice of strings contains the provided string. // If a modifier func is provided, it is called with the slice item before the comparation. func ContainsString(slice []string, s string, modifier func(s string) string) bool { for _, item := range slice { if item == s { return true } if modifier != nil && modifier(item) == s { return true } } return false } // RemoveString returns a newly created []string that contains all items from slice that // are not equal to s and modifier(s) in case modifier func is provided. func RemoveString(slice []string, s string, modifier func(s string) string) []string { newSlice := make([]string, 0) for _, item := range slice { if item == s { continue } if modifier != nil && modifier(item) == s { continue } newSlice = append(newSlice, item) } if len(newSlice) == 0 { // Sanitize for unit tests so we don't need to distinguish empty array // and nil. newSlice = nil } return newSlice }