Skip to content
This repository was archived by the owner on Dec 11, 2023. It is now read-only.

Commit 444ef74

Browse files
author
odacremolbap
committed
trigger reconciler basic
1 parent e85037e commit 444ef74

File tree

4 files changed

+61
-48
lines changed

4 files changed

+61
-48
lines changed

config/300-trigger.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ spec:
270270
additionalPrinterColumns:
271271
- name: Broker
272272
type: string
273-
jsonPath: .spec.broker
273+
jsonPath: .spec.broker.name
274274
- name: Target_URI
275275
type: string
276276
jsonPath: .status.targetUri

pkg/apis/eventing/v1alpha1/trigger_lifecycle.go

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,14 @@ import (
1111
"knative.dev/pkg/kmeta"
1212
)
1313

14-
var triggerCondSet = apis.NewLivingConditionSet(TriggerConditionBroker, TriggerConditionTarget, TriggerConditionTargetResolved, TriggerConditionDeadLetterSinkResolved)
14+
var triggerCondSet = apis.NewLivingConditionSet(TriggerConditionBroker, TriggerConditionTargetResolved, TriggerConditionDeadLetterSinkResolved)
1515

1616
const (
1717
// TriggerConditionReady has status True when all subconditions below have been set to True.
1818
TriggerConditionReady = apis.ConditionReady
1919

2020
TriggerConditionBroker apis.ConditionType = "BrokerReady"
2121

22-
TriggerConditionTarget apis.ConditionType = "TargetReady"
23-
2422
TriggerConditionTargetResolved apis.ConditionType = "TargetResolved"
2523

2624
TriggerConditionDeadLetterSinkResolved apis.ConditionType = "DeadLetterSinkResolved"
@@ -100,37 +98,6 @@ func (ts *TriggerStatus) MarkBrokerNotConfigured() {
10098
"BrokerNotConfigured", "Broker has not yet been reconciled.")
10199
}
102100

103-
func (ts *TriggerStatus) PropagateSubscriptionCondition(sc *apis.Condition) {
104-
if sc == nil {
105-
ts.MarkSubscriptionNotConfigured()
106-
return
107-
}
108-
109-
switch {
110-
case sc.Status == corev1.ConditionUnknown:
111-
ts.MarkSubscribedUnknown(sc.Reason, sc.Message)
112-
case sc.Status == corev1.ConditionTrue:
113-
triggerCondSet.Manage(ts).MarkTrue(TriggerConditionTarget)
114-
case sc.Status == corev1.ConditionFalse:
115-
ts.MarkNotSubscribed(sc.Reason, sc.Message)
116-
default:
117-
ts.MarkSubscribedUnknown("SubscriptionUnknown", "The status of Subscription is invalid: %v", sc.Status)
118-
}
119-
}
120-
121-
func (ts *TriggerStatus) MarkNotSubscribed(reason, messageFormat string, messageA ...interface{}) {
122-
triggerCondSet.Manage(ts).MarkFalse(TriggerConditionTarget, reason, messageFormat, messageA...)
123-
}
124-
125-
func (ts *TriggerStatus) MarkSubscribedUnknown(reason, messageFormat string, messageA ...interface{}) {
126-
triggerCondSet.Manage(ts).MarkUnknown(TriggerConditionTarget, reason, messageFormat, messageA...)
127-
}
128-
129-
func (ts *TriggerStatus) MarkSubscriptionNotConfigured() {
130-
triggerCondSet.Manage(ts).MarkUnknown(TriggerConditionTarget,
131-
"SubscriptionNotConfigured", "Subscription has not yet been reconciled.")
132-
}
133-
134101
func (ts *TriggerStatus) MarkTargetResolvedSucceeded() {
135102
triggerCondSet.Manage(ts).MarkTrue(TriggerConditionTargetResolved)
136103
}

pkg/reconciler/events.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,5 @@ const (
3535
ReasonBrokerDoesNotExist = "BrokerDoesNotExist"
3636
ReasonFailedBrokerGet = "FailedBrokerGet"
3737

38-
// // ReasonBadSinkURI indicates that the URI of a sink can't be determined.
39-
// ReasonBadSinkURI = "BadSinkURI"
40-
41-
// // ReasonInvalidSpec indicates that spec of a reconciled object is invalid.
42-
// ReasonInvalidSpec = "InvalidSpec"
38+
ReasonFailedResolveReference = "FailedResolveReference"
4339
)

pkg/reconciler/trigger/reconciler.go

