planner

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 21, 2026 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// FieldName contains a resource name
	FieldName = "name"

	// FieldCurrentLabels contains the current labels of a resource
	// Used during updates to determine which labels should be removed
	FieldCurrentLabels = "_current_labels"

	// FieldStrategyType contains the current strategy type for auth strategies
	// Used during updates since strategy type cannot be changed
	FieldStrategyType = "_strategy_type"

	// FieldDCRProviderUpdateType contains the current provider type for DCR providers
	// Used during updates since provider type cannot be changed and update config is a union type
	FieldDCRProviderUpdateType = "_provider_type"

	// FieldDCRProviderID contains the DCR provider reference or resolved ID for OIDC auth strategies
	FieldDCRProviderID = "dcr_provider_id"

	// FieldDCRProviderProviderType contains the DCR provider type
	FieldDCRProviderProviderType = "provider_type"

	// FieldDCRProviderIssuer contains the DCR provider issuer URL
	FieldDCRProviderIssuer = "issuer"

	// FieldDCRProviderConfig contains provider-specific DCR configuration
	FieldDCRProviderConfig = "dcr_config"

	// FieldDisplayName contains a resource display name
	FieldDisplayName = "display_name"

	// FieldLabels contains user-managed labels
	FieldLabels = "labels"

	// FieldError contains validation errors that should be reported
	// Used when the planner detects an invalid operation
	FieldError = "_error"
)

Field names used for communication between planner and executor. Internal fields are prefixed with underscore to avoid confusion with resource fields.

View Source
const (
	// ResourceTypePortal is the resource type for portals
	ResourceTypePortal = "portal"

	// ResourceTypePortalPage is the resource type for portal pages
	ResourceTypePortalPage = "portal_page"

	// ResourceTypePortalSnippet is the resource type for portal snippets
	ResourceTypePortalSnippet = "portal_snippet"

	// ResourceTypePortalTeam is the resource type for portal teams
	ResourceTypePortalTeam = "portal_team"

	// ResourceTypePortalTeamRole is the resource type for portal team roles
	ResourceTypePortalTeamRole = "portal_team_role"

	// ResourceTypePortalCustomization is the resource type for portal customizations
	ResourceTypePortalCustomization = "portal_customization"

	// ResourceTypePortalAuthSettings is the resource type for portal auth settings
	ResourceTypePortalAuthSettings = "portal_auth_settings"

	// ResourceTypePortalCustomDomain is the resource type for portal custom domains
	ResourceTypePortalCustomDomain = "portal_custom_domain"

	ResourceTypePortalAssetLogo = "portal_asset_logo"

	// ResourceTypePortalAssetFavicon is the resource type for portal favicon assets
	ResourceTypePortalAssetFavicon = "portal_asset_favicon"

	// ResourceTypePortalEmailConfig is the resource type for portal email configs
	ResourceTypePortalEmailConfig = "portal_email_config"

	// ResourceTypePortalEmailTemplate is the resource type for portal email templates
	ResourceTypePortalEmailTemplate = "portal_email_template"

	// ResourceTypeEventGatewayControlPlane is the resource type for event gateway control planes
	ResourceTypeEventGatewayControlPlane = "event_gateway"

	// ResourceTypeEventGatewayBackendCluster is the resource type for event gateway backend clusters
	ResourceTypeEventGatewayBackendCluster = "event_gateway_backend_cluster"

	// ResourceTypeEventGatewayVirtualCluster is the resource type for event gateway virtual clusters
	ResourceTypeEventGatewayVirtualCluster = "event_gateway_virtual_cluster"

	// ResourceTypeEventGatewayListener is the resource type for event gateway listeners
	ResourceTypeEventGatewayListener = "event_gateway_listener"

	// ResourceTypeEventGatewayListenerPolicy is the resource type for event gateway listener policies
	ResourceTypeEventGatewayListenerPolicy = "event_gateway_listener_policy"

	// ResourceTypeEventGatewayDataPlaneCertificate is the resource type for event gateway data plane certificates
	ResourceTypeEventGatewayDataPlaneCertificate = "event_gateway_data_plane_certificate"

	// ResourceTypeEventGatewayClusterPolicy is the resource type for event gateway cluster-level policies
	ResourceTypeEventGatewayClusterPolicy = "event_gateway_virtual_cluster_cluster_policy"

	// ResourceTypeEventGatewayProducePolicy is the resource type for event gateway produce policies
	ResourceTypeEventGatewayProducePolicy = "event_gateway_virtual_cluster_produce_policy"
	// ResourceTypeEventGatewayConsumePolicy is the resource type for event gateway virtual cluster consume policies
	ResourceTypeEventGatewayConsumePolicy = "event_gateway_virtual_cluster_consume_policy"
	// ResourceTypeEventGatewaySchemaRegistry is the resource type for event gateway schema registries
	ResourceTypeEventGatewaySchemaRegistry = "event_gateway_schema_registry"

	// ResourceTypeEventGatewayStaticKey is the resource type for event gateway static keys.
	// Static keys do not support update – changes are applied as delete + create.
	ResourceTypeEventGatewayStaticKey = "event_gateway_static_key"

	// ResourceTypeEventGatewayTLSTrustBundle is the resource type for event gateway TLS trust bundles.
	ResourceTypeEventGatewayTLSTrustBundle = "event_gateway_tls_trust_bundle"

	// ResourceTypeDeck represents an internal deck execution step.
	ResourceTypeDeck = "_deck"
)

