...

Source file src/sigs.k8s.io/cli-utils/pkg/apply/taskrunner/context.go

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

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package taskrunner
     5  
     6  import (
     7  	"k8s.io/klog/v2"
     8  	"sigs.k8s.io/cli-utils/pkg/apply/cache"
     9  	"sigs.k8s.io/cli-utils/pkg/apply/event"
    10  	"sigs.k8s.io/cli-utils/pkg/inventory"
    11  	"sigs.k8s.io/cli-utils/pkg/object"
    12  	"sigs.k8s.io/cli-utils/pkg/object/graph"
    13  )
    14  
    15  // NewTaskContext returns a new TaskContext
    16  func NewTaskContext(eventChannel chan event.Event, resourceCache cache.ResourceCache) *TaskContext {
    17  	return &TaskContext{
    18  		taskChannel:      make(chan TaskResult),
    19  		eventChannel:     eventChannel,
    20  		resourceCache:    resourceCache,
    21  		inventoryManager: inventory.NewManager(),
    22  		abandonedObjects: make(map[object.ObjMetadata]struct{}),
    23  		invalidObjects:   make(map[object.ObjMetadata]struct{}),
    24  		graph:            graph.New(),
    25  	}
    26  }
    27  
    28  // TaskContext defines a context that is passed between all
    29  // the tasks that is in a taskqueue.
    30  type TaskContext struct {
    31  	taskChannel      chan TaskResult
    32  	eventChannel     chan event.Event
    33  	resourceCache    cache.ResourceCache
    34  	inventoryManager *inventory.Manager
    35  	abandonedObjects map[object.ObjMetadata]struct{}
    36  	invalidObjects   map[object.ObjMetadata]struct{}
    37  	graph            *graph.Graph
    38  }
    39  
    40  func (tc *TaskContext) TaskChannel() chan TaskResult {
    41  	return tc.taskChannel
    42  }
    43  
    44  func (tc *TaskContext) EventChannel() chan event.Event {
    45  	return tc.eventChannel
    46  }
    47  
    48  func (tc *TaskContext) ResourceCache() cache.ResourceCache {
    49  	return tc.resourceCache
    50  }
    51  
    52  func (tc *TaskContext) InventoryManager() *inventory.Manager {
    53  	return tc.inventoryManager
    54  }
    55  
    56  func (tc *TaskContext) Graph() *graph.Graph {
    57  	return tc.graph
    58  }
    59  
    60  func (tc *TaskContext) SetGraph(g *graph.Graph) {
    61  	tc.graph = g
    62  }
    63  
    64  // SendEvent sends an event on the event channel
    65  func (tc *TaskContext) SendEvent(e event.Event) {
    66  	klog.V(3).Infof("Sending event: %v", e)
    67  	tc.eventChannel <- e
    68  }
    69  
    70  // IsAbandonedObject returns true if the object is abandoned
    71  func (tc *TaskContext) IsAbandonedObject(id object.ObjMetadata) bool {
    72  	_, found := tc.abandonedObjects[id]
    73  	return found
    74  }
    75  
    76  // AddAbandonedObject registers that the object is abandoned
    77  func (tc *TaskContext) AddAbandonedObject(id object.ObjMetadata) {
    78  	tc.abandonedObjects[id] = struct{}{}
    79  }
    80  
    81  // AbandonedObjects returns all the abandoned objects
    82  func (tc *TaskContext) AbandonedObjects() object.ObjMetadataSet {
    83  	return object.ObjMetadataSetFromMap(tc.abandonedObjects)
    84  }
    85  
    86  // IsInvalidObject returns true if the object is abandoned
    87  func (tc *TaskContext) IsInvalidObject(id object.ObjMetadata) bool {
    88  	_, found := tc.invalidObjects[id]
    89  	return found
    90  }
    91  
    92  // AddInvalidObject registers that the object is abandoned
    93  func (tc *TaskContext) AddInvalidObject(id object.ObjMetadata) {
    94  	tc.invalidObjects[id] = struct{}{}
    95  }
    96  
    97  // InvalidObjects returns all the abandoned objects
    98  func (tc *TaskContext) InvalidObjects() object.ObjMetadataSet {
    99  	return object.ObjMetadataSetFromMap(tc.invalidObjects)
   100  }
   101  

View as plain text