|
|
|
@ -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) Handle(obj *v1.Addon, status v1.AddonStatus) (v1.AddonStatus, error) {
|
|
|
|
|
objs, newStatus, err := a.AddonGeneratingHandler(obj, status)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return newStatus, err
|
|
|
|
|
func (a *addonGeneratingHandler) Remove(key string, obj *v1.Addon) (*v1.Addon, error) {
|
|
|
|
|
if obj != nil {
|
|
|
|
|
return obj, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
apply := a.apply
|
|
|
|
|
|
|
|
|
|
if !a.opts.DynamicLookup {
|
|
|
|
|
apply = apply.WithStrictCaching()
|
|
|
|
|
}
|
|
|
|
|
obj = &v1.Addon{}
|
|
|
|
|
obj.Namespace, obj.Name = kv.RSplit(key, "/")
|
|
|
|
|
obj.SetGroupVersionKind(a.gvk)
|
|
|
|
|
|
|
|
|
|
if !a.opts.AllowCrossNamespace && !a.opts.AllowClusterScoped {
|
|
|
|
|
apply = apply.WithSetOwnerReference(true, false).
|
|
|
|
|
WithDefaultNamespace(obj.GetNamespace()).
|
|
|
|
|
WithListerNamespace(obj.GetNamespace())
|
|
|
|
|
}
|
|
|
|
|
return nil, generic.ConfigureApplyForObject(a.apply, obj, &a.opts).
|
|
|
|
|
WithOwner(obj).
|
|
|
|
|
WithSetID(a.name).
|
|
|
|
|
ApplyObjects()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !a.opts.AllowClusterScoped {
|
|
|
|
|
apply = apply.WithRestrictClusterScoped()
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return newStatus, apply.
|
|
|
|
|
return newStatus, generic.ConfigureApplyForObject(a.apply, obj, &a.opts).
|
|
|
|
|
WithOwner(obj).
|
|
|
|
|
WithSetID(a.name).
|
|
|
|
|
ApplyObjects(objs...)
|
|
|
|
|