Resource type constants

View Source
const (
	// DefaultNamespace is the default namespace when none is specified
	DefaultNamespace = "default"
)

Default values

Variables

View Source
var NoRequiredFields = []string{}

NoRequiredFields is an explicitly empty slice for operations that don't require field validation

Functions

func ExtractFields

func ExtractFields(resource any, fieldMapping func(any) map[string]any) map[string]any

ExtractFields is a helper to create field extractors for resources with SDK types

func LabelsEqual

func LabelsEqual(current, desired map[string]string) bool

LabelsEqual compares two label maps for equality

func LabelsEqualPtr

func LabelsEqualPtr(current map[string]*string, desired map[string]string) bool

LabelsEqualPtr compares two label maps with pointer values

Types

type APIPlanner

type APIPlanner interface {
	ResourcePlanner
}

APIPlanner handles planning for API resources and their child resources

func NewAPIPlanner

func NewAPIPlanner(base *BasePlanner) APIPlanner

NewAPIPlanner creates a new API planner

type ActionType

type ActionType string

ActionType represents the type of change

const (
	ActionCreate       ActionType = "CREATE"
	ActionUpdate       ActionType = "UPDATE"
	ActionDelete       ActionType = "DELETE"
	ActionExternalTool ActionType = "EXTERNAL_TOOL"
)

type AuthStrategyPlanner

type AuthStrategyPlanner interface {
	ResourcePlanner
}

AuthStrategyPlanner handles planning for auth strategy resources

func NewAuthStrategyPlanner

func NewAuthStrategyPlanner(base *BasePlanner) AuthStrategyPlanner

NewAuthStrategyPlanner creates a new auth strategy planner

type BasePlanner

type BasePlanner struct {
	// contains filtered or unexported fields
}

BasePlanner provides common functionality for all resource planners

func NewBasePlanner

func NewBasePlanner(p *Planner) *BasePlanner

NewBasePlanner creates a new base planner instance

func (*BasePlanner) GetClient

func (b *BasePlanner) GetClient() *state.Client

GetClient returns the state client

func (*BasePlanner) GetDesiredAPIDocuments

func (b *BasePlanner) GetDesiredAPIDocuments(namespace string) []resources.APIDocumentResource

GetDesiredAPIDocuments returns desired API document resources from the specified namespace

func (*BasePlanner) GetDesiredAPIImplementations

func (b *BasePlanner) GetDesiredAPIImplementations(namespace string) []resources.APIImplementationResource

