Documentation
¶
Index ¶
Constants ¶
const DefaultInterval = 60 * time.Second
DefaultInterval is the default reconciliation interval.
Variables ¶
This section is empty.
Functions ¶
func BuildDriftReport ¶
func BuildDriftReport(diff StateDiff) api.DriftReport
BuildDriftReport constructs an api.DriftReport from a StateDiff. Each drift item produces one DriftCorrection entry.
func NewStateSnapshot ¶
func NewStateSnapshot() *stateSnapshot
NewStateSnapshot returns a new, empty snapshot.
Types ¶
type Config ¶
type Config struct {
// Interval is the time between reconciliation cycles.
// Default: 60s
Interval time.Duration `yaml:"interval"`
}
Config holds the configuration for the reconciliation loop. Config is passed as a constructor argument — no file I/O in this package.
func (*Config) ApplyDefaults ¶
func (c *Config) ApplyDefaults()
ApplyDefaults sets default values for zero-valued fields.
type ReconcileHandler ¶
ReconcileHandler is a function invoked when drift is detected.
type Reconciler ¶
type Reconciler struct {
// contains filtered or unexported fields
}
Reconciler periodically compares desired state against a local snapshot and invokes registered handlers to correct drift.
func NewReconciler ¶
func NewReconciler(client StateFetcher, cfg Config, logger *slog.Logger) *Reconciler
NewReconciler creates a new Reconciler with the given configuration. Config defaults are applied automatically.
func (*Reconciler) RegisterHandler ¶
func (r *Reconciler) RegisterHandler(handler ReconcileHandler)
RegisterHandler adds a reconciliation handler invoked on drift detection. Handlers are called in registration order. RegisterHandler must be called before Run; it is not safe for concurrent use.
func (*Reconciler) Run ¶
func (r *Reconciler) Run(ctx context.Context, nodeID string) error
Run starts the reconciliation loop. It blocks until ctx is cancelled. The first cycle runs immediately; subsequent cycles run at cfg.Interval or when TriggerReconcile is called.
func (*Reconciler) TriggerReconcile ¶
func (r *Reconciler) TriggerReconcile()
TriggerReconcile requests an immediate reconciliation cycle. Multiple rapid calls are coalesced — only one extra cycle runs.
type StateDiff ¶
type StateDiff struct {
PeersToAdd []api.Peer
PeersToRemove []string // peer IDs
PeersToUpdate []api.Peer // peers with changed fields
PoliciesToAdd []api.Policy
PoliciesToRemove []string // policy IDs
SigningKeysChanged bool
NewSigningKeys *api.SigningKeys
MetadataChanged bool
DataChanged bool
SecretRefsChanged bool
}
StateDiff describes the drift between a desired state (from the control plane) and the current locally-observed state.
func ComputeDiff ¶
func ComputeDiff(desired *api.StateResponse, current *api.StateResponse) StateDiff
ComputeDiff compares the desired state from the control plane against the current local snapshot and returns a StateDiff describing what has changed.
type StateFetcher ¶
type StateFetcher interface {
FetchState(ctx context.Context, nodeID string) (*api.StateResponse, error)
ReportDrift(ctx context.Context, nodeID string, req api.DriftReport) error
}
StateFetcher retrieves desired state and reports drift to the control plane.