// Copyright 2022 The KubeSphere Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package utils import ( "sort" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // 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 }