GetDesiredAPIImplementations returns desired API implementation resources from the specified namespace

func (*BasePlanner) GetDesiredAPIPublications

func (b *BasePlanner) GetDesiredAPIPublications(namespace string) []resources.APIPublicationResource

GetDesiredAPIPublications returns desired API publication resources from the specified namespace

func (*BasePlanner) GetDesiredAPIVersions

func (b *BasePlanner) GetDesiredAPIVersions(namespace string) []resources.APIVersionResource

GetDesiredAPIVersions returns desired API version resources from the specified namespace

func (*BasePlanner) GetDesiredAPIs

func (b *BasePlanner) GetDesiredAPIs(namespace string) []resources.APIResource

GetDesiredAPIs returns desired API resources from the specified namespace

func (*BasePlanner) GetDesiredAuthStrategies

func (b *BasePlanner) GetDesiredAuthStrategies(namespace string) []resources.ApplicationAuthStrategyResource

GetDesiredAuthStrategies returns desired auth strategy resources from the specified namespace

func (*BasePlanner) GetDesiredCatalogServices added in v0.3.6

func (b *BasePlanner) GetDesiredCatalogServices(namespace string) []resources.CatalogServiceResource

GetDesiredCatalogServices returns desired catalog service resources from the specified namespace

func (*BasePlanner) GetDesiredControlPlanes added in v0.1.6

func (b *BasePlanner) GetDesiredControlPlanes(namespace string) []resources.ControlPlaneResource

GetDesiredControlPlanes returns desired control plane resources from the specified namespace

func (*BasePlanner) GetDesiredDCRProviders added in v0.8.0

func (b *BasePlanner) GetDesiredDCRProviders(namespace string) []resources.DCRProviderResource

GetDesiredDCRProviders returns desired DCR provider resources from the specified namespace

func (*BasePlanner) GetDesiredEventGatewayControlPlanes added in v0.3.7

func (b *BasePlanner) GetDesiredEventGatewayControlPlanes(
	namespace string,
) []resources.EventGatewayControlPlaneResource

GetDesiredEventGatewayControlPlanes returns desired EGW CP resources from the specified namespace

func (*BasePlanner) GetDesiredOrganizationTeams added in v0.4.0

func (b *BasePlanner) GetDesiredOrganizationTeams(namespace string) []resources.OrganizationTeamResource

GetDesiredOrganizationTeams returns desired organization_team resources from the specified namespace

func (*BasePlanner) GetDesiredPortalAuthSettings added in v0.3.4

func (b *BasePlanner) GetDesiredPortalAuthSettings(namespace string) []resources.PortalAuthSettingsResource

GetDesiredPortalAuthSettings returns desired portal auth settings resources from the specified namespace

func (*BasePlanner) GetDesiredPortalCustomDomains

func (b *BasePlanner) GetDesiredPortalCustomDomains(namespace string) []resources.PortalCustomDomainResource

GetDesiredPortalCustomDomains returns desired portal custom domain resources from the specified namespace

func (*BasePlanner) GetDesiredPortalCustomizations

func (b *BasePlanner) GetDesiredPortalCustomizations(namespace string) []resources.PortalCustomizationResource

GetDesiredPortalCustomizations returns desired portal customization resources from the specified namespace

func (*BasePlanner) GetDesiredPortalEmailConfigs added in v0.3.5

func (b *BasePlanner) GetDesiredPortalEmailConfigs(namespace string) []resources.PortalEmailConfigResource

GetDesiredPortalEmailConfigs returns desired portal email config resources from the specified namespace

func (*BasePlanner) GetDesiredPortalPages

func (b *BasePlanner) GetDesiredPortalPages(namespace string) []resources.PortalPageResource

GetDesiredPortalPages returns desired portal page resources from the specified namespace

func (*BasePlanner) GetDesiredPortalSnippets

func (b *BasePlanner) GetDesiredPortalSnippets(namespace string) []resources.PortalSnippetResource