Lines changed: 58 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import (
88
"fmt"
99

1010
"go.uber.org/zap"
11+
corev1 "k8s.io/api/core/v1"
1112
apierrs "k8s.io/apimachinery/pkg/api/errors"
13+
"knative.dev/pkg/controller"
1214
"knative.dev/pkg/logging"
1315
pkgreconciler "knative.dev/pkg/reconciler"
1416
"knative.dev/pkg/resolver"
@@ -24,42 +26,90 @@ type Reconciler struct {
2426
}
2527

2628
func (r *Reconciler) ReconcileKind(ctx context.Context, t *eventingv1alpha1.Trigger) pkgreconciler.Event {
29+
err := r.resolveBroker(ctx, t)
30+
if err != nil {
31+
return err
32+
}
33+
34+
err = r.resolveTarget(ctx, t)
35+
if err != nil {
36+
return err
37+
}
38+
39+
return r.resolveDLS(ctx, t)
40+
}
41+
42+
func (r *Reconciler) resolveBroker(ctx context.Context, t *eventingv1alpha1.Trigger) pkgreconciler.Event {
2743
// TODO, use any broker, not RedisBrokers
2844
rb, err := r.rbLister.RedisBrokers(t.Namespace).Get(t.Spec.Broker.Name)
2945
if err != nil {
3046
if apierrs.IsNotFound(err) {
3147
logging.FromContext(ctx).Errorw(fmt.Sprintf("Trigger %s/%s references non existing broker %q", t.Namespace, t.Name, t.Spec.Broker.Name))
3248
t.Status.MarkBrokerFailed(reconciler.ReasonBrokerDoesNotExist, "Broker %q does not exist", t.Spec.Broker.Name)
33-
return nil
49+
// No need to requeue, we will be notified when if broker is created.
50+
return controller.NewPermanentError(err)
3451
}
3552

3653
t.Status.MarkBrokerFailed(reconciler.ReasonFailedBrokerGet, "Failed to get broker %q : %s", t.Spec.Broker, err)
37-
return err
54+
return pkgreconciler.NewEvent(corev1.EventTypeWarning, reconciler.ReasonFailedBrokerGet,
55+
"Failed to get broker for trigger %s/%s: %w", t.Namespace, t.Name, err)
3856
}
3957

4058
t.Status.PropagateBrokerCondition(rb.Status.GetTopLevelCondition())
41-
// If Broker is not ready, we're done, but once it becomes ready, we'll get requeued.
59+
60+
// No need to requeue, we'll get requeued when broker changes status.
4261
if !rb.IsReady() {
43-
logging.FromContext(ctx).Errorw("Broker is not ready", zap.Any("Broker", *rb))
44-
return nil
62+
logging.FromContext(ctx).Errorw(fmt.Sprintf("Trigger %s/%s references non ready broker %q", t.Namespace, t.Name, t.Spec.Broker.Name))
4563
}
4664

65+
return nil
66+
}
67+
68+
func (r *Reconciler) resolveTarget(ctx context.Context, t *eventingv1alpha1.Trigger) pkgreconciler.Event {
4769
if t.Spec.Target.Ref != nil && t.Spec.Target.Ref.Namespace == "" {
4870
// To call URIFromDestinationV1(ctx context.Context, dest v1.Destination, parent interface{}), dest.Ref must have a Namespace
4971
// If Target.Ref.Namespace is nil, We will use the Namespace of Trigger as the Namespace of dest.Ref
50-
t.Spec.Target.Ref.Namespace = t.GetNamespace()
72+
t.Spec.Target.Ref.Namespace = t.Namespace
5173
}
5274

53-
targetURI, err := r.uriResolver.URIFromDestinationV1(ctx, t.Spec.Target, rb)
75+
targetURI, err := r.uriResolver.URIFromDestinationV1(ctx, t.Spec.Target, t)
5476
if err != nil {
5577
logging.FromContext(ctx).Errorw("Unable to get the target's URI", zap.Error(err))
5678
t.Status.MarkTargetResolvedFailed("Unable to get the target's URI", "%v", err)
5779
t.Status.TargetURI = nil
58-
return err
80+
return pkgreconciler.NewEvent(corev1.EventTypeWarning, reconciler.ReasonFailedResolveReference,
81+
"Failed to get target's URI: %w", err)
5982
}
6083

6184
t.Status.TargetURI = targetURI
6285
t.Status.MarkTargetResolvedSucceeded()
6386

6487
return nil
6588
}
89+
90+
func (r *Reconciler) resolveDLS(ctx context.Context, t *eventingv1alpha1.Trigger) pkgreconciler.Event {
91+
if t.Spec.Delivery == nil || t.Spec.Delivery.DeadLetterSink == nil {
92+
t.Status.DeadLetterSinkURI = nil
93+
t.Status.MarkDeadLetterSinkNotConfigured()
94+
}
95+
96+
if t.Spec.Delivery.DeadLetterSink.Ref != nil && t.Spec.Delivery.DeadLetterSink.Ref.Namespace == "" {
97+
// To call URIFromDestinationV1(ctx context.Context, dest v1.Destination, parent interface{}), dest.Ref must have a Namespace
98+
// If Target.Ref.Namespace is nil, We will use the Namespace of Trigger as the Namespace of dest.Ref
99+
t.Spec.Delivery.DeadLetterSink.Ref.Namespace = t.Namespace
100+
}
101+
102+
dlsURI, err := r.uriResolver.URIFromDestinationV1(ctx, *t.Spec.Delivery.DeadLetterSink, t)
103+
if err != nil {
104+
logging.FromContext(ctx).Errorw("Unable to get the dead letter sink's URI", zap.Error(err))
105+
t.Status.MarkTargetResolvedFailed("Unable to get the dead letter sink's URI", "%v", err)
106+
t.Status.TargetURI = nil
107+
return pkgreconciler.NewEvent(corev1.EventTypeWarning, reconciler.ReasonFailedResolveReference,
108+
"Failed to get dead letter sink's URI: %w", err)
109+
}
110+
111+
t.Status.DeadLetterSinkURI = dlsURI
112+
t.Status.MarkDeadLetterSinkNotConfigured()
113+
114+
return nil
115+
}

0 commit comments

Comments
 (0)