Documentation
¶
Index ¶
- Constants
- Variables
- func ExtractFields(resource any, fieldMapping func(any) map[string]any) map[string]any
- func LabelsEqual(current, desired map[string]string) bool
- func LabelsEqualPtr(current map[string]*string, desired map[string]string) bool
- type APIPlanner
- type ActionType
- type AuthStrategyPlanner
- type BasePlanner
- func (b *BasePlanner) GetClient() *state.Client
- func (b *BasePlanner) GetDesiredAPIDocuments(namespace string) []resources.APIDocumentResource
- func (b *BasePlanner) GetDesiredAPIImplementations(namespace string) []resources.APIImplementationResource
- func (b *BasePlanner) GetDesiredAPIPublications(namespace string) []resources.APIPublicationResource
- func (b *BasePlanner) GetDesiredAPIVersions(namespace string) []resources.APIVersionResource
- func (b *BasePlanner) GetDesiredAPIs(namespace string) []resources.APIResource
- func (b *BasePlanner) GetDesiredAuthStrategies(namespace string) []resources.ApplicationAuthStrategyResource
- func (b *BasePlanner) GetDesiredCatalogServices(namespace string) []resources.CatalogServiceResource
- func (b *BasePlanner) GetDesiredControlPlanes(namespace string) []resources.ControlPlaneResource
- func (b *BasePlanner) GetDesiredPortalAuthSettings(namespace string) []resources.PortalAuthSettingsResource
- func (b *BasePlanner) GetDesiredPortalCustomDomains(namespace string) []resources.PortalCustomDomainResource
- func (b *BasePlanner) GetDesiredPortalCustomizations(namespace string) []resources.PortalCustomizationResource
- func (b *BasePlanner) GetDesiredPortalEmailConfigs(namespace string) []resources.PortalEmailConfigResource
- func (b *BasePlanner) GetDesiredPortalPages(namespace string) []resources.PortalPageResource
- func (b *BasePlanner) GetDesiredPortalSnippets(namespace string) []resources.PortalSnippetResource
- func (b *BasePlanner) GetDesiredPortals(namespace string) []resources.PortalResource
- func (b *BasePlanner) GetGenericPlanner() *GenericPlanner
- func (b *BasePlanner) GetString(s *string) string
- func (b *BasePlanner) NextChangeID(action ActionType, resourceType string, resourceRef string) string
- func (b *BasePlanner) ValidateProtection(resourceType, resourceName string, isProtected bool, action ActionType) error
- func (b *BasePlanner) ValidateProtectionWithChange(resourceType, resourceName string, isProtected bool, action ActionType, ...) error
- type CatalogServicePlanner
- type Config
- type ControlPlanePlanner
- type CreateConfig
- type DeleteConfig
- type DependencyResolver
- type FieldChange
- type GenericPlanner
- func (g *GenericPlanner) PlanCreate(_ context.Context, config CreateConfig) (PlannedChange, error)
- func (g *GenericPlanner) PlanDelete(_ context.Context, config DeleteConfig) PlannedChange
- func (g *GenericPlanner) PlanProtectionChange(_ context.Context, config ProtectionChangeConfig) PlannedChange
- func (g *GenericPlanner) PlanUpdate(_ context.Context, config UpdateConfig) (PlannedChange, error)
- func (g *GenericPlanner) ShouldUpdate(config UpdateConfig) bool
- type Options
- type ParentInfo
- type Plan
- func (p *Plan) AddChange(change PlannedChange)
- func (p *Plan) AddWarning(changeID, message string)
- func (p *Plan) ContainsDeletes() bool
- func (p *Plan) HasChange(resourceType, resourceRef string) bool
- func (p *Plan) IsEmpty() bool
- func (p *Plan) SetExecutionOrder(order []string)
- func (p *Plan) UpdateSummary()
- type PlanMetadata
- type PlanMode
- type PlanSummary
- type PlanWarning
- type PlannedChange
- type Planner
- func (p *Planner) GeneratePlan(ctx context.Context, rs *resources.ResourceSet, opts Options) (*Plan, error)
- func (p *Planner) GetDesiredAPIs() []resources.APIResource
- func (p *Planner) GetDesiredPortalCustomDomains() []resources.PortalCustomDomainResource
- func (p *Planner) GetDesiredPortalCustomizations() []resources.PortalCustomizationResource
- func (p *Planner) GetDesiredPortalPages() []resources.PortalPageResource
- func (p *Planner) GetDesiredPortalSnippets() []resources.PortalSnippetResource
- type PortalPlanner
- type ProtectionChange
- type ProtectionChangeConfig
- type ProtectionErrorCollector
- type ProtectionSummary
- type ReferenceInfo
- type ReferenceResolver
- type ResolveResult
- type ResolvedReference
- type ResourcePlanner
- type UpdateConfig
Constants ¶
const ( // 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" // FieldError contains validation errors that should be reported // Used when the planner detects an invalid operation FieldError = "_error" )
Internal field names used for communication between planner and executor These fields are prefixed with underscore to indicate they are internal and should not be confused with actual resource fields
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 is the resource type for portal logo assets 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" )
Resource type constants
const (
// DefaultNamespace is the default namespace when none is specified
DefaultNamespace = "default"
)
Default values
Variables ¶
var NoRequiredFields = []string{}
NoRequiredFields is an explicitly empty slice for operations that don't require field validation
Functions ¶
func ExtractFields ¶
ExtractFields is a helper to create field extractors for resources with SDK types
func LabelsEqual ¶
LabelsEqual compares two label maps for equality
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" // Future )
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) 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 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.
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 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 FieldChange ¶
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 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 (*Plan) AddChange ¶
func (p *Plan) AddChange(change PlannedChange)
AddChange adds a change to the plan
func (*Plan) AddWarning ¶
AddWarning adds a warning to the plan
func (*Plan) ContainsDeletes ¶
ContainsDeletes returns true if plan contains any DELETE operations
func (*Plan) HasChange ¶ added in v0.2.0
HasChange returns true if the plan already contains a change for the given resource type and ref.
func (*Plan) SetExecutionOrder ¶
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 PlanSummary ¶
type PlanSummary struct {
TotalChanges int `json:"total_changes"`
ByAction map[ActionType]int `json:"by_action"`
ByResource map[string]int `json:"by_resource"`
ProtectionChanges *ProtectionSummary `json:"protection_changes,omitempty"`
}
PlanSummary provides overview statistics
type PlanWarning ¶
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"`
References map[string]ReferenceInfo `json:"references,omitempty"`
Parent *ParentInfo `json:"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 ¶
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 ProtectionChange ¶
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 ¶
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
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