GetDesiredPortalSnippets returns desired portal snippet resources from the specified namespace

func (*BasePlanner) GetDesiredPortals

func (b *BasePlanner) GetDesiredPortals(namespace string) []resources.PortalResource

GetDesiredPortals returns desired portal resources from the specified namespace

func (*BasePlanner) GetGenericPlanner

func (b *BasePlanner) GetGenericPlanner() *GenericPlanner

GetGenericPlanner returns the generic planner instance

func (*BasePlanner) GetString

func (b *BasePlanner) GetString(s *string) string

GetString safely dereferences a string pointer

func (*BasePlanner) NextChangeID

func (b *BasePlanner) NextChangeID(action ActionType, resourceType string, resourceRef string) string

NextChangeID generates a unique change ID

func (*BasePlanner) ValidateProtection

func (b *BasePlanner) ValidateProtection(resourceType, resourceName string, isProtected bool, action ActionType) error

ValidateProtection validates protection status for an operation

func (*BasePlanner) ValidateProtectionWithChange

func (b *BasePlanner) ValidateProtectionWithChange(
	resourceType, resourceName string,
	isProtected bool,
	action ActionType,
	protectionChange *ProtectionChange,
	hasOtherFieldChanges bool,
) error

ValidateProtectionWithChange validates protection status for an operation with protection change info

type CatalogServicePlanner added in v0.3.6

type CatalogServicePlanner interface {
	ResourcePlanner
}

CatalogServicePlanner handles planning for catalog service resources

func NewCatalogServicePlanner added in v0.3.6

func NewCatalogServicePlanner(base *BasePlanner) CatalogServicePlanner

NewCatalogServicePlanner creates a new catalog service planner.

type ComponentProvider added in v0.5.0

type ComponentProvider interface {
	PlannerComponent() string
}

ComponentProvider optionally exposes the workflow component name to use in HTTP logging. Implementations should return the canonical resource-style identifier (for example: "portal").

type Config added in v0.1.3

type Config struct {
	// Namespace specifies the target namespace for planning operations
	Namespace string
}

Config contains configuration data needed during planning operations. This replaces the anti-pattern of passing data through context.WithValue.

func NewConfig added in v0.1.3

func NewConfig(namespace string) *Config

NewConfig creates a new planner config with the specified namespace.

type ControlPlanePlanner added in v0.1.6

type ControlPlanePlanner interface {
	ResourcePlanner
}

ControlPlanePlanner handles planning for control plane resources

func NewControlPlanePlanner added in v0.1.6

func NewControlPlanePlanner(base *BasePlanner) ControlPlanePlanner

NewControlPlanePlanner creates a new control plane planner

type CreateConfig

type CreateConfig struct {
	ResourceType   string
	ResourceName   string
	ResourceRef    string
	RequiredFields []string
	FieldExtractor func(resource any) map[string]any
	Namespace      string
	DependsOn      []string
	References     map[string]ReferenceInfo
	Parent         *ParentInfo
}

CreateConfig defines configuration for generic create operations

type DCRProviderPlanner added in v0.8.0

type DCRProviderPlanner interface {
	ResourcePlanner
}

DCRProviderPlanner handles planning for DCR provider resources.

func NewDCRProviderPlanner added in v0.8.0

func NewDCRProviderPlanner(base *BasePlanner) DCRProviderPlanner

type DeckOptions added in v0.3.8

type DeckOptions struct {
	Runner         deck.Runner
	KonnectToken   string
	KonnectAddress string
}

DeckOptions provides configuration for deck-based planning.

type DeleteConfig

type DeleteConfig struct {
	ResourceType string
	ResourceName string
	ResourceRef  string
	ResourceID   string
	Namespace    string
}

DeleteConfig defines configuration for generic delete operations

type DependencyResolver

type DependencyResolver struct{}

DependencyResolver calculates execution order for plan changes

func NewDependencyResolver

func NewDependencyResolver() *DependencyResolver

NewDependencyResolver creates a new resolver

