@@ -13,12 +13,13 @@ import (
13
13
configlistersv1 "github.com/openshift/client-go/config/listers/config/v1"
14
14
"github.com/prometheus/client_golang/prometheus"
15
15
"golang.org/x/time/rate"
16
- "k8s.io/klog"
17
-
16
+ corev1 "k8s.io/api/core/v1"
18
17
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19
18
"k8s.io/apimachinery/pkg/util/errors"
20
19
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
21
20
"k8s.io/apimachinery/pkg/util/wait"
21
+ "k8s.io/client-go/tools/record"
22
+ "k8s.io/klog"
22
23
23
24
configv1 "github.com/openshift/api/config/v1"
24
25
@@ -131,6 +132,7 @@ type SyncWorker struct {
131
132
retriever PayloadRetriever
132
133
builder payload.ResourceBuilder
133
134
preconditions precondition.List
135
+ eventRecorder record.EventRecorder
134
136
135
137
// minimumReconcileInterval is the minimum time between reconcile attempts, and is
136
138
// used to define the maximum backoff interval when syncOnce() returns an error.
@@ -157,11 +159,12 @@ type SyncWorker struct {
157
159
158
160
// NewSyncWorker initializes a ConfigSyncWorker that will retrieve payloads to disk, apply them via builder
159
161
// to a server, and obey limits about how often to reconcile or retry on errors.
160
- func NewSyncWorker (retriever PayloadRetriever , builder payload.ResourceBuilder , reconcileInterval time.Duration , backoff wait.Backoff , exclude string ) * SyncWorker {
162
+ func NewSyncWorker (retriever PayloadRetriever , builder payload.ResourceBuilder , reconcileInterval time.Duration , backoff wait.Backoff , exclude string , eventRecorder record. EventRecorder ) * SyncWorker {
161
163
return & SyncWorker {
162
- retriever : retriever ,
163
- builder : builder ,
164
- backoff : backoff ,
164
+ retriever : retriever ,
165
+ builder : builder ,
166
+ backoff : backoff ,
167
+ eventRecorder : eventRecorder ,
165
168
166
169
minimumReconcileInterval : reconcileInterval ,
167
170
@@ -178,8 +181,8 @@ func NewSyncWorker(retriever PayloadRetriever, builder payload.ResourceBuilder,
178
181
// NewSyncWorkerWithPreconditions initializes a ConfigSyncWorker that will retrieve payloads to disk, apply them via builder
179
182
// to a server, and obey limits about how often to reconcile or retry on errors.
180
183
// It allows providing preconditions for loading payload.
181
- func NewSyncWorkerWithPreconditions (retriever PayloadRetriever , builder payload.ResourceBuilder , preconditions precondition.List , reconcileInterval time.Duration , backoff wait.Backoff , exclude string ) * SyncWorker {
182
- worker := NewSyncWorker (retriever , builder , reconcileInterval , backoff , exclude )
184
+ func NewSyncWorkerWithPreconditions (retriever PayloadRetriever , builder payload.ResourceBuilder , preconditions precondition.List , reconcileInterval time.Duration , backoff wait.Backoff , exclude string , eventRecorder record. EventRecorder ) * SyncWorker {
185
+ worker := NewSyncWorker (retriever , builder , reconcileInterval , backoff , exclude , eventRecorder )
183
186
worker .preconditions = preconditions
184
187
return worker
185
188
}
@@ -479,6 +482,8 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
479
482
validPayload := w .payload
480
483
if validPayload == nil || ! equalUpdate (configv1.Update {Image : validPayload .ReleaseImage }, configv1.Update {Image : update .Image }) {
481
484
klog .V (4 ).Infof ("Loading payload" )
485
+ cvoObjectRef := & corev1.ObjectReference {APIVersion : "config.openshift.io/v1" , Kind : "ClusterVersion" , Name : "version" , Namespace : "openshift-cluster-version" }
486
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeNormal , "RetrievePayload" , "retrieving payload version=%q image=%q" , update .Version , update .Image )
482
487
reporter .Report (SyncWorkerStatus {
483
488
Generation : work .Generation ,
484
489
Step : "RetrievePayload" ,
@@ -488,6 +493,7 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
488
493
})
489
494
info , err := w .retriever .RetrievePayload (ctx , update )
490
495
if err != nil {
496
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeWarning , "RetrievePayloadFailed" , "retrieving payload failed version=%q image=%q failure=%v" , update .Version , update .Image , err )
491
497
reporter .Report (SyncWorkerStatus {
492
498
Generation : work .Generation ,
493
499
Failure : err ,
@@ -499,8 +505,10 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
499
505
return err
500
506
}
501
507
508
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeNormal , "VerifyPayload" , "verifying payload version=%q image=%q" , update .Version , update .Image )
502
509
payloadUpdate , err := payload .LoadUpdate (info .Directory , update .Image , w .exclude )
503
510
if err != nil {
511
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeWarning , "VerifyPayloadFailed" , "verifying payload failed version=%q image=%q failure=%v" , update .Version , update .Image , err )
504
512
reporter .Report (SyncWorkerStatus {
505
513
Generation : work .Generation ,
506
514
Failure : err ,
@@ -532,7 +540,9 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
532
540
if err := precondition .Summarize (w .preconditions .RunAll (ctx , precondition.ReleaseContext {DesiredVersion : payloadUpdate .ReleaseVersion }, clusterVersion )); err != nil {
533
541
if update .Force {
534
542
klog .V (4 ).Infof ("Forcing past precondition failures: %s" , err )
543
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeWarning , "PreconditionsForced" , "preconditions forced for payload loaded version=%q image=%q failures=%v" , update .Version , update .Image , err )
535
544
} else {
545
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeWarning , "PreconditionsFailed" , "preconditions failed for payload loaded version=%q image=%q failures=%v" , update .Version , update .Image , err )
536
546
reporter .Report (SyncWorkerStatus {
537
547
Generation : work .Generation ,
538
548
Failure : err ,
@@ -545,9 +555,11 @@ func (w *SyncWorker) syncOnce(ctx context.Context, work *SyncWork, maxWorkers in
545
555
return err
546
556
}
547
557
}
558
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeNormal , "PreconditionsPassed" , "preconditions passed for payload loaded version=%q image=%q" , update .Version , update .Image )
548
559
}
549
560
550
561
w .payload = payloadUpdate
562
+ w .eventRecorder .Eventf (cvoObjectRef , corev1 .EventTypeNormal , "PayloadLoaded" , "payload loaded version=%q image=%q" , update .Version , update .Image )
551
563
klog .V (4 ).Infof ("Payload loaded from %s with hash %s" , payloadUpdate .ReleaseImage , payloadUpdate .ManifestHash )
552
564
}
553
565
0 commit comments