...

Source file src/sigs.k8s.io/cli-utils/pkg/apply/filter/prevent-remove-filter.go

Documentation: sigs.k8s.io/cli-utils/pkg/apply/filter

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package filter
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    10  	"sigs.k8s.io/cli-utils/pkg/common"
    11  )
    12  
    13  // PreventRemoveFilter implements ValidationFilter interface to determine
    14  // if an object should not be pruned (deleted) because of a
    15  // "prevent remove" annotation.
    16  type PreventRemoveFilter struct{}
    17  
    18  const PreventRemoveFilterName = "PreventRemoveFilter"
    19  
    20  // Name returns the preferred name for the filter. Usually
    21  // used for logging.
    22  func (prf PreventRemoveFilter) Name() string {
    23  	return PreventRemoveFilterName
    24  }
    25  
    26  // Filter returns a AnnotationPreventedDeletionError if the object prune/delete
    27  // should be skipped.
    28  func (prf PreventRemoveFilter) Filter(obj *unstructured.Unstructured) error {
    29  	for annotation, value := range obj.GetAnnotations() {
    30  		if common.NoDeletion(annotation, value) {
    31  			return &AnnotationPreventedDeletionError{
    32  				Annotation: annotation,
    33  				Value:      value,
    34  			}
    35  		}
    36  	}
    37  	return nil
    38  }
    39  
    40  type AnnotationPreventedDeletionError struct {
    41  	Annotation string
    42  	Value      string
    43  }
    44  
    45  func (e *AnnotationPreventedDeletionError) Error() string {
    46  	return fmt.Sprintf("annotation prevents deletion (%q: %q)", e.Annotation, e.Value)
    47  }
    48  
    49  func (e *AnnotationPreventedDeletionError) Is(err error) bool {
    50  	if err == nil {
    51  		return false
    52  	}
    53  	tErr, ok := err.(*AnnotationPreventedDeletionError)
    54  	if !ok {
    55  		return false
    56  	}
    57  	return e.Annotation == tErr.Annotation &&
    58  		e.Value == tErr.Value
    59  }
    60  

View as plain text