func (*DependencyResolver) ResolveDependencies

func (d *DependencyResolver) ResolveDependencies(changes []PlannedChange) ([]string, error)

ResolveDependencies builds dependency graph and calculates execution order

type EGWControlPlanePlanner added in v0.3.7

type EGWControlPlanePlanner interface {
	ResourcePlanner
}

EGWControlPlanePlanner handles planning for Event Gateway Control Plane resources

type EGWControlPlanePlannerImpl added in v0.3.7

type EGWControlPlanePlannerImpl struct {
	*BasePlanner
	// contains filtered or unexported fields
}

func NewEGWControlPlanePlanner added in v0.3.7

func NewEGWControlPlanePlanner(planner *BasePlanner, resources *resources.ResourceSet) *EGWControlPlanePlannerImpl

func (*EGWControlPlanePlannerImpl) GetDesiredEGWControlPlanes added in v0.3.7

func (p *EGWControlPlanePlannerImpl) GetDesiredEGWControlPlanes(
	namespace string,
) []resources.EventGatewayControlPlaneResource

func (*EGWControlPlanePlannerImpl) PlanChanges added in v0.3.7

func (p *EGWControlPlanePlannerImpl) PlanChanges(ctx context.Context, plannerCtx *Config, plan *Plan) error

func (*EGWControlPlanePlannerImpl) PlannerComponent added in v0.5.0

func (p *EGWControlPlanePlannerImpl) PlannerComponent() string

type ExternalToolDependency added in v0.3.8

type ExternalToolDependency struct {
	ControlPlaneRef  string                      `json:"control_plane_ref,omitempty"`
	ControlPlaneID   string                      `json:"control_plane_id,omitempty"`
	ControlPlaneName string                      `json:"control_plane_name,omitempty"`
	GatewayServices  []ExternalToolGatewayTarget `json:"gateway_services,omitempty"`
	Files            []string                    `json:"files,omitempty"`
	Flags            []string                    `json:"flags,omitempty"`
	DeckBaseDir      string                      `json:"deck_base_dir,omitempty"`
}

ExternalToolDependency captures external tool execution requirements for summary output.

type ExternalToolGatewayTarget added in v0.3.8

type ExternalToolGatewayTarget struct {
	Ref      string                `json:"ref"`
	Selector *ExternalToolSelector `json:"selector,omitempty"`
}

ExternalToolGatewayTarget represents a gateway service selector tied to a deck run.

type ExternalToolSelector added in v0.3.8

type ExternalToolSelector struct {
	MatchFields map[string]string `json:"matchFields"`
}

ExternalToolSelector represents selector match fields for external tool dependencies.

type FieldChange

type FieldChange struct {
	Old any `json:"old"`
	New any `json:"new"`
}

FieldChange represents a single field modification (for UPDATE)

type GenericPlanner

type GenericPlanner struct {
	// contains filtered or unexported fields
}

GenericPlanner provides common planning operations for all resource types

func NewGenericPlanner

func NewGenericPlanner(p *Planner) *GenericPlanner

NewGenericPlanner creates a new generic planner instance

func (*GenericPlanner) PlanCreate

func (g *GenericPlanner) PlanCreate(_ context.Context, config CreateConfig) (PlannedChange, error)

PlanCreate creates a planned change for resource creation

func (*GenericPlanner) PlanDelete

func (g *GenericPlanner) PlanDelete(_ context.Context, config DeleteConfig) PlannedChange

PlanDelete creates a planned change for resource deletion

func (*GenericPlanner) PlanProtectionChange

func (g *GenericPlanner) PlanProtectionChange(_ context.Context, config ProtectionChangeConfig) PlannedChange

PlanProtectionChange creates a planned change for protection status update

func (*GenericPlanner) PlanUpdate

func (g *GenericPlanner) PlanUpdate(_ context.Context, config UpdateConfig) (PlannedChange, error)

PlanUpdate creates a planned change for resource update

func (*GenericPlanner) ShouldUpdate

