Skip to content

Commit 03c98b3

Browse files
committed
add event recording and ingress info in error messages
1 parent 8ac0f32 commit 03c98b3

File tree

8 files changed

+73
-12
lines changed

8 files changed

+73
-12
lines changed

controllers/elbv2/targetgroupbinding_controller.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ package controllers
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"github.com/aws/aws-sdk-go/aws"
2223
"github.com/pkg/errors"
2324
corev1 "k8s.io/api/core/v1"
25+
"k8s.io/client-go/tools/record"
2426
"sigs.k8s.io/aws-load-balancer-controller/controllers/elbv2/eventhandlers"
2527
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
2628
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
@@ -42,12 +44,13 @@ const (
4244
)
4345

4446
// NewTargetGroupBindingReconciler constructs new targetGroupBindingReconciler
45-
func NewTargetGroupBindingReconciler(k8sClient client.Client, finalizerManager k8s.FinalizerManager,
47+
func NewTargetGroupBindingReconciler(k8sClient client.Client, eventRecorder record.EventRecorder, finalizerManager k8s.FinalizerManager,
4648
tgbResourceManager targetgroupbinding.ResourceManager, config config.ControllerConfig,
4749
logger logr.Logger) *targetGroupBindingReconciler {
4850

4951
return &targetGroupBindingReconciler{
5052
k8sClient: k8sClient,
53+
eventRecorder: eventRecorder,
5154
finalizerManager: finalizerManager,
5255
tgbResourceManager: tgbResourceManager,
5356
logger: logger,
@@ -59,6 +62,7 @@ func NewTargetGroupBindingReconciler(k8sClient client.Client, finalizerManager k
5962
// targetGroupBindingReconciler reconciles a TargetGroupBinding object
6063
type targetGroupBindingReconciler struct {
6164
k8sClient client.Client
65+
eventRecorder record.EventRecorder
6266
finalizerManager k8s.FinalizerManager
6367
tgbResourceManager targetgroupbinding.ResourceManager
6468
logger logr.Logger
@@ -95,23 +99,29 @@ func (r *targetGroupBindingReconciler) reconcile(req ctrl.Request) error {
9599

96100
func (r *targetGroupBindingReconciler) reconcileTargetGroupBinding(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
97101
if err := r.finalizerManager.AddFinalizers(ctx, tgb, targetGroupBindingFinalizer); err != nil {
102+
r.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
98103
return err
99104
}
100105
if err := r.tgbResourceManager.Reconcile(ctx, tgb); err != nil {
101106
return err
102107
}
103108
if err := r.updateTargetGroupBindingStatus(ctx, tgb); err != nil {
109+
r.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonFailedUpdateStatus, fmt.Sprintf("Failed update status due to %v", err))
104110
return err
105111
}
112+
113+
r.eventRecorder.Event(tgb, corev1.EventTypeNormal, k8s.TargetGroupBindingEventReasonSuccessfullyReconciled, "Successfully reconciled")
106114
return nil
107115
}
108116

109117
func (r *targetGroupBindingReconciler) cleanupTargetGroupBinding(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
110118
if k8s.HasFinalizer(tgb, targetGroupBindingFinalizer) {
111119
if err := r.tgbResourceManager.Cleanup(ctx, tgb); err != nil {
120+
r.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonFailedCleanup, fmt.Sprintf("Failed cleanup due to %v", err))
112121
return err
113122
}
114123
if err := r.finalizerManager.RemoveFinalizers(ctx, tgb, targetGroupBindingFinalizer); err != nil {
124+
r.eventRecorder.Event(tgb, corev1.EventTypeWarning, k8s.TargetGroupBindingEventReasonFailedRemoveFinalizer, fmt.Sprintf("Failed remove finalizer due to %v", err))
115125
return err
116126
}
117127
}

controllers/ingress/eventhandlers/ingress_events.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package eventhandlers
22

33
import (
44
"context"
5+
"fmt"
56
"github.com/go-logr/logr"
67
corev1 "k8s.io/api/core/v1"
78
networking "k8s.io/api/networking/v1beta1"
@@ -70,7 +71,7 @@ func (h *enqueueRequestsForIngressEvent) enqueueIfBelongsToGroup(queue workqueue
7071
for _, ing := range ingList {
7172
groupID, err := h.groupLoader.FindGroupID(context.Background(), ing)
7273
if err != nil {
73-
h.eventRecorder.Eventf(ing, corev1.EventTypeWarning, k8s.IngressEventReasonFailedToLoadGroupID, "failed to load groupID for Ingress due to %w", err)
74+
h.eventRecorder.Event(ing, corev1.EventTypeWarning, k8s.IngressEventReasonFailedLoadGroupID, fmt.Sprintf("failed load groupID due to %v", err))
7475
continue
7576
}
7677

controllers/ingress/group_controller.go

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

33
import (
44
"context"
5+
"fmt"
56
"github.com/go-logr/logr"
67
"github.com/pkg/errors"
78
corev1 "k8s.io/api/core/v1"
@@ -106,7 +107,9 @@ func (r *groupReconciler) reconcile(req ctrl.Request) error {
106107
if err != nil {
107108
return err
108109
}
110+
109111
if err := r.groupFinalizerManager.AddGroupFinalizer(ctx, ingGroupID, ingGroup.Members...); err != nil {
112+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
110113
return err
111114
}
112115

@@ -120,40 +123,52 @@ func (r *groupReconciler) reconcile(req ctrl.Request) error {
120123
if err != nil {
121124
return err
122125
}
123-
if err := r.updateIngressesStatus(ctx, lbDNS, ingGroup.Members...); err != nil {
126+
if err := r.updateIngressGroupStatus(ctx, ingGroup, lbDNS); err != nil {
127+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedUpdateStatus, fmt.Sprintf("Failed update status due to %v", err))
124128
return err
125129
}
126130
}
127131

128132
if len(ingGroup.InactiveMembers) > 0 {
129133
if err := r.groupFinalizerManager.RemoveGroupFinalizer(ctx, ingGroupID, ingGroup.InactiveMembers...); err != nil {
134+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedRemoveFinalizer, fmt.Sprintf("Failed remove finalizer due to %v", err))
130135
return err
131136
}
132137
}
133138

139+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeNormal, k8s.IngressEventReasonSuccessfullyReconciled, "Successfully reconciled")
134140
return nil
135141
}
136142

137143
func (r *groupReconciler) buildAndDeployModel(ctx context.Context, ingGroup ingress.Group) (core.Stack, *elbv2model.LoadBalancer, error) {
138144
stack, lb, err := r.modelBuilder.Build(ctx, ingGroup)
139145
if err != nil {
146+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
140147
return nil, nil, err
141148
}
142149
stackJSON, err := r.stackMarshaller.Marshal(stack)
143150
if err != nil {
151+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
144152
return nil, nil, err
145153
}
146154
r.logger.Info("successfully built model", "model", stackJSON)
147155

148156
if err := r.stackDeployer.Deploy(ctx, stack); err != nil {
157+
r.recordIngressGroupEvent(ctx, ingGroup, corev1.EventTypeWarning, k8s.IngressEventReasonFailedDeployModel, fmt.Sprintf("Failed deploy model due to %v", err))
149158
return nil, nil, err
150159
}
151160
r.logger.Info("successfully deployed model", "ingressGroup", ingGroup.ID)
152161
return stack, lb, err
153162
}
154163

155-
func (r *groupReconciler) updateIngressesStatus(ctx context.Context, lbDNS string, ingList ...*networking.Ingress) error {
156-
for _, ing := range ingList {
164+
func (r *groupReconciler) recordIngressGroupEvent(_ context.Context, ingGroup ingress.Group, eventType string, reason string, message string) {
165+
for _, ing := range ingGroup.Members {
166+
r.eventRecorder.Event(ing, eventType, reason, message)
167+
}
168+
}
169+
170+
func (r *groupReconciler) updateIngressGroupStatus(ctx context.Context, ingGroup ingress.Group, lbDNS string) error {
171+
for _, ing := range ingGroup.Members {
157172
if err := r.updateIngressStatus(ctx, lbDNS, ing); err != nil {
158173
return err
159174
}

controllers/service/service_controller.go

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

33
import (
44
"context"
5+
"fmt"
56
"github.com/go-logr/logr"
67
"github.com/pkg/errors"
78
corev1 "k8s.io/api/core/v1"
@@ -91,12 +92,18 @@ func (r *serviceReconciler) reconcile(req ctrl.Request) error {
9192
func (r *serviceReconciler) buildAndDeployModel(ctx context.Context, svc *corev1.Service) (core.Stack, *elbv2model.LoadBalancer, error) {
9293
stack, lb, err := r.modelBuilder.Build(ctx, svc)
9394
if err != nil {
95+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
9496
return nil, nil, err
9597
}
9698
stackJSON, err := r.stackMarshaller.Marshal(stack)
99+
if err != nil {
100+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
101+
return nil, nil, err
102+
}
97103
r.logger.Info("successfully built model", "model", stackJSON)
98104

99105
if err = r.stackDeployer.Deploy(ctx, stack); err != nil {
106+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedDeployModel, fmt.Sprintf("Failed deploy model due to %v", err))
100107
return nil, nil, err
101108
}
102109
r.logger.Info("successfully deployed model", "service", k8s.NamespacedName(svc))
@@ -106,6 +113,7 @@ func (r *serviceReconciler) buildAndDeployModel(ctx context.Context, svc *corev1
106113

107114
func (r *serviceReconciler) reconcileLoadBalancerResources(ctx context.Context, svc *corev1.Service) error {
108115
if err := r.finalizerManager.AddFinalizers(ctx, svc, serviceFinalizer); err != nil {
116+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedAddFinalizer, fmt.Sprintf("Failed add finalizer due to %v", err))
109117
return err
110118
}
111119
_, lb, err := r.buildAndDeployModel(ctx, svc)
@@ -118,8 +126,10 @@ func (r *serviceReconciler) reconcileLoadBalancerResources(ctx context.Context,
118126
}
119127

120128
if err = r.updateServiceStatus(ctx, lbDNS, svc); err != nil {
129+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedUpdateStatus, fmt.Sprintf("Failed update status due to %v", err))
121130
return err
122131
}
132+
r.eventRecorder.Event(svc, corev1.EventTypeNormal, k8s.ServiceEventReasonSuccessfullyReconciled, "Successfully reconciled")
123133
return nil
124134
}
125135

@@ -130,6 +140,7 @@ func (r *serviceReconciler) cleanupLoadBalancerResources(ctx context.Context, sv
130140
return err
131141
}
132142
if err := r.finalizerManager.RemoveFinalizers(ctx, svc, serviceFinalizer); err != nil {
143+
r.eventRecorder.Event(svc, corev1.EventTypeWarning, k8s.ServiceEventReasonFailedRemoveFinalizer, fmt.Sprintf("Failed remove finalizer due to %v", err))
133144
return err
134145
}
135146
}

main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ func main() {
111111
svcReconciler := service.NewServiceReconciler(cloud, mgr.GetClient(), mgr.GetEventRecorderFor("service"),
112112
finalizerManager, sgManager, sgReconciler, subnetResolver,
113113
controllerCFG, ctrl.Log.WithName("controllers").WithName("service"))
114-
tgbReconciler := elbv2controller.NewTargetGroupBindingReconciler(mgr.GetClient(), finalizerManager, tgbResManager,
114+
tgbReconciler := elbv2controller.NewTargetGroupBindingReconciler(mgr.GetClient(), mgr.GetEventRecorderFor("targetGroupBinding"),
115+
finalizerManager, tgbResManager,
115116
controllerCFG, ctrl.Log.WithName("controllers").WithName("targetGroupBinding"))
116117
ctx := context.Background()
117118
if err = ingGroupReconciler.SetupWithManager(ctx, mgr); err != nil {

pkg/ingress/model_build_listener_rules.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package ingress
22

33
import (
44
"context"
5-
"errors"
5+
"github.com/pkg/errors"
66
"fmt"
77
networking "k8s.io/api/networking/v1beta1"
8+
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
89
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
910
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
1011
)
@@ -19,15 +20,15 @@ func (t *defaultModelBuildTask) buildListenerRules(ctx context.Context, lsARN co
1920
for _, path := range rule.HTTP.Paths {
2021
enhancedBackend, err := t.enhancedBackendBuilder.Build(ctx, ing, path.Backend)
2122
if err != nil {
22-
return err
23+
return errors.Wrapf(err, "ingress: %v", k8s.NamespacedName(ing))
2324
}
2425
conditions, err := t.buildRuleConditions(ctx, rule, path, enhancedBackend)
2526
if err != nil {
26-
return err
27+
return errors.Wrapf(err, "ingress: %v", k8s.NamespacedName(ing))
2728
}
2829
actions, err := t.buildActions(ctx, protocol, ing, enhancedBackend)
2930
if err != nil {
30-
return err
31+
return errors.Wrapf(err, "ingress: %v", k8s.NamespacedName(ing))
3132
}
3233
rules = append(rules, Rule{
3334
Conditions: conditions,

pkg/ingress/model_builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ func (t *defaultModelBuildTask) run(ctx context.Context) error {
160160
for _, ing := range t.ingGroup.Members {
161161
listenPortConfigByPortForIngress, err := t.computeIngressListenPortConfigByPort(ctx, ing)
162162
if err != nil {
163-
return err
163+
return errors.Wrapf(err, "ingress: %v", k8s.NamespacedName(ing))
164164
}
165165
ingKey := k8s.NamespacedName(ing)
166166
for port, cfg := range listenPortConfigByPortForIngress {

pkg/k8s/events.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
package k8s
22

33
const (
4-
IngressEventReasonFailedToLoadGroupID = "FailedToLoadGroupID"
4+
// Ingress events
5+
IngressEventReasonFailedLoadGroupID = "FailedLoadGroupID"
6+
IngressEventReasonFailedAddFinalizer = "FailedAddFinalizer"
7+
IngressEventReasonFailedRemoveFinalizer = "FailedRemoveFinalizer"
8+
IngressEventReasonFailedUpdateStatus = "FailedUpdateStatus"
9+
IngressEventReasonFailedBuildModel = "FailedBuildModel"
10+
IngressEventReasonFailedDeployModel = "FailedDeployModel"
11+
IngressEventReasonSuccessfullyReconciled = "SuccessfullyReconciled"
12+
13+
// Service events
14+
ServiceEventReasonFailedAddFinalizer = "FailedAddFinalizer"
15+
ServiceEventReasonFailedRemoveFinalizer = "FailedRemoveFinalizer"
16+
ServiceEventReasonFailedUpdateStatus = "FailedUpdateStatus"
17+
ServiceEventReasonFailedBuildModel = "FailedBuildModel"
18+
ServiceEventReasonFailedDeployModel = "FailedDeployModel"
19+
ServiceEventReasonSuccessfullyReconciled = "SuccessfullyReconciled"
20+
21+
// TargetGroupBinding events
22+
TargetGroupBindingEventReasonFailedAddFinalizer = "FailedAddFinalizer"
23+
TargetGroupBindingEventReasonFailedRemoveFinalizer = "FailedRemoveFinalizer"
24+
TargetGroupBindingEventReasonFailedUpdateStatus = "FailedUpdateStatus"
25+
TargetGroupBindingEventReasonFailedCleanup = "FailedCleanup"
26+
TargetGroupBindingEventReasonSuccessfullyReconciled = "SuccessfullyReconciled"
527
)

0 commit comments

Comments
 (0)