Skip to content

Commit ca053bf

Browse files
authored
Update controller-runtime to v0.15 and k8s dep to v0.27 (#551)
* fixes for controller-runtime upgrade and breaking changes * unit test changes with deletionTimestamp and fakeClient * mod tidy, fix toolchain common replace version * remove commented out code * remove unused function lint check * replace deprecated Poll function to fix linter error * correct replace fork version, should fix snyk error too * add finalizer, fix lint * remove emoty status in test * update versions * update api and common latest version * format * update redhat-cop/operator-utils * update common version * update kustome and controller-gen version in makefile * v5 * remove replace, update versions after merge * remove replace
1 parent 56327d5 commit ca053bf

18 files changed

+239
-1160
lines changed

controllers/idler/idler_controller_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ func TestReconcile(t *testing.T) {
8080
idler := &toolchainv1alpha1.Idler{
8181
ObjectMeta: metav1.ObjectMeta{
8282
Name: "being-deleted",
83+
Finalizers: []string{"toolchain.dev.openshift.com"},
8384
DeletionTimestamp: &now,
8485
},
8586
Spec: toolchainv1alpha1.IdlerSpec{TimeoutSeconds: 30},
@@ -635,7 +636,7 @@ func TestEnsureIdlingFailed(t *testing.T) {
635636
require.NoError(t, err)
636637

637638
// second reconcile to delete pods and create notification
638-
cl.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
639+
cl.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error {
639640
return fmt.Errorf("cannot set status to fail")
640641
}
641642
_, err = reconciler.Reconcile(context.TODO(), req)
@@ -935,7 +936,7 @@ func TestCreateNotification(t *testing.T) {
935936
nsTmplSet := newNSTmplSet(test.MemberOperatorNs, "alex", "advanced", "abcde11", namespaces, usernames)
936937
mur := newMUR("alex")
937938
reconciler, _, cl, _, _ := prepareReconcile(t, idler.Name, getHostCluster, idler, nsTmplSet, mur)
938-
cl.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
939+
cl.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error {
939940
return errors.New("can't update condition")
940941
}
941942
//when
@@ -1327,7 +1328,7 @@ func createPods(t *testing.T, r *Reconciler, owner metav1.Object, startTime meta
13271328
return podsToTrack
13281329
}
13291330

1330-
func prepareReconcile(t *testing.T, name string, getHostClusterFunc func(fakeClient client.Client) cluster.GetHostClusterFunc, initIdlerObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient, *test.FakeClient, *fakedynamic.FakeDynamicClient) {
1331+
func prepareReconcile(t *testing.T, name string, getHostClusterFunc func(fakeClient client.Client) cluster.GetHostClusterFunc, initIdlerObjs ...client.Object) (*Reconciler, reconcile.Request, *test.FakeClient, *test.FakeClient, *fakedynamic.FakeDynamicClient) {
13311332
s := scheme.Scheme
13321333
err := apis.AddToScheme(s)
13331334
require.NoError(t, err)

controllers/memberoperatorconfig/mapper.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package memberoperatorconfig
22

33
import (
4+
"context"
45
corev1 "k8s.io/api/core/v1"
56
"k8s.io/apimachinery/pkg/types"
67
ctrl "sigs.k8s.io/controller-runtime"
@@ -11,8 +12,8 @@ import (
1112
var mapperLog = ctrl.Log.WithName("SecretToMemberOperatorConfigMapper")
1213

1314
// MapSecretToMemberOperatorConfig maps secrets to the singular instance of MemberOperatorConfig named "config"
14-
func MapSecretToMemberOperatorConfig() func(object client.Object) []reconcile.Request {
15-
return func(obj client.Object) []reconcile.Request {
15+
func MapSecretToMemberOperatorConfig() func(context context.Context, object client.Object) []reconcile.Request {
16+
return func(ctx context.Context, obj client.Object) []reconcile.Request {
1617
if secret, ok := obj.(*corev1.Secret); ok {
1718
mapperLog.Info("Secret mapped to MemberOperatorConfig", "name", secret.Name)
1819
return []reconcile.Request{{NamespacedName: types.NamespacedName{Namespace: secret.Namespace, Name: "config"}}}

controllers/memberoperatorconfig/mapper_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package memberoperatorconfig
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/codeready-toolchain/toolchain-common/pkg/test"
@@ -14,6 +15,7 @@ import (
1415

1516
func TestSecretToMemberOperatorConfigMapper(t *testing.T) {
1617
// when
18+
ctx := context.TODO()
1719
secretData := map[string][]byte{
1820
"che-admin-username": []byte("cheadmin"),
1921
"che-admin-password": []byte("password"),
@@ -24,7 +26,7 @@ func TestSecretToMemberOperatorConfigMapper(t *testing.T) {
2426
secret := newSecret("test-secret", secretData)
2527

2628
// when
27-
req := MapSecretToMemberOperatorConfig()(secret)
29+
req := MapSecretToMemberOperatorConfig()(ctx, secret)
2830

2931
// then
3032
require.Len(t, req, 1)
@@ -39,7 +41,7 @@ func TestSecretToMemberOperatorConfigMapper(t *testing.T) {
3941
pod := &corev1.Pod{}
4042

4143
// when
42-
req := MapSecretToMemberOperatorConfig()(pod)
44+
req := MapSecretToMemberOperatorConfig()(ctx, pod)
4345

4446
// then
4547
assert.Empty(t, req)

controllers/memberoperatorconfig/memberoperatorconfig_controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@ import (
2020
"sigs.k8s.io/controller-runtime/pkg/manager"
2121
"sigs.k8s.io/controller-runtime/pkg/predicate"
2222
"sigs.k8s.io/controller-runtime/pkg/reconcile"
23-
"sigs.k8s.io/controller-runtime/pkg/source"
2423
)
2524

2625
// SetupWithManager sets up the controller with the Manager.
2726
func (r *Reconciler) SetupWithManager(mgr manager.Manager) error {
2827
return ctrl.NewControllerManagedBy(mgr).
2928
For(&toolchainv1alpha1.MemberOperatorConfig{}, builder.WithPredicates(predicate.GenerationChangedPredicate{})).
30-
Watches(&source.Kind{Type: &corev1.Secret{}},
29+
Watches(&corev1.Secret{},
3130
handler.EnqueueRequestsFromMapFunc(MapSecretToMemberOperatorConfig())).
3231
Complete(r)
3332
}

controllers/memberoperatorconfig/memberoperatorconfig_controller_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
schedulingv1 "k8s.io/api/scheduling/v1"
2222
"k8s.io/apimachinery/pkg/api/errors"
2323
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24-
"k8s.io/apimachinery/pkg/runtime"
2524
"k8s.io/client-go/kubernetes/scheme"
2625
ctrl "sigs.k8s.io/controller-runtime"
2726
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -249,9 +248,9 @@ func TestHandleWebhookDeploy(t *testing.T) {
249248
err := apis.AddToScheme(s)
250249
require.NoError(t, err)
251250
objs, err := deploy.GetTemplateObjects(s, test.MemberOperatorNs, "test/image", []byte("asdfasdfasdf"))
252-
initObjs := []runtime.Object{config}
251+
initObjs := []client.Object{config}
253252
for _, obj := range objs {
254-
initObjs = append(initObjs, obj.DeepCopyObject())
253+
initObjs = append(initObjs, obj.DeepCopyObject().(client.Object))
255254
}
256255
require.NoError(t, err)
257256
controller, cl := prepareReconcile(t, initObjs...)
@@ -317,7 +316,7 @@ func TestHandleWebhookDeploy(t *testing.T) {
317316
})
318317
}
319318

320-
func prepareReconcile(t *testing.T, initObjs ...runtime.Object) (*Reconciler, client.Client) {
319+
func prepareReconcile(t *testing.T, initObjs ...client.Object) (*Reconciler, client.Client) {
321320
os.Setenv("WATCH_NAMESPACE", test.MemberOperatorNs)
322321
restore := test.SetEnvVarAndRestore(t, "MEMBER_OPERATOR_WEBHOOK_IMAGE", "webhookimage")
323322
t.Cleanup(restore)

controllers/memberstatus/memberstatus_controller_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
corev1 "k8s.io/api/core/v1"
2626
"k8s.io/apimachinery/pkg/api/resource"
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28-
"k8s.io/apimachinery/pkg/runtime"
2928
"k8s.io/apimachinery/pkg/types"
3029
"k8s.io/client-go/kubernetes/scheme"
3130
"k8s.io/metrics/pkg/apis/metrics/v1beta1"
@@ -714,7 +713,7 @@ func newGetHostClusterNotExist(fakeClient client.Client) cluster.GetHostClusterF
714713
return NewGetHostClusterWithProbe(fakeClient, false, corev1.ConditionFalse, metav1.Now())
715714
}
716715

717-
func prepareReconcile(t *testing.T, requestName string, getHostClusterFunc func(fakeClient client.Client) cluster.GetHostClusterFunc, allNamespacesClient *test.FakeClient, lastGitHubAPICall time.Time, mockedGitHubClient commonclient.GetGitHubClientFunc, initObjs ...runtime.Object) (*Reconciler, reconcile.Request, *test.FakeClient) {
716+
func prepareReconcile(t *testing.T, requestName string, getHostClusterFunc func(fakeClient client.Client) cluster.GetHostClusterFunc, allNamespacesClient *test.FakeClient, lastGitHubAPICall time.Time, mockedGitHubClient commonclient.GetGitHubClientFunc, initObjs ...client.Object) (*Reconciler, reconcile.Request, *test.FakeClient) {
718717
logf.SetLogger(zap.New(zap.UseDevMode(true)))
719718
os.Setenv("WATCH_NAMESPACE", test.MemberOperatorNs)
720719
fakeClient := test.NewFakeClient(t, initObjs...)
@@ -779,8 +778,8 @@ func withMemoryUsage(usage string) nodeMetricsModifier {
779778
}
780779
}
781780

782-
func newNodesAndNodeMetrics(nodeAndMetricsCreators ...nodeAndMetricsCreator) []runtime.Object {
783-
var objects []runtime.Object
781+
func newNodesAndNodeMetrics(nodeAndMetricsCreators ...nodeAndMetricsCreator) []client.Object {
782+
var objects []client.Object
784783
for _, create := range nodeAndMetricsCreators {
785784
node, nodeMetrics := create()
786785
objects = append(objects, node, nodeMetrics)

controllers/nstemplateset/client_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
appsv1 "k8s.io/api/apps/v1"
1616
corev1 "k8s.io/api/core/v1"
1717
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18-
"k8s.io/apimachinery/pkg/runtime"
1918
"k8s.io/apimachinery/pkg/runtime/serializer"
2019
"k8s.io/client-go/kubernetes/scheme"
2120
runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
@@ -330,7 +329,7 @@ func newOptionalDeployment(name, owner string) *appsv1.Deployment {
330329
}
331330
}
332331

333-
func prepareAPIClient(t *testing.T, initObjs ...runtime.Object) (*APIClient, *test.FakeClient) {
332+
func prepareAPIClient(t *testing.T, initObjs ...runtimeclient.Object) (*APIClient, *test.FakeClient) {
334333
s := scheme.Scheme
335334
err := apis.AddToScheme(s)
336335
require.NoError(t, err)

controllers/nstemplateset/cluster_resources_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,7 @@ func TestDeleteClusterResources(t *testing.T) {
530530
t.Run("delete the second ClusterResourceQuota since the first one has deletion timestamp set", func(t *testing.T) {
531531
// given
532532
nsTmplSet := newNSTmplSet(namespaceName, spacename, "withemptycrq", withNamespaces("abcde11", "dev"), withClusterResources("abcde11"))
533-
crq := newClusterResourceQuota(spacename, "withemptycrq")
533+
crq := newClusterResourceQuota(spacename, "withemptycrq", withFinalizer())
534534
deletionTS := metav1.NewTime(time.Now())
535535
crq.SetDeletionTimestamp(&deletionTS)
536536
emptyCrq := newClusterResourceQuota("empty", "withemptycrq")

controllers/nstemplateset/namespaces_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ func TestEnsureNamespacesFail(t *testing.T) {
589589
nsTmplSet := newNSTmplSet(namespaceName, spacename, "basic", withNamespaces("abcde11", "dev"))
590590
devNS := newNamespace("advanced", spacename, "dev") // NS exists but is missing the resources
591591
manager, fakeClient := prepareNamespacesManager(t, nsTmplSet, devNS)
592-
fakeClient.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
592+
fakeClient.MockStatusUpdate = func(ctx context.Context, obj client.Object, opts ...client.SubResourceUpdateOption) error {
593593
return errors.New("unable to update NSTmplSet")
594594
}
595595

@@ -752,6 +752,7 @@ func TestDeleteNamespace(t *testing.T) {
752752
// given namespace with deletion timestamp
753753
timeStamp := metav1.Now()
754754
deletedNS := codeNS.DeepCopy()
755+
deletedNS.Finalizers = []string{toolchainv1alpha1.FinalizerName}
755756
deletedNS.DeletionTimestamp = &timeStamp
756757
manager, _ := prepareNamespacesManager(t, nsTmplSet, deletedNS)
757758

controllers/nstemplateset/nstemplateset_controller.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ func (r *Reconciler) SetupWithManager(mgr manager.Manager, allNamespaceCluster r
5858
mapToOwnerByLabel := handler.EnqueueRequestsFromMapFunc(commoncontroller.MapToOwnerByLabel("", toolchainv1alpha1.SpaceLabelKey))
5959
build := ctrl.NewControllerManagedBy(mgr).
6060
For(&toolchainv1alpha1.NSTemplateSet{}, builder.WithPredicates(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.AnnotationChangedPredicate{}))).
61-
Watches(&source.Kind{Type: &corev1.Namespace{}}, mapToOwnerByLabel).
62-
Watches(source.NewKindWithCache(&rbac.Role{}, allNamespaceCluster.GetCache()), mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{})).
63-
Watches(source.NewKindWithCache(&rbac.RoleBinding{}, allNamespaceCluster.GetCache()), mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{}))
61+
Watches(&corev1.Namespace{}, mapToOwnerByLabel).
62+
WatchesRawSource(source.Kind(allNamespaceCluster.GetCache(), &rbac.Role{}), mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{})).
63+
WatchesRawSource(source.Kind(allNamespaceCluster.GetCache(), &rbac.RoleBinding{}), mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{}))
6464
// watch for all cluster resource kinds associated with an NSTemplateSet
6565
for _, clusterResource := range clusterResourceKinds {
6666
// only reconcile generation changes for cluster resources and only when the API group is present in the cluster
6767
if apiGroupIsPresent(apiGroupList.Groups, clusterResource.gvk) {
68-
build = build.Watches(&source.Kind{Type: clusterResource.object}, mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{}))
68+
build = build.Watches(clusterResource.object, mapToOwnerByLabel, builder.WithPredicates(commonpredicates.LabelsAndGenerationPredicate{}))
6969
}
7070
}
7171

0 commit comments

Comments
 (0)