func (g *GenericPlanner) ShouldUpdate(config UpdateConfig) bool

ShouldUpdate determines if an update is needed by comparing current and desired state

type Options

type Options struct {
	Mode      PlanMode
	Generator string
	Deck      DeckOptions
}

Options configures plan generation behavior

type OrganizationTeamPlanner added in v0.4.0

type OrganizationTeamPlanner interface {
	ResourcePlanner
}

TeamPlanner handles planning for team resources

func NewOrganizationTeamPlanner added in v0.4.0

func NewOrganizationTeamPlanner(base *BasePlanner) OrganizationTeamPlanner

NewOrganizationTeamPlanner creates a new organization team planner

type OrganizationTeamPlannerImpl added in v0.4.0

type OrganizationTeamPlannerImpl struct {
	*BasePlanner
}

OrganizationTeamPlannerImpl implements planning logic for organization teams

func (*OrganizationTeamPlannerImpl) PlanChanges added in v0.4.0

func (t *OrganizationTeamPlannerImpl) PlanChanges(ctx context.Context, plannerCtx *Config, plan *Plan) error

PlanChanges generates changes for organization_team resources

func (*OrganizationTeamPlannerImpl) PlannerComponent added in v0.5.0

func (t *OrganizationTeamPlannerImpl) PlannerComponent() string

type ParentInfo

type ParentInfo struct {
	Ref string `json:"ref"`
	ID  string `json:"id"` // May be "[unknown]" for parents in same plan
}

ParentInfo tracks parent relationships

type Plan

type Plan struct {
	Metadata       PlanMetadata    `json:"metadata"`
	Changes        []PlannedChange `json:"changes"`
	ExecutionOrder []string        `json:"execution_order"`
	Summary        PlanSummary     `json:"summary"`
	Warnings       []PlanWarning   `json:"warnings,omitempty"`
}

Plan represents a declarative configuration plan

func NewPlan

func NewPlan(version, generator string, mode PlanMode) *Plan

NewPlan creates a new plan with metadata

func (*Plan) AddChange

func (p *Plan) AddChange(change PlannedChange)

AddChange adds a change to the plan

func (*Plan) AddWarning

func (p *Plan) AddWarning(changeID, message string)

AddWarning adds a warning to the plan

func (*Plan) ContainsDeletes

func (p *Plan) ContainsDeletes() bool

ContainsDeletes returns true if plan contains any DELETE operations

func (*Plan) HasChange added in v0.2.0

func (p *Plan) HasChange(resourceType, resourceRef string) bool

HasChange returns true if the plan already contains a change for the given resource type and ref.

func (*Plan) IsEmpty

func (p *Plan) IsEmpty() bool

IsEmpty returns true if plan has no changes

func (*Plan) SetExecutionOrder

func (p *Plan) SetExecutionOrder(order []string)

SetExecutionOrder sets the calculated execution order

func (*Plan) UpdateSummary

func (p *Plan) UpdateSummary()

UpdateSummary recalculates plan statistics

type PlanMetadata

type PlanMetadata struct {
	Version     string    `json:"version"`
	GeneratedAt time.Time `json:"generated_at"`
	Generator   string    `json:"generator"`
	Mode        PlanMode  `json:"mode"`
}

PlanMetadata contains plan generation information

type PlanMode

type PlanMode string

PlanMode represents the mode of plan generation

const (
	PlanModeSync   PlanMode = "sync"
	PlanModeApply  PlanMode = "apply"
	PlanModeDelete PlanMode = "delete"
)

type PlanSummary

type PlanSummary struct {
	TotalChanges      int                                 `json:"total_changes"`
	ByAction          map[ActionType]int                  `json:"by_action"`
	ByResource        map[string]int                      `json:"by_resource"`
	ByExternalTools   map[string][]ExternalToolDependency `json:"by_external_tools,omitempty"`
	ProtectionChanges *ProtectionSummary                  `json:"protection_changes,omitempty"`
}

PlanSummary provides overview statistics

