mirror of https://github.com/fluxcd/cli-utils.git
				
				
				
			
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
// Copyright 2020 The Kubernetes Authors.
 | 
						|
// SPDX-License-Identifier: Apache-2.0
 | 
						|
 | 
						|
package task
 | 
						|
 | 
						|
import (
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
	"k8s.io/klog/v2"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/apply/event"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/apply/filter"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/apply/prune"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/apply/taskrunner"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/common"
 | 
						|
	"sigs.k8s.io/cli-utils/pkg/object"
 | 
						|
)
 | 
						|
 | 
						|
// PruneTask prunes objects from the cluster
 | 
						|
// by using the PruneOptions. The provided Objects is the
 | 
						|
// set of resources that have just been applied.
 | 
						|
type PruneTask struct {
 | 
						|
	TaskName string
 | 
						|
 | 
						|
	Pruner            *prune.Pruner
 | 
						|
	Objects           object.UnstructuredSet
 | 
						|
	Filters           []filter.ValidationFilter
 | 
						|
	DryRunStrategy    common.DryRunStrategy
 | 
						|
	PropagationPolicy metav1.DeletionPropagation
 | 
						|
	// True if we are destroying, which deletes the inventory object
 | 
						|
	// as well (possibly) the inventory namespace.
 | 
						|
	Destroy bool
 | 
						|
}
 | 
						|
 | 
						|
func (p *PruneTask) Name() string {
 | 
						|
	return p.TaskName
 | 
						|
}
 | 
						|
 | 
						|
func (p *PruneTask) Action() event.ResourceAction {
 | 
						|
	action := event.PruneAction
 | 
						|
	if p.Destroy {
 | 
						|
		action = event.DeleteAction
 | 
						|
	}
 | 
						|
	return action
 | 
						|
}
 | 
						|
 | 
						|
func (p *PruneTask) Identifiers() object.ObjMetadataSet {
 | 
						|
	return object.UnstructuredSetToObjMetadataSet(p.Objects)
 | 
						|
}
 | 
						|
 | 
						|
// Start creates a new goroutine that will invoke
 | 
						|
// the Run function on the PruneOptions to update
 | 
						|
// the cluster. It will push a TaskResult on the taskChannel
 | 
						|
// to signal to the taskrunner that the task has completed (or failed).
 | 
						|
func (p *PruneTask) Start(taskContext *taskrunner.TaskContext) {
 | 
						|
	go func() {
 | 
						|
		klog.V(2).Infof("prune task starting (name: %q, objects: %d)",
 | 
						|
			p.Name(), len(p.Objects))
 | 
						|
		// Create filter to prevent deletion of currently applied
 | 
						|
		// objects. Must be done here to wait for applied UIDs.
 | 
						|
		uidFilter := filter.CurrentUIDFilter{
 | 
						|
			CurrentUIDs: taskContext.InventoryManager().AppliedResourceUIDs(),
 | 
						|
		}
 | 
						|
		p.Filters = append(p.Filters, uidFilter)
 | 
						|
		err := p.Pruner.Prune(
 | 
						|
			p.Objects,
 | 
						|
			p.Filters,
 | 
						|
			taskContext,
 | 
						|
			p.Name(),
 | 
						|
			prune.Options{
 | 
						|
				DryRunStrategy:    p.DryRunStrategy,
 | 
						|
				PropagationPolicy: p.PropagationPolicy,
 | 
						|
				Destroy:           p.Destroy,
 | 
						|
			},
 | 
						|
		)
 | 
						|
		klog.V(2).Infof("prune task completing (name: %q)", p.Name())
 | 
						|
		taskContext.TaskChannel() <- taskrunner.TaskResult{
 | 
						|
			Err: err,
 | 
						|
		}
 | 
						|
	}()
 | 
						|
}
 | 
						|
 | 
						|
// Cancel is not supported by the PruneTask.
 | 
						|
func (p *PruneTask) Cancel(_ *taskrunner.TaskContext) {}
 | 
						|
 | 
						|
// StatusUpdate is not supported by the PruneTask.
 | 
						|
func (p *PruneTask) StatusUpdate(_ *taskrunner.TaskContext, _ object.ObjMetadata) {}
 |