mirror of https://github.com/hashicorp/consul
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hashicorp/consul/agent/consul/controller/queue"
|
|
)
|
|
|
|
// CustomDependencyMapper is called when an Event occurs to determine which of the
|
|
// controller's managed resources need to be reconciled.
|
|
type CustomDependencyMapper func(
|
|
ctx context.Context,
|
|
rt Runtime,
|
|
event Event,
|
|
) ([]Request, error)
|
|
|
|
// Watch is responsible for watching for custom events from source and adding them to
|
|
// the event queue.
|
|
func (s *Source) Watch(ctx context.Context, add func(e Event)) error {
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
return nil
|
|
case evt, ok := <-s.Source:
|
|
if !ok {
|
|
return nil
|
|
}
|
|
add(evt)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Source is used as a generic source of events. This can be used when events aren't coming from resources
|
|
// stored by the resource API.
|
|
type Source struct {
|
|
Source <-chan Event
|
|
}
|
|
|
|
// Event captures an event in the system which the API can choose to respond to.
|
|
type Event struct {
|
|
Obj queue.ItemType
|
|
}
|
|
|
|
// Key returns a string that will be used to de-duplicate items in the queue.
|
|
func (e Event) Key() string {
|
|
return e.Obj.Key()
|
|
}
|
|
|
|
// customWatch represent a Watch on a custom Event source and a Mapper to map said
|
|
// Events into Requests that the controller can respond to.
|
|
type customWatch struct {
|
|
source *Source
|
|
mapper CustomDependencyMapper
|
|
}
|