type PlanWarning

type PlanWarning struct {
	ChangeID string `json:"change_id"`
	Message  string `json:"message"`
}

PlanWarning represents a warning about the plan

type PlannedChange

type PlannedChange struct {
	ID           string `json:"id"`
	ResourceType string `json:"resource_type"`
	ResourceRef  string `json:"resource_ref"`
	ResourceID   string `json:"resource_id,omitempty"` // Only for UPDATE/DELETE
	// Human-readable identifiers for resources without config refs
	ResourceMonikers      map[string]string        `json:"resource_monikers,omitempty"`
	Action                ActionType               `json:"action"`
	Fields                map[string]any           `json:"fields"`
	ChangedFields         map[string]FieldChange   `json:"changed_fields,omitempty"`
	PostResolutionTargets []PostResolutionTarget   `json:"post_resolution_targets,omitempty"`
	References            map[string]ReferenceInfo `json:"references,omitempty"`
	Parent                *ParentInfo              `json:"parent,omitempty"`
	ProtectingParent      *ProtectingParentInfo    `json:"protecting_parent,omitempty"`
	Protection            any                      `json:"protection,omitempty"` // bool or ProtectionChange
	Namespace             string                   `json:"namespace"`
	DependsOn             []string                 `json:"depends_on,omitempty"`
}

PlannedChange represents a single resource change

type Planner

type Planner struct {
	// contains filtered or unexported fields
}

Planner generates execution plans

func NewPlanner

func NewPlanner(client *state.Client, logger *slog.Logger) *Planner

NewPlanner creates a new planner

func (*Planner) GeneratePlan

func (p *Planner) GeneratePlan(ctx context.Context, rs *resources.ResourceSet, opts Options) (*Plan, error)

GeneratePlan creates a plan from declarative configuration

func (*Planner) GetDesiredAPIs

func (p *Planner) GetDesiredAPIs() []resources.APIResource

GetDesiredAPIs returns all desired API resources (across all namespaces)

func (*Planner) GetDesiredPortalCustomDomains

func (p *Planner) GetDesiredPortalCustomDomains() []resources.PortalCustomDomainResource

GetDesiredPortalCustomDomains returns all desired portal custom domain resources (across all namespaces)

func (*Planner) GetDesiredPortalCustomizations

func (p *Planner) GetDesiredPortalCustomizations() []resources.PortalCustomizationResource

GetDesiredPortalCustomizations returns all desired portal customization resources (across all namespaces)

func (*Planner) GetDesiredPortalPages

func (p *Planner) GetDesiredPortalPages() []resources.PortalPageResource

GetDesiredPortalPages returns all desired portal page resources (across all namespaces)

func (*Planner) GetDesiredPortalSnippets

func (p *Planner) GetDesiredPortalSnippets() []resources.PortalSnippetResource

GetDesiredPortalSnippets returns all desired portal snippet resources (across all namespaces)

type PortalPlanner

type PortalPlanner interface {
	ResourcePlanner
}

PortalPlanner handles planning for portal resources

func NewPortalPlanner

func NewPortalPlanner(base *BasePlanner) PortalPlanner

NewPortalPlanner creates a new portal planner

type PostResolutionTarget added in v0.3.8

type PostResolutionTarget struct {
	ResourceType     string                `json:"resource_type"`
	ResourceRef      string                `json:"resource_ref"`
	ControlPlaneRef  string                `json:"control_plane_ref,omitempty"`
	ControlPlaneID   string                `json:"control_plane_id,omitempty"`
	ControlPlaneName string                `json:"control_plane_name,omitempty"`
	Selector         *ExternalToolSelector `json:"selector,omitempty"`
}

PostResolutionTarget represents a resource that must be resolved after a change executes.

type ProtectingParentInfo added in v0.8.0

type ProtectingParentInfo struct {
	ResourceType string `json:"resource_type,omitempty"`
	ResourceRef  string `json:"resource_ref,omitempty"`
	ResourceID   string `json:"resource_id,omitempty"`
	ResourceName string `json:"resource_name,omitempty"`
}

