~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
67 lines · 2.0 KB Raw History
package controller

import (
	"context"
	"encoding/json"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

	policyv1alpha1 "github.com/johnandersen777/socialweb-computer-kcp/api/policy/v1alpha1"

	commonv1 "github.com/johnandersen777/socialweb-computer-kcp/api/common/v1alpha1"
)

type EngineReconcileState struct {
	Phase      policyv1alpha1.PolicyEnginePhase
	Ready      bool
	ActiveRuns int32
	Conditions []metav1.Condition
}

type WorkflowReconcileState struct {
	Phase      policyv1alpha1.PolicyWorkflowPhase
	Conditions []metav1.Condition
}

type TriggerReconcileState struct {
	LastRun    *metav1.Time
	NextRun    *metav1.Time
	Active     int32
	Conditions []metav1.Condition
}

type PolicyEngineController interface {
	ReconcilePolicyEngine(ctx context.Context, engine *policyv1alpha1.PolicyEngine) (EngineReconcileState, error)
}

type PolicyWorkflowController interface {
	ReconcilePolicyWorkflow(ctx context.Context, workflow *policyv1alpha1.PolicyWorkflow) (WorkflowReconcileState, error)
}

type PolicyWorkflowRunController interface {
	ReconcilePolicyWorkflowRun(ctx context.Context, run *policyv1alpha1.PolicyWorkflowRun) (Outcome, error)
}

type PolicyTriggerController interface {
	ReconcilePolicyTrigger(ctx context.Context, trigger *policyv1alpha1.PolicyTrigger) (TriggerReconcileState, error)
}

type WorkflowSource interface {
	GetPolicyWorkflow(ctx context.Context, name string) (*policyv1alpha1.PolicyWorkflow, error)
}

type RecordSource interface {
	ResolveRecord(ctx context.Context, ref commonv1.StrongRef) (map[string]any, error)
	ResolveWorkflow(ctx context.Context, ref commonv1.StrongRef) (json.RawMessage, error)
}

type ActionHandler interface {
	Kind() string
	Dispatch(ctx context.Context, spec json.RawMessage, outcome Outcome) error
}

type WorkflowSourceFunc func(ctx context.Context, name string) (*policyv1alpha1.PolicyWorkflow, error)

func (f WorkflowSourceFunc) GetPolicyWorkflow(ctx context.Context, name string) (*policyv1alpha1.PolicyWorkflow, error) {
	return f(ctx, name)
}