...

Source file src/sigs.k8s.io/cli-utils/pkg/apply/prune/event-factory.go

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

     1  // Copyright 2021 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  //
     4  
     5  package prune
     6  
     7  import (
     8  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
     9  	"sigs.k8s.io/cli-utils/pkg/apply/event"
    10  	"sigs.k8s.io/cli-utils/pkg/object"
    11  )
    12  
    13  // EventFactory is an abstract interface describing functions to generate
    14  // events for pruning or deleting.
    15  type EventFactory interface {
    16  	CreateSuccessEvent(obj *unstructured.Unstructured) event.Event
    17  	CreateSkippedEvent(obj *unstructured.Unstructured, err error) event.Event
    18  	CreateFailedEvent(id object.ObjMetadata, err error) event.Event
    19  }
    20  
    21  // CreateEventFactory returns the correct concrete version of
    22  // an EventFactory based on the passed boolean.
    23  func CreateEventFactory(isDelete bool, groupName string) EventFactory {
    24  	if isDelete {
    25  		return DeleteEventFactory{
    26  			groupName: groupName,
    27  		}
    28  	}
    29  	return PruneEventFactory{
    30  		groupName: groupName,
    31  	}
    32  }
    33  
    34  // PruneEventFactory implements EventFactory interface as a concrete
    35  // representation of for prune events.
    36  //
    37  //nolint:revive // stuttering ok because Prune is a type of PruneEvent
    38  type PruneEventFactory struct {
    39  	groupName string
    40  }
    41  
    42  func (pef PruneEventFactory) CreateSuccessEvent(obj *unstructured.Unstructured) event.Event {
    43  	return event.Event{
    44  		Type: event.PruneType,
    45  		PruneEvent: event.PruneEvent{
    46  			GroupName:  pef.groupName,
    47  			Status:     event.PruneSuccessful,
    48  			Object:     obj,
    49  			Identifier: object.UnstructuredToObjMetadata(obj),
    50  		},
    51  	}
    52  }
    53  
    54  func (pef PruneEventFactory) CreateSkippedEvent(obj *unstructured.Unstructured, err error) event.Event {
    55  	return event.Event{
    56  		Type: event.PruneType,
    57  		PruneEvent: event.PruneEvent{
    58  			GroupName:  pef.groupName,
    59  			Status:     event.PruneSkipped,
    60  			Object:     obj,
    61  			Identifier: object.UnstructuredToObjMetadata(obj),
    62  			Error:      err,
    63  		},
    64  	}
    65  }
    66  
    67  func (pef PruneEventFactory) CreateFailedEvent(id object.ObjMetadata, err error) event.Event {
    68  	return event.Event{
    69  		Type: event.PruneType,
    70  		PruneEvent: event.PruneEvent{
    71  			GroupName:  pef.groupName,
    72  			Status:     event.PruneFailed,
    73  			Identifier: id,
    74  			Error:      err,
    75  		},
    76  	}
    77  }
    78  
    79  // DeleteEventFactory implements EventFactory interface as a concrete
    80  // representation of for delete events.
    81  type DeleteEventFactory struct {
    82  	groupName string
    83  }
    84  
    85  func (def DeleteEventFactory) CreateSuccessEvent(obj *unstructured.Unstructured) event.Event {
    86  	return event.Event{
    87  		Type: event.DeleteType,
    88  		DeleteEvent: event.DeleteEvent{
    89  			GroupName:  def.groupName,
    90  			Status:     event.DeleteSuccessful,
    91  			Object:     obj,
    92  			Identifier: object.UnstructuredToObjMetadata(obj),
    93  		},
    94  	}
    95  }
    96  
    97  func (def DeleteEventFactory) CreateSkippedEvent(obj *unstructured.Unstructured, err error) event.Event {
    98  	return event.Event{
    99  		Type: event.DeleteType,
   100  		DeleteEvent: event.DeleteEvent{
   101  			GroupName:  def.groupName,
   102  			Status:     event.DeleteSkipped,
   103  			Object:     obj,
   104  			Identifier: object.UnstructuredToObjMetadata(obj),
   105  			Error:      err,
   106  		},
   107  	}
   108  }
   109  
   110  func (def DeleteEventFactory) CreateFailedEvent(id object.ObjMetadata, err error) event.Event {
   111  	return event.Event{
   112  		Type: event.DeleteType,
   113  		DeleteEvent: event.DeleteEvent{
   114  			GroupName:  def.groupName,
   115  			Status:     event.DeleteFailed,
   116  			Identifier: id,
   117  			Error:      err,
   118  		},
   119  	}
   120  }
   121  

View as plain text