1
0
mirror of https://github.com/rancher/norman.git synced 2025-09-10 03:29:14 +00:00

Fix error handling in lifecycle

This commit is contained in:
Darren Shepherd
2017-12-16 01:22:48 -07:00
parent 4044cb0141
commit 2321c6cbaf

View File

@@ -51,7 +51,11 @@ func (o *objectLifecycleAdapter) sync(key string, obj runtime.Object) error {
return err return err
} }
obj = obj.DeepCopyObject()
if newObj, err := o.lifecycle.Updated(obj); err != nil { if newObj, err := o.lifecycle.Updated(obj); err != nil {
if newObj != nil {
o.objectClient.Update(metadata.GetName(), newObj)
}
return err return err
} else if newObj != nil { } else if newObj != nil {
_, err = o.objectClient.Update(metadata.GetName(), newObj) _, err = o.objectClient.Update(metadata.GetName(), newObj)
@@ -72,29 +76,39 @@ func (o *objectLifecycleAdapter) finalize(metadata metav1.Object, obj runtime.Ob
} }
obj = obj.DeepCopyObject() obj = obj.DeepCopyObject()
if newObj, err := o.lifecycle.Finalize(obj); err != nil {
if newObj != nil {
o.objectClient.Update(metadata.GetName(), newObj)
}
return false, err
} else if newObj != nil {
obj = newObj
}
if err := removeFinalizer(o.name, obj); err != nil {
return false, err
}
_, err := o.objectClient.Update(metadata.GetName(), obj)
return false, err
}
func removeFinalizer(name string, obj runtime.Object) error {
metadata, err := meta.Accessor(obj) metadata, err := meta.Accessor(obj)
if err != nil { if err != nil {
return false, err return err
} }
var finalizers []string var finalizers []string
for _, finalizer := range metadata.GetFinalizers() { for _, finalizer := range metadata.GetFinalizers() {
if finalizer == o.name { if finalizer == name {
continue continue
} }
finalizers = append(finalizers, finalizer) finalizers = append(finalizers, finalizer)
} }
metadata.SetFinalizers(finalizers) metadata.SetFinalizers(finalizers)
if newObj, err := o.lifecycle.Finalize(obj); err != nil { return nil
return false, err
} else if newObj != nil {
_, err = o.objectClient.Update(metadata.GetName(), newObj)
} else {
_, err = o.objectClient.Update(metadata.GetName(), obj)
}
return false, err
} }
func (o *objectLifecycleAdapter) createKey() string { func (o *objectLifecycleAdapter) createKey() string {
@@ -104,28 +118,31 @@ func (o *objectLifecycleAdapter) createKey() string {
func (o *objectLifecycleAdapter) create(metadata metav1.Object, obj runtime.Object) (bool, error) { func (o *objectLifecycleAdapter) create(metadata metav1.Object, obj runtime.Object) (bool, error) {
initialized := o.createKey() initialized := o.createKey()
if metadata.GetLabels()[initialized] == "true" { if metadata.GetAnnotations()[initialized] == "true" {
return true, nil return true, nil
} }
obj = obj.DeepCopyObject() obj = obj.DeepCopyObject()
if newObj, err := o.lifecycle.Create(obj); err != nil {
if newObj != nil {
o.objectClient.Update(metadata.GetName(), newObj)
}
return false, err
} else if newObj != nil {
obj = newObj
}
metadata, err := meta.Accessor(obj) metadata, err := meta.Accessor(obj)
if err != nil { if err != nil {
return false, err return false, err
} }
if metadata.GetLabels() == nil { if metadata.GetAnnotations() == nil {
metadata.SetLabels(map[string]string{}) metadata.SetAnnotations(map[string]string{})
} }
metadata.SetFinalizers(append(metadata.GetFinalizers(), o.name)) metadata.SetFinalizers(append(metadata.GetFinalizers(), o.name))
metadata.GetLabels()[initialized] = "true" metadata.GetAnnotations()[initialized] = "true"
if newObj, err := o.lifecycle.Create(obj); err != nil {
return false, err
} else if newObj != nil {
_, err = o.objectClient.Update(metadata.GetName(), newObj)
return false, err
}
_, err = o.objectClient.Update(metadata.GetName(), obj) _, err = o.objectClient.Update(metadata.GetName(), obj)
return false, err return false, err