Documentation
¶
Overview ¶
Package application provides small helpers for grouping resources that make up a single application or deployment unit.
An Bundle can be used by the cluster package to add a collection of Kubernetes resources, typically represented by a Flux Kustomization, to a cluster layout.
Index ¶
- func RegisterApplicationConfig(gvk gvk.GVK, factory func() ApplicationConfig)
- func RegisterArgoWorkflow(factory func() Workflow)
- func RegisterFluxWorkflow(factory func() Workflow)
- type Application
- type ApplicationConfig
- type ApplicationMetadata
- type ApplicationWrapper
- type ApplicationWrappers
- type BootstrapConfig
- type Bundle
- type BundleBuilder
- type BundleBuilderImpl
- func (bb *BundleBuilderImpl) Build() *Cluster
- func (bb *BundleBuilderImpl) End() NodeBuilder
- func (bb *BundleBuilderImpl) WithApplication(name string, appConfig ApplicationConfig) BundleBuilder
- func (bb *BundleBuilderImpl) WithDependency(bundle *Bundle) BundleBuilder
- func (bb *BundleBuilderImpl) WithSourceRef(sourceRef *SourceRef) BundleBuilder
- type Cluster
- type ClusterBuilder
- type ClusterBuilderImpl
- type GitOpsConfig
- type Node
- func (n *Node) GetBundle() *Bundle
- func (n *Node) GetChildren() []*Node
- func (n *Node) GetName() string
- func (n *Node) GetPackageRef() *schema.GroupVersionKind
- func (n *Node) GetParent() *Node
- func (n *Node) GetParentPath() string
- func (n *Node) GetPath() string
- func (n *Node) InitializePathMap()
- func (n *Node) SetBundle(bundle *Bundle)
- func (n *Node) SetChildren(children []*Node)
- func (n *Node) SetName(name string)
- func (n *Node) SetPackageRef(ref *schema.GroupVersionKind)
- func (n *Node) SetParent(parent *Node)
- func (n *Node) SetParentPath(path string)
- type NodeBuilder
- type NodeBuilderImpl
- func (nb *NodeBuilderImpl) Build() *Cluster
- func (nb *NodeBuilderImpl) End() ClusterBuilder
- func (nb *NodeBuilderImpl) WithBundle(name string) BundleBuilder
- func (nb *NodeBuilderImpl) WithChild(name string) NodeBuilder
- func (nb *NodeBuilderImpl) WithPackageRef(ref *schema.GroupVersionKind) NodeBuilder
- type SourceRef
- type Workflow
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func RegisterApplicationConfig ¶
func RegisterApplicationConfig(gvk gvk.GVK, factory func() ApplicationConfig)
RegisterApplicationConfig registers an ApplicationConfig type with the stack registry
func RegisterArgoWorkflow ¶
func RegisterArgoWorkflow(factory func() Workflow)
RegisterArgoWorkflow registers the ArgoCD workflow factory. This is called by the argocd package during init.
func RegisterFluxWorkflow ¶
func RegisterFluxWorkflow(factory func() Workflow)
RegisterFluxWorkflow registers the Flux workflow factory. This is called by the fluxcd package during init.
Types ¶
type Application ¶
type Application struct {
Name string
Namespace string
Config ApplicationConfig
}
Application represents a deployable application with a configuration.
func NewApplication ¶
func NewApplication(name, namespace string, cfg ApplicationConfig) *Application
NewApplication constructs an Application with the provided parameters.
func (*Application) Generate ¶
func (a *Application) Generate() ([]*client.Object, error)
Generate returns the resources for this application.
func (*Application) SetConfig ¶
func (a *Application) SetConfig(cfg ApplicationConfig)
SetConfig replaces the application configuration.
func (*Application) SetName ¶
func (a *Application) SetName(name string)
SetName updates the application name.
func (*Application) SetNamespace ¶
func (a *Application) SetNamespace(ns string)
SetNamespace updates the target namespace.
type ApplicationConfig ¶
type ApplicationConfig interface {
Generate(*Application) ([]*client.Object, error)
}
ApplicationConfig describes the behaviour of specific application types.
func CreateApplicationConfig ¶
func CreateApplicationConfig(apiVersion, kind string) (ApplicationConfig, error)
CreateApplicationConfig creates a new ApplicationConfig instance for the given apiVersion and kind
type ApplicationMetadata ¶
type ApplicationMetadata struct {
Name string `yaml:"name" json:"name"`
Namespace string `yaml:"namespace,omitempty" json:"namespace,omitempty"`
Labels map[string]string `yaml:"labels,omitempty" json:"labels,omitempty"`
}
ApplicationMetadata contains common metadata fields
type ApplicationWrapper ¶
type ApplicationWrapper struct {
APIVersion string `yaml:"apiVersion" json:"apiVersion"`
Kind string `yaml:"kind" json:"kind"`
Metadata ApplicationMetadata `yaml:"metadata" json:"metadata"`
Spec ApplicationConfig `yaml:"-" json:"-"`
}
ApplicationWrapper provides type detection and unmarshaling for ApplicationConfig
func (*ApplicationWrapper) MarshalYAML ¶
func (w *ApplicationWrapper) MarshalYAML() (interface{}, error)
MarshalYAML implements custom YAML marshaling
func (*ApplicationWrapper) ToApplication ¶
func (w *ApplicationWrapper) ToApplication() *Application
ToApplication converts the wrapper to a stack.Application
func (*ApplicationWrapper) UnmarshalYAML ¶
func (w *ApplicationWrapper) UnmarshalYAML(node *yaml.Node) error
UnmarshalYAML implements custom YAML unmarshaling with type detection
type ApplicationWrappers ¶
type ApplicationWrappers []ApplicationWrapper
ApplicationWrappers is a slice of ApplicationWrapper for unmarshaling multiple configs
func (ApplicationWrappers) ToApplications ¶
func (ws ApplicationWrappers) ToApplications() []*Application
ToApplications converts all wrappers to Applications
type BootstrapConfig ¶
type BootstrapConfig struct {
// Common fields
Enabled bool `yaml:"enabled"`
// Flux-specific
FluxMode string `yaml:"fluxMode,omitempty"` // "gitops-toolkit" or "flux-operator"
FluxVersion string `yaml:"fluxVersion,omitempty"`
Components []string `yaml:"components,omitempty"`
Registry string `yaml:"registry,omitempty"`
ImagePullSecret string `yaml:"imagePullSecret,omitempty"`
// Source configuration
SourceURL string `yaml:"sourceURL,omitempty"` // OCI/Git repository URL
SourceRef string `yaml:"sourceRef,omitempty"` // Tag/branch/ref
// ArgoCD-specific (mock for now)
ArgoCDVersion string `yaml:"argoCDVersion,omitempty"`
ArgoCDNamespace string `yaml:"argoCDNamespace,omitempty"`
}
BootstrapConfig defines the bootstrap configuration for GitOps tools
type Bundle ¶
type Bundle struct {
// Name identifies the application set.
Name string
// ParentPath is the hierarchical path to the parent bundle (e.g., "cluster/infrastructure")
// Empty for root bundles. This avoids circular references while maintaining hierarchy.
ParentPath string
// DependsOn lists other bundles this bundle depends on
DependsOn []*Bundle
// Interval controls how often Flux reconciles the bundle.
Interval string
// SourceRef specifies the source for the bundle.
SourceRef *SourceRef
// Applications holds the Kubernetes objects that belong to the application.
Applications []*Application
// Labels are common labels that should be applied to each resource.
Labels map[string]string
// contains filtered or unexported fields
}
Bundle represents a unit of deployment, typically the resources that are reconciled by a single Flux Kustomization.
func NewBundle ¶
NewBundle constructs a Bundle with the given name, resources and labels. It returns an error if validation fails.
func (*Bundle) GetParentPath ¶
GetParentPath returns the hierarchical path to the parent bundle.
func (*Bundle) InitializePathMap ¶
InitializePathMap builds the runtime path lookup map for efficient hierarchy navigation. This should be called on the root bundle after the tree structure is complete.
type BundleBuilder ¶
type BundleBuilder interface {
WithApplication(name string, appConfig ApplicationConfig) BundleBuilder
WithDependency(bundle *Bundle) BundleBuilder
WithSourceRef(sourceRef *SourceRef) BundleBuilder
End() NodeBuilder
Build() *Cluster
}
BundleBuilder provides fluent interface for building Bundle configurations
type BundleBuilderImpl ¶
type BundleBuilderImpl struct {
// contains filtered or unexported fields
}
BundleBuilderImpl implements BundleBuilder with immutable pattern
func (*BundleBuilderImpl) Build ¶
func (bb *BundleBuilderImpl) Build() *Cluster
Build finalizes the cluster construction
func (*BundleBuilderImpl) End ¶
func (bb *BundleBuilderImpl) End() NodeBuilder
End returns to the parent NodeBuilder
func (*BundleBuilderImpl) WithApplication ¶
func (bb *BundleBuilderImpl) WithApplication(name string, appConfig ApplicationConfig) BundleBuilder
WithApplication adds an application to the bundle
func (*BundleBuilderImpl) WithDependency ¶
func (bb *BundleBuilderImpl) WithDependency(bundle *Bundle) BundleBuilder
WithDependency adds a bundle dependency
func (*BundleBuilderImpl) WithSourceRef ¶
func (bb *BundleBuilderImpl) WithSourceRef(sourceRef *SourceRef) BundleBuilder
WithSourceRef sets the source reference
type Cluster ¶
type Cluster struct {
Name string `yaml:"name"`
Node *Node `yaml:"node,omitempty"`
GitOps *GitOpsConfig `yaml:"gitops,omitempty"`
}
Cluster describes a cluster configuration. A cluster configuration is a set of configurations that are packaged in one or more package units
func NewCluster ¶
NewCluster creates a Cluster with the provided metadata.
func (*Cluster) GetGitOps ¶
func (c *Cluster) GetGitOps() *GitOpsConfig
func (*Cluster) SetGitOps ¶
func (c *Cluster) SetGitOps(g *GitOpsConfig)
type ClusterBuilder ¶
type ClusterBuilder interface {
WithNode(name string) NodeBuilder
WithGitOps(gitops *GitOpsConfig) ClusterBuilder
Build() *Cluster
}
ClusterBuilder provides fluent interface for building Cluster configurations
func NewClusterBuilder ¶
func NewClusterBuilder(name string) ClusterBuilder
NewClusterBuilder creates a new fluent cluster builder
type ClusterBuilderImpl ¶
type ClusterBuilderImpl struct {
// contains filtered or unexported fields
}
ClusterBuilderImpl implements ClusterBuilder with immutable pattern
func (*ClusterBuilderImpl) Build ¶
func (cb *ClusterBuilderImpl) Build() *Cluster
Build finalizes the cluster construction
func (*ClusterBuilderImpl) WithGitOps ¶
func (cb *ClusterBuilderImpl) WithGitOps(gitops *GitOpsConfig) ClusterBuilder
WithGitOps sets GitOps configuration
func (*ClusterBuilderImpl) WithNode ¶
func (cb *ClusterBuilderImpl) WithNode(name string) NodeBuilder
WithNode adds a child node and returns a NodeBuilder for chaining
type GitOpsConfig ¶
type GitOpsConfig struct {
Type string `yaml:"type"` // "flux" or "argocd"
Bootstrap *BootstrapConfig `yaml:"bootstrap,omitempty"`
}
GitOpsConfig defines the GitOps tool configuration for the cluster
type Node ¶
type Node struct {
// Name identifies the application set.
Name string `yaml:"name"`
// ParentPath is the hierarchical path to the parent node (e.g., "cluster/infrastructure")
// Empty for root nodes. This avoids circular references while maintaining hierarchy.
ParentPath string `yaml:"parentPath,omitempty"`
// Children list child bundles
Children []*Node `yaml:"children,omitempty"`
// PackageRef identifies in which package the tree of resources get bundled together
// If undefined, the PackageRef of the parent is inherited
PackageRef *schema.GroupVersionKind `yaml:"packageref,omitempty"`
// Bundle holds the applications that get deployed on this level
Bundle *Bundle `yaml:"bundle,omitempty"`
// contains filtered or unexported fields
}
Node represents a hierarchic structure holding all deployment bundles each tree has a list of children, which can be a deployment, or a subtree It could match a kubernetes cluster's full configuration, or it could be just a part of that, when parts are e.g. packaged in different OCI artifacts Tree's with a common PackageRef are packaged together
func (*Node) GetChildren ¶
func (*Node) GetPackageRef ¶
func (n *Node) GetPackageRef() *schema.GroupVersionKind
func (*Node) GetParentPath ¶
func (*Node) InitializePathMap ¶
func (n *Node) InitializePathMap()
InitializePathMap builds the runtime path lookup map for efficient hierarchy navigation. This should be called on the root node after the tree structure is complete.
func (*Node) SetChildren ¶
func (*Node) SetPackageRef ¶
func (n *Node) SetPackageRef(ref *schema.GroupVersionKind)
func (*Node) SetParent ¶
SetParent sets the parent node and updates the ParentPath accordingly. This method maintains both the serializable path and runtime reference.
func (*Node) SetParentPath ¶
type NodeBuilder ¶
type NodeBuilder interface {
WithChild(name string) NodeBuilder
WithBundle(name string) BundleBuilder
WithPackageRef(ref *schema.GroupVersionKind) NodeBuilder
End() ClusterBuilder
Build() *Cluster
}
NodeBuilder provides fluent interface for building Node configurations
type NodeBuilderImpl ¶
type NodeBuilderImpl struct {
// contains filtered or unexported fields
}
NodeBuilderImpl implements NodeBuilder with immutable pattern
func (*NodeBuilderImpl) Build ¶
func (nb *NodeBuilderImpl) Build() *Cluster
Build finalizes the cluster construction
func (*NodeBuilderImpl) End ¶
func (nb *NodeBuilderImpl) End() ClusterBuilder
End returns to the parent ClusterBuilder
func (*NodeBuilderImpl) WithBundle ¶
func (nb *NodeBuilderImpl) WithBundle(name string) BundleBuilder
WithBundle adds a bundle to the current node
func (*NodeBuilderImpl) WithChild ¶
func (nb *NodeBuilderImpl) WithChild(name string) NodeBuilder
WithChild adds a child node
func (*NodeBuilderImpl) WithPackageRef ¶
func (nb *NodeBuilderImpl) WithPackageRef(ref *schema.GroupVersionKind) NodeBuilder
WithPackageRef sets the package reference
type Workflow ¶
type Workflow interface {
// GenerateFromCluster creates GitOps resources from a cluster definition.
// This is the primary entry point for resource generation.
GenerateFromCluster(*Cluster) ([]client.Object, error)
// CreateLayoutWithResources creates a new manifest layout that includes
// both the application manifests and the GitOps resources needed to
// deploy them. This combines manifest generation with GitOps resource
// generation in a single operation.
// The rules parameter is expected to be of type layout.LayoutRules
CreateLayoutWithResources(*Cluster, interface{}) (interface{}, error)
// GenerateBootstrap creates bootstrap resources for initializing the
// GitOps system itself. This is used to set up the GitOps controller
// (Flux, ArgoCD, etc.) in the cluster.
GenerateBootstrap(*BootstrapConfig, *Node) ([]client.Object, error)
}
Workflow defines the core interface for GitOps workflow implementations. This interface provides a minimal abstraction for converting stack definitions into GitOps-specific resources (Flux Kustomizations, ArgoCD Applications, etc.).
func NewWorkflow ¶
NewWorkflow creates a workflow implementation based on the provider type. Supported providers: "flux", "argocd"
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package generators provides a pluggable system for generating Kubernetes resources from different configuration formats.
|
Package generators provides a pluggable system for generating Kubernetes resources from different configuration formats. |
|
appworkload
Package appworkload provides generators for creating standard Kubernetes workloads (Deployments, StatefulSets, DaemonSets) along with their associated resources (Services, Ingresses, PersistentVolumeClaims).
|
Package appworkload provides generators for creating standard Kubernetes workloads (Deployments, StatefulSets, DaemonSets) along with their associated resources (Services, Ingresses, PersistentVolumeClaims). |
|
fluxhelm
Package fluxhelm provides generators for creating Flux HelmRelease resources along with their associated source resources (HelmRepository, GitRepository, OCIRepository, or Bucket).
|
Package fluxhelm provides generators for creating Flux HelmRelease resources along with their associated source resources (HelmRepository, GitRepository, OCIRepository, or Bucket). |
|
Package layout provides utilities for generating cluster directory layouts and for writing Kubernetes and Flux manifests to disk.
|
Package layout provides utilities for generating cluster directory layouts and for writing Kubernetes and Flux manifests to disk. |