Skip to content

Commit 2ae064c

Browse files
committed
WIP commit no.3
1 parent eaa26af commit 2ae064c

File tree

21 files changed

+910
-85
lines changed

21 files changed

+910
-85
lines changed

PROJECT

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ resources:
1919
version: v1beta1
2020
- api:
2121
crdVersion: v1
22+
controller: true
2223
domain: k8s.aws
2324
group: vpcresources
2425
kind: CNINode

config/rbac/role.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ rules:
6060
- create
6161
- get
6262
- list
63+
- patch
64+
- update
6365
- watch
6466
- apiGroups:
6567
- vpcresources.k8s.aws

controllers/core/node_controller.go

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ package controllers
1515

1616
import (
1717
"context"
18-
"fmt"
1918
"net/http"
2019
"time"
2120

@@ -25,8 +24,6 @@ import (
2524
"github.com/aws/amazon-vpc-resource-controller-k8s/pkg/k8s"
2625
"github.com/aws/amazon-vpc-resource-controller-k8s/pkg/node/manager"
2726
"github.com/google/uuid"
28-
"github.com/prometheus/client_golang/prometheus"
29-
"sigs.k8s.io/controller-runtime/pkg/metrics"
3027

3128
"github.com/go-logr/logr"
3229
corev1 "k8s.io/api/core/v1"
@@ -36,21 +33,9 @@ import (
3633
ctrl "sigs.k8s.io/controller-runtime"
3734
"sigs.k8s.io/controller-runtime/pkg/client"
3835
"sigs.k8s.io/controller-runtime/pkg/controller"
39-
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4036
"sigs.k8s.io/controller-runtime/pkg/healthz"
4137
)
4238

43-
var (
44-
leakedCNINodeResourceCount = prometheus.NewCounter(
45-
prometheus.CounterOpts{
46-
Name: "orphaned_cninode_objects",
47-
Help: "The number of leaked cninode resources",
48-
},
49-
)
50-
51-
prometheusRegistered = false
52-
)
53-
5439
// MaxNodeConcurrentReconciles is the number of go routines that can invoke
5540
// Reconcile in parallel. Since Node Reconciler, performs local operation
5641
// on cache only a single go routine should be sufficient. Using more than
@@ -93,23 +78,6 @@ func (r *NodeReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.
9378

9479
if nodeErr := r.Client.Get(ctx, req.NamespacedName, node); nodeErr != nil {
9580
if errors.IsNotFound(nodeErr) {
96-
// clean up CNINode finalizer
97-
cniNode := &v1alpha1.CNINode{}
98-
if cninodeErr := r.Client.Get(ctx, req.NamespacedName, cniNode); cninodeErr == nil {
99-
if yes := controllerutil.ContainsFinalizer(cniNode, NodeTerminationFinalizer); yes {
100-
updated := cniNode.DeepCopy()
101-
if yes = controllerutil.RemoveFinalizer(updated, NodeTerminationFinalizer); yes {
102-
if err := r.Client.Patch(ctx, updated, client.MergeFrom(cniNode)); err != nil {
103-
return ctrl.Result{}, err
104-
}
105-
r.Log.Info("removed leaked CNINode resource's finalizer", "cninode", cniNode.Name)
106-
}
107-
leakedCNINodeResourceCount.Inc()
108-
}
109-
} else if !errors.IsNotFound(cninodeErr) {
110-
return ctrl.Result{}, fmt.Errorf("failed getting CNINode %s from cached client, %w", cniNode.Name, cninodeErr)
111-
}
112-
11381
// clean up local cached nodes
11482
_, found := r.Manager.GetNode(req.Name)
11583
if found {
@@ -148,8 +116,6 @@ func (r *NodeReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconci
148116
map[string]healthz.Checker{"health-node-controller": r.Check()},
149117
)
150118

151-
prometheusRegister()
152-
153119
return ctrl.NewControllerManagedBy(mgr).
154120
For(&corev1.Node{}).
155121
WithOptions(controller.Options{MaxConcurrentReconciles: maxConcurrentReconciles}).
@@ -193,11 +159,3 @@ func (r *NodeReconciler) Check() healthz.Checker {
193159
return err
194160
}
195161
}
196-
197-
func prometheusRegister() {
198-
if !prometheusRegistered {
199-
metrics.Registry.MustRegister(leakedCNINodeResourceCount)
200-
201-
prometheusRegistered = true
202-
}
203-
}

controllers/core/node_controller_test.go

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@ import (
2626
"github.com/golang/mock/gomock"
2727
"github.com/stretchr/testify/assert"
2828
corev1 "k8s.io/api/core/v1"
29-
"k8s.io/apimachinery/pkg/api/errors"
3029
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3130
"k8s.io/apimachinery/pkg/runtime"
3231
"k8s.io/apimachinery/pkg/types"
3332
"sigs.k8s.io/controller-runtime/pkg/client"
3433
fakeClient "sigs.k8s.io/controller-runtime/pkg/client/fake"
35-
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3634
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3735
"sigs.k8s.io/controller-runtime/pkg/reconcile"
3836
)
@@ -143,43 +141,6 @@ func TestNodeReconciler_Reconcile_DeleteNonExistentNode(t *testing.T) {
143141
assert.Equal(t, res, reconcile.Result{})
144142
}
145143

146-
func TestNodeReconciler_Reconcile_DeleteNonExistentNodesCNINode(t *testing.T) {
147-
ctrl := gomock.NewController(t)
148-
defer ctrl.Finish()
149-
150-
mock := NewNodeMock(ctrl)
151-
cniNode := &v1alpha1.CNINode{
152-
ObjectMeta: v1.ObjectMeta{
153-
Name: mockNodeName,
154-
Finalizers: []string{NodeTerminationFinalizer},
155-
},
156-
}
157-
mock.Reconciler.Client = fakeClient.NewClientBuilder().WithScheme(mock.Reconciler.Scheme).WithObjects(cniNode).Build()
158-
159-
mock.Conditions.EXPECT().GetPodDataStoreSyncStatus().Return(true)
160-
mock.Manager.EXPECT().GetNode(mockNodeName).Return(mock.MockNode, false)
161-
162-
original := &v1alpha1.CNINode{}
163-
err := mock.Reconciler.Client.Get(context.TODO(), types.NamespacedName{Name: cniNode.Name}, original)
164-
assert.NoError(t, err)
165-
assert.True(t, controllerutil.ContainsFinalizer(original, NodeTerminationFinalizer), "the CNINode has finalizer")
166-
167-
res, err := mock.Reconciler.Reconcile(context.TODO(), reconcileRequest)
168-
assert.NoError(t, err)
169-
assert.Equal(t, res, reconcile.Result{})
170-
171-
node := &corev1.Node{}
172-
updated := &v1alpha1.CNINode{}
173-
err = mock.Reconciler.Client.Get(context.TODO(), types.NamespacedName{Name: cniNode.Name}, node)
174-
assert.Error(t, err, "the node shouldn't existing")
175-
assert.True(t, errors.IsNotFound(err))
176-
177-
err = mock.Reconciler.Client.Get(context.TODO(), types.NamespacedName{Name: cniNode.Name}, updated)
178-
assert.NoError(t, err)
179-
assert.True(t, updated.Name == mockNodeName, "the CNINode should existing and waiting for finalizer removal")
180-
assert.False(t, controllerutil.ContainsFinalizer(updated, NodeTerminationFinalizer), "CNINode finalizer should be removed when the node is gone")
181-
}
182-
183144
func TestNodeReconciler_Reconcile_DeleteNonExistentUnmanagedNode(t *testing.T) {
184145
ctrl := gomock.NewController(t)
185146
defer ctrl.Finish()

0 commit comments

Comments
 (0)