@@ -11,6 +11,7 @@ import (
11
11
"k8s.io/kubernetes/pkg/client/cache"
12
12
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
13
13
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
14
+ "k8s.io/kubernetes/pkg/client/record"
14
15
kcontroller "k8s.io/kubernetes/pkg/controller"
15
16
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
16
17
"k8s.io/kubernetes/pkg/util/wait"
@@ -49,16 +50,22 @@ type BuildPodController struct {
49
50
podStoreSynced func () bool
50
51
51
52
runPolicies []policy.RunPolicy
53
+
54
+ recorder record.EventRecorder
52
55
}
53
56
54
57
// NewBuildPodController creates a new BuildPodController.
55
58
func NewBuildPodController (buildInformer , podInformer cache.SharedIndexInformer , kc kclientset.Interface , oc osclient.Interface ) * BuildPodController {
59
+ eventBroadcaster := record .NewBroadcaster ()
60
+ eventBroadcaster .StartRecordingToSink (& kcoreclient.EventSinkImpl {Interface : kc .Core ().Events ("" )})
61
+
56
62
buildListerUpdater := buildclient .NewOSClientBuildClient (oc )
57
63
c := & BuildPodController {
58
64
buildUpdater : buildListerUpdater ,
59
65
secretClient : kc .Core (), // TODO: Replace with cache client
60
66
podClient : kc .Core (),
61
67
queue : workqueue .NewRateLimitingQueue (workqueue .DefaultControllerRateLimiter ()),
68
+ recorder : eventBroadcaster .NewRecorder (kapi.EventSource {Component : "build-pod-controller" }),
62
69
}
63
70
64
71
c .runPolicies = policy .GetAllRunPolicies (buildListerUpdater , buildListerUpdater )
@@ -178,7 +185,7 @@ func (bc *BuildPodController) HandlePod(pod *kapi.Pod) error {
178
185
}
179
186
// Update the build object when it progress to a next state or the reason for
180
187
// the current state changed.
181
- if (! common .HasBuildPodNameAnnotation (build ) || build .Status .Phase != nextStatus || build .Status .Phase == buildapi .BuildPhaseFailed ) && ! buildutil .IsBuildComplete (build ) {
188
+ if (! common .HasBuildPodNameAnnotation (build ) || build .Status .Phase != nextStatus || build .Status .Phase == buildapi .BuildPhaseFailed ) || ! buildutil .IsBuildComplete (build ) {
182
189
common .SetBuildPodNameAnnotation (build , pod .Name )
183
190
reason := ""
184
191
if len (build .Status .Reason ) > 0 {
@@ -189,10 +196,17 @@ func (bc *BuildPodController) HandlePod(pod *kapi.Pod) error {
189
196
190
197
if buildutil .IsBuildComplete (build ) {
191
198
common .SetBuildCompletionTimeAndDuration (build )
199
+ switch build .Status .Phase {
200
+ case buildapi .BuildPhaseComplete :
201
+ bc .recorder .Eventf (build , kapi .EventTypeNormal , buildapi .BuildCompletedEventReason , fmt .Sprintf (buildapi .BuildCompletedEventMessage , build .Namespace , build .Name ))
202
+ case buildapi .BuildPhaseError , buildapi .BuildPhaseFailed :
203
+ bc .recorder .Eventf (build , kapi .EventTypeNormal , buildapi .BuildFailedEventReason , fmt .Sprintf (buildapi .BuildFailedEventMessage , build .Namespace , build .Name ))
204
+ }
192
205
}
193
206
if build .Status .Phase == buildapi .BuildPhaseRunning {
194
207
now := unversioned .Now ()
195
208
build .Status .StartTimestamp = & now
209
+ bc .recorder .Eventf (build , kapi .EventTypeNormal , buildapi .BuildRunningEventReason , fmt .Sprintf (buildapi .BuildRunningEventMessage , build .Namespace , build .Name ))
196
210
}
197
211
if err := bc .buildUpdater .Update (build .Namespace , build ); err != nil {
198
212
return fmt .Errorf ("failed to update build %s/%s: %v" , build .Namespace , build .Name , err )
@@ -241,6 +255,8 @@ func (bc *BuildPodController) HandleBuildPodDeletion(pod *kapi.Pod) error {
241
255
build .Status .Reason = buildapi .StatusReasonBuildPodDeleted
242
256
build .Status .Message = buildapi .StatusMessageBuildPodDeleted
243
257
common .SetBuildCompletionTimeAndDuration (build )
258
+ bc .recorder .Eventf (build , kapi .EventTypeNormal , buildapi .BuildFailedEventReason , fmt .Sprintf (buildapi .BuildFailedEventMessage , build .Namespace , build .Name ))
259
+
244
260
if err := bc .buildUpdater .Update (build .Namespace , build ); err != nil {
245
261
return fmt .Errorf ("Failed to update build %s/%s: %v" , build .Namespace , build .Name , err )
246
262
}
0 commit comments