diff --git a/pkg/generated/controllers/k3s.cattle.io/factory.go b/pkg/generated/controllers/k3s.cattle.io/factory.go index 2a6cd58db3..9191cb0d80 100644 --- a/pkg/generated/controllers/k3s.cattle.io/factory.go +++ b/pkg/generated/controllers/k3s.cattle.io/factory.go @@ -52,18 +52,23 @@ func NewFactoryFromConfigOrDie(config *rest.Config) *Factory { } func NewFactoryFromConfig(config *rest.Config) (*Factory, error) { - cs, err := clientset.NewForConfig(config) - if err != nil { - return nil, err - } - - informerFactory := informers.NewSharedInformerFactory(cs, 2*time.Hour) - return NewFactory(cs, informerFactory), nil + return NewFactoryFromConfigWithOptions(config, nil) } func NewFactoryFromConfigWithNamespace(config *rest.Config, namespace string) (*Factory, error) { - if namespace == "" { - return NewFactoryFromConfig(config) + return NewFactoryFromConfigWithOptions(config, &FactoryOptions{ + Namespace: namespace, + }) +} + +type FactoryOptions struct { + Namespace string + Resync time.Duration +} + +func NewFactoryFromConfigWithOptions(config *rest.Config, opts *FactoryOptions) (*Factory, error) { + if opts == nil { + opts = &FactoryOptions{} } cs, err := clientset.NewForConfig(config) @@ -71,7 +76,17 @@ func NewFactoryFromConfigWithNamespace(config *rest.Config, namespace string) (* return nil, err } - informerFactory := informers.NewSharedInformerFactoryWithOptions(cs, 2*time.Hour, informers.WithNamespace(namespace)) + resync := opts.Resync + if resync == 0 { + resync = 2 * time.Hour + } + + if opts.Namespace == "" { + informerFactory := informers.NewSharedInformerFactory(cs, resync) + return NewFactory(cs, informerFactory), nil + } + + informerFactory := informers.NewSharedInformerFactoryWithOptions(cs, resync, informers.WithNamespace(opts.Namespace)) return NewFactory(cs, informerFactory), nil } diff --git a/pkg/generated/controllers/k3s.cattle.io/v1/addon.go b/pkg/generated/controllers/k3s.cattle.io/v1/addon.go index fb693832c0..70821f25b4 100644 --- a/pkg/generated/controllers/k3s.cattle.io/v1/addon.go +++ b/pkg/generated/controllers/k3s.cattle.io/v1/addon.go @@ -29,6 +29,7 @@ import ( "github.com/rancher/wrangler/pkg/apply" "github.com/rancher/wrangler/pkg/condition" "github.com/rancher/wrangler/pkg/generic" + "github.com/rancher/wrangler/pkg/kv" "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -267,6 +268,7 @@ func RegisterAddonGeneratingHandler(ctx context.Context, controller AddonControl if opts != nil { statusHandler.opts = *opts } + controller.OnChange(ctx, name, statusHandler.Remove) RegisterAddonStatusHandler(ctx, controller, condition, name, statusHandler.Handle) } @@ -281,7 +283,7 @@ func (a *addonStatusHandler) sync(key string, obj *v1.Addon) (*v1.Addon, error) return obj, nil } - origStatus := obj.Status + origStatus := obj.Status.DeepCopy() obj = obj.DeepCopy() newStatus, err := a.handler(obj, obj.Status) if err != nil { @@ -289,16 +291,16 @@ func (a *addonStatusHandler) sync(key string, obj *v1.Addon) (*v1.Addon, error) newStatus = *origStatus.DeepCopy() } - obj.Status = newStatus if a.condition != "" { if errors.IsConflict(err) { - a.condition.SetError(obj, "", nil) + a.condition.SetError(&newStatus, "", nil) } else { - a.condition.SetError(obj, "", err) + a.condition.SetError(&newStatus, "", err) } } - if !equality.Semantic.DeepEqual(origStatus, obj.Status) { + if !equality.Semantic.DeepEqual(origStatus, &newStatus) { var newErr error + obj.Status = newStatus obj, newErr = a.client.UpdateStatus(obj) if err == nil { err = newErr @@ -315,29 +317,28 @@ type addonGeneratingHandler struct { name string } +func (a *addonGeneratingHandler) Remove(key string, obj *v1.Addon) (*v1.Addon, error) { + if obj != nil { + return obj, nil + } + + obj = &v1.Addon{} + obj.Namespace, obj.Name = kv.RSplit(key, "/") + obj.SetGroupVersionKind(a.gvk) + + return nil, generic.ConfigureApplyForObject(a.apply, obj, &a.opts). + WithOwner(obj). + WithSetID(a.name). + ApplyObjects() +} + func (a *addonGeneratingHandler) Handle(obj *v1.Addon, status v1.AddonStatus) (v1.AddonStatus, error) { objs, newStatus, err := a.AddonGeneratingHandler(obj, status) if err != nil { return newStatus, err } - apply := a.apply - - if !a.opts.DynamicLookup { - apply = apply.WithStrictCaching() - } - - if !a.opts.AllowCrossNamespace && !a.opts.AllowClusterScoped { - apply = apply.WithSetOwnerReference(true, false). - WithDefaultNamespace(obj.GetNamespace()). - WithListerNamespace(obj.GetNamespace()) - } - - if !a.opts.AllowClusterScoped { - apply = apply.WithRestrictClusterScoped() - } - - return newStatus, apply. + return newStatus, generic.ConfigureApplyForObject(a.apply, obj, &a.opts). WithOwner(obj). WithSetID(a.name). ApplyObjects(objs...)