Configurable dependency requeuing
Add command argument for configuring the interval at which failing dependencies are reevaluated.
This commit is contained in:
parent
e4b5a29f3a
commit
d11e76d322
|
|
@ -47,8 +47,9 @@ import (
|
||||||
// KustomizationReconciler reconciles a Kustomization object
|
// KustomizationReconciler reconciles a Kustomization object
|
||||||
type KustomizationReconciler struct {
|
type KustomizationReconciler struct {
|
||||||
client.Client
|
client.Client
|
||||||
Log logr.Logger
|
requeueDependency time.Duration
|
||||||
Scheme *runtime.Scheme
|
Log logr.Logger
|
||||||
|
Scheme *runtime.Scheme
|
||||||
}
|
}
|
||||||
|
|
||||||
// +kubebuilder:rbac:groups=kustomize.fluxcd.io,resources=kustomizations,verbs=get;list;watch;create;update;patch;delete
|
// +kubebuilder:rbac:groups=kustomize.fluxcd.io,resources=kustomizations,verbs=get;list;watch;create;update;patch;delete
|
||||||
|
|
@ -126,12 +127,11 @@ func (r *KustomizationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
|
||||||
return ctrl.Result{Requeue: true}, err
|
return ctrl.Result{Requeue: true}, err
|
||||||
}
|
}
|
||||||
// we can't rely on exponential backoff because it will prolong the execution too much,
|
// we can't rely on exponential backoff because it will prolong the execution too much,
|
||||||
// instead we requeue every half a minute.
|
// instead we requeue on a fix interval.
|
||||||
requeueAfter := 30 * time.Second
|
msg := fmt.Sprintf("Dependencies do not meet ready condition, retrying in %s", r.requeueDependency.String())
|
||||||
msg := fmt.Sprintf("Dependencies do not meet ready condition, retrying in %s", requeueAfter.String())
|
|
||||||
log.Error(err, msg)
|
log.Error(err, msg)
|
||||||
r.alert(kustomization, msg, "info")
|
r.alert(kustomization, msg, "info")
|
||||||
return ctrl.Result{RequeueAfter: requeueAfter}, nil
|
return ctrl.Result{RequeueAfter: r.requeueDependency}, nil
|
||||||
}
|
}
|
||||||
log.Info("All dependencies area ready, proceeding with apply")
|
log.Info("All dependencies area ready, proceeding with apply")
|
||||||
}
|
}
|
||||||
|
|
@ -160,10 +160,12 @@ func (r *KustomizationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
|
||||||
}
|
}
|
||||||
|
|
||||||
type KustomizationReconcilerOptions struct {
|
type KustomizationReconcilerOptions struct {
|
||||||
MaxConcurrentReconciles int
|
MaxConcurrentReconciles int
|
||||||
|
DependencyRequeueInterval time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *KustomizationReconciler) SetupWithManager(mgr ctrl.Manager, opts KustomizationReconcilerOptions) error {
|
func (r *KustomizationReconciler) SetupWithManager(mgr ctrl.Manager, opts KustomizationReconcilerOptions) error {
|
||||||
|
r.requeueDependency = opts.DependencyRequeueInterval
|
||||||
return ctrl.NewControllerManagedBy(mgr).
|
return ctrl.NewControllerManagedBy(mgr).
|
||||||
For(&kustomizev1.Kustomization{}).
|
For(&kustomizev1.Kustomization{}).
|
||||||
WithEventFilter(KustomizationGarbageCollectPredicate{Log: r.Log}).
|
WithEventFilter(KustomizationGarbageCollectPredicate{Log: r.Log}).
|
||||||
|
|
|
||||||
6
main.go
6
main.go
|
|
@ -19,6 +19,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
|
||||||
|
|
@ -50,6 +51,7 @@ func main() {
|
||||||
metricsAddr string
|
metricsAddr string
|
||||||
enableLeaderElection bool
|
enableLeaderElection bool
|
||||||
concurrent int
|
concurrent int
|
||||||
|
requeueDependency time.Duration
|
||||||
logJSON bool
|
logJSON bool
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -58,6 +60,7 @@ func main() {
|
||||||
"Enable leader election for controller manager. "+
|
"Enable leader election for controller manager. "+
|
||||||
"Enabling this will ensure there is only one active controller manager.")
|
"Enabling this will ensure there is only one active controller manager.")
|
||||||
flag.IntVar(&concurrent, "concurrent", 4, "The number of concurrent kustomize reconciles.")
|
flag.IntVar(&concurrent, "concurrent", 4, "The number of concurrent kustomize reconciles.")
|
||||||
|
flag.DurationVar(&requeueDependency, "requeue-dependency", 30*time.Second, "The interval at which failing dependencies are reevaluated.")
|
||||||
flag.BoolVar(&logJSON, "log-json", false, "Set logging to JSON format.")
|
flag.BoolVar(&logJSON, "log-json", false, "Set logging to JSON format.")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
|
@ -89,7 +92,8 @@ func main() {
|
||||||
Log: ctrl.Log.WithName("controllers").WithName("Kustomization"),
|
Log: ctrl.Log.WithName("controllers").WithName("Kustomization"),
|
||||||
Scheme: mgr.GetScheme(),
|
Scheme: mgr.GetScheme(),
|
||||||
}).SetupWithManager(mgr, controllers.KustomizationReconcilerOptions{
|
}).SetupWithManager(mgr, controllers.KustomizationReconcilerOptions{
|
||||||
MaxConcurrentReconciles: concurrent,
|
MaxConcurrentReconciles: concurrent,
|
||||||
|
DependencyRequeueInterval: requeueDependency,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
setupLog.Error(err, "unable to create controller", "controller", "Kustomization")
|
setupLog.Error(err, "unable to create controller", "controller", "Kustomization")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue