Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 5 additions & 23 deletions pkg/controller/common/customize/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package customize

import (
"metacontroller/pkg/internal/testutils"
"reflect"
"testing"

Expand All @@ -26,6 +25,8 @@ import (
dynamicclientset "metacontroller/pkg/dynamic/clientset"
dynamicinformer "metacontroller/pkg/dynamic/informer"

. "metacontroller/pkg/internal/testutils/hooks"

v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
Expand All @@ -34,29 +35,10 @@ var fakeEnqueueParent = func(obj interface{}) {}
var dynClient = dynamicclientset.Clientset{}
var dynInformers = dynamicinformer.SharedInformerFactory{}

type nilCustomizableController struct {
}

func (cc *nilCustomizableController) GetCustomizeHook() *v1alpha1.Hook {
return nil
}

type fakeCustomizableController struct {
}

func (cc *fakeCustomizableController) GetCustomizeHook() *v1alpha1.Hook {
url := "fake"
return &v1alpha1.Hook{
Webhook: &v1alpha1.Webhook{
URL: &url,
},
}
}

var customizeManagerWithNilController, _ = NewCustomizeManager(
"test",
fakeEnqueueParent,
&nilCustomizableController{},
&NilCustomizableController{},
&dynClient,
&dynInformers,
make(common.InformerMap),
Expand All @@ -68,7 +50,7 @@ var customizeManagerWithNilController, _ = NewCustomizeManager(
var customizeManagerWithFakeController, _ = NewCustomizeManager(
"test",
fakeEnqueueParent,
&fakeCustomizableController{},
&FakeCustomizableController{},
&dynClient,
&dynInformers,
make(common.InformerMap),
Expand Down Expand Up @@ -106,7 +88,7 @@ func TestGetRelatedObject_requestResponse(t *testing.T) {
}},
}

customizeManagerWithFakeController.customizeHook = testutils.NewHookExecutorStub(expectedResponse)
customizeManagerWithFakeController.customizeHook = NewHookExecutorStub(expectedResponse)
parent := &unstructured.Unstructured{}
parent.SetName("othertest")
parent.SetGeneration(1)
Expand Down
33 changes: 29 additions & 4 deletions pkg/controller/common/manage_children.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
dynamicapply "metacontroller/pkg/dynamic/apply"
dynamicclientset "metacontroller/pkg/dynamic/clientset"

apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
Expand Down Expand Up @@ -184,7 +185,12 @@ func deleteChildren(client *dynamicclientset.ResourceClient, parent *unstructure
},
)
if err != nil {
errs = append(errs, fmt.Errorf("can't delete %v: %w", describeObject(obj), err))
if apierrors.IsNotFound(err) {
// Swallow the error since there's no point retrying if the child is gone.
logging.Logger.Info("Failed to delete child, child object has been deleted", "parent", parent, "child", obj)
} else {
errs = append(errs, fmt.Errorf("can't delete %v: %w", describeObject(obj), err))
}
continue
}
}
Expand Down Expand Up @@ -251,14 +257,28 @@ func updateChildren(client *dynamicclientset.ResourceClient, updateStrategy Chil
},
)
if err != nil {
errs = append(errs, err)
if apierrors.IsNotFound(err) {
// Swallow the error since there's no point retrying if the child is gone.
logging.Logger.Info("Failed to delete child, child object has been deleted", "parent", parent, "child", obj)
} else {
errs = append(errs, err)
}
continue
}
case v1alpha1.ChildUpdateInPlace, v1alpha1.ChildUpdateRollingInPlace:
// Update the object in-place.
logging.Logger.Info("Updating", "parent", parent, "child", obj, "reason", "Recreate update strategy selected")
if _, err := client.Namespace(ns).Update(context.TODO(), newObj, metav1.UpdateOptions{}); err != nil {
errs = append(errs, err)
switch {
case apierrors.IsNotFound(err):
// Swallow the error since there's no point retrying if the child is gone.
logging.Logger.Info("Failed to update child, child object has been deleted", "parent", parent, "child", obj)
case apierrors.IsConflict(err):
// it is possible that the object was modified after this sync was started, ignore conflict since we will reconcile again
logging.Logger.Info("Failed to update child due to outdated resourceVersion", "parent", parent, "child", obj)
default:
errs = append(errs, err)
}
continue
}
default:
Expand Down Expand Up @@ -286,7 +306,12 @@ func updateChildren(client *dynamicclientset.ResourceClient, updateStrategy Chil
obj.SetOwnerReferences(ownerRefs)

if _, err := client.Namespace(ns).Create(context.TODO(), obj, metav1.CreateOptions{}); err != nil {
errs = append(errs, err)
if apierrors.IsAlreadyExists(err) {
// Swallow the error since there's no point retrying if the child already exists
logging.Logger.Info("Failed to create child, child object already exists", "parent", parent, "child", obj)
} else {
errs = append(errs, err)
}
continue
}
}
Expand Down
Loading