ProtectingParentInfo identifies the top-level managed resource whose protection applies to a child change.

type ProtectionChange

type ProtectionChange struct {
	Old bool `json:"old"`
	New bool `json:"new"`
}

ProtectionChange tracks protection status changes

type ProtectionChangeConfig

type ProtectionChangeConfig struct {
	ResourceType string
	ResourceName string
	ResourceRef  string
	ResourceID   string
	OldProtected bool
	NewProtected bool
	Namespace    string
}

ProtectionChangeConfig defines configuration for protection change operations

type ProtectionErrorCollector

type ProtectionErrorCollector struct {
	// contains filtered or unexported fields
}

CollectProtectionErrors collects protection validation errors for batch reporting

func (*ProtectionErrorCollector) Add

func (c *ProtectionErrorCollector) Add(err error)

Add adds a protection error to the collector

func (*ProtectionErrorCollector) Error

func (c *ProtectionErrorCollector) Error() error

Error returns a combined error message

func (*ProtectionErrorCollector) HasErrors

func (c *ProtectionErrorCollector) HasErrors() bool

HasErrors returns true if any errors were collected

type ProtectionSummary

type ProtectionSummary struct {
	Protecting   int `json:"protecting"`
	Unprotecting int `json:"unprotecting"`
}

ProtectionSummary tracks protection changes

type ReferenceInfo

type ReferenceInfo struct {
	// Existing fields for single references
	Ref          string            `json:"ref,omitempty"`
	ID           string            `json:"id,omitempty"`            // May be "[unknown]" for resources in same plan
	LookupFields map[string]string `json:"lookup_fields,omitempty"` // Resource-specific identifying fields

	// New fields for array references
	Refs         []string            `json:"refs,omitempty"`          // Array of reference strings
	ResolvedIDs  []string            `json:"resolved_ids,omitempty"`  // Array of resolved UUIDs
	LookupArrays map[string][]string `json:"lookup_arrays,omitempty"` // Array lookup fields
	IsArray      bool                `json:"is_array,omitempty"`      // Flag to indicate array reference
}

ReferenceInfo tracks reference resolution

type ReferenceResolver

type ReferenceResolver struct {
	// contains filtered or unexported fields
}

ReferenceResolver resolves declarative refs to Konnect IDs

func NewReferenceResolver

func NewReferenceResolver(client *state.Client, rs *resources.ResourceSet) *ReferenceResolver

NewReferenceResolver creates a new resolver

func (*ReferenceResolver) ResolveReferences

func (r *ReferenceResolver) ResolveReferences(ctx context.Context, changes []PlannedChange) (*ResolveResult, error)

ResolveReferences resolves all references in planned changes

type ResolveResult

type ResolveResult struct {
	// Map of change_id -> field -> resolved reference
	ChangeReferences map[string]map[string]ResolvedReference
	// Errors encountered during resolution
	Errors []error
}

ResolveResult contains resolved reference information

type ResolvedReference

type ResolvedReference struct {
	Ref string
	ID  string
}

ResolvedReference contains ref and resolved ID

type ResourcePlanner

type ResourcePlanner interface {
	// PlanChanges is the main entry point for planning changes for a resource type
	PlanChanges(ctx context.Context, plannerCtx *Config, plan *Plan) error
}

ResourcePlanner defines the interface that all resource type planners must implement

type UpdateConfig

type UpdateConfig struct {
	ResourceType    string
	ResourceName    string
	ResourceRef     string
	ResourceID      string
	CurrentFields   map[string]any
	DesiredFields   map[string]any
	ChangedFields   map[string]FieldChange
	CurrentLabels   map[string]string
	DesiredLabels   map[string]string
	RequiredFields  []string
	FieldComparator func(current, desired map[string]any) bool
	Namespace       string
	References      map[string]ReferenceInfo
}

UpdateConfig defines configuration for generic update operations

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL