Reimplementation of the helm operator to enrich the Helm operator's reconciliation with custom Go code to create a hybrid operator.
The Helm operator type automates Helm chart operations
by mapping the values of a Helm chart exactly to a
CustomResourceDefinition
and defining its watched resources in a watches.yaml
configuration file.
For creating a Level II+ operator that reuses an already existing Helm chart, a hybrid between the Go and Helm operator types is necessary.
The hybrid approach allows adding customizations to the Helm operator, such as:
- value mapping based on cluster state, or
- executing code in specific events.
// Operator's main.go
chart, err := loader.Load("path/to/chart")
if err != nil {
panic(err)
}
reconciler := reconciler.New(
reconciler.WithChart(*chart),
reconciler.WithGroupVersionKind(gvk),
)
if err := reconciler.SetupWithManager(mgr); err != nil {
panic(fmt.Sprintf("unable to create reconciler: %s", err))
}
The Helm operator type automates Helm chart operations
by mapping the values of a Helm chart exactly to a
CustomResourceDefinition
and defining its watched resources in a watches.yaml
configuration file.
For creating a Level II+ operator that reuses an already existing Helm chart, we need a hybrid between the Go and Helm operator types.
The hybrid approach allows adding customizations to the Helm operator, such as:
- value mapping based on cluster state, or
- executing code in specific events.
-
Add this module as a replace directive to your
go.mod
:go mod edit -replace=github.com/joelanford/helm-operator=github.com/stackrox/helm-operator@main
For example:
chart, err := loader.Load("path/to/chart") if err != nil { panic(err) } reconciler := reconciler.New( reconciler.WithChart(*chart), reconciler.WithGroupVersionKind(gvk), ) if err := reconciler.SetupWithManager(mgr); err != nil { panic(fmt.Sprintf("unable to create reconciler: %s", err)) }