Skip to content

Commit

Permalink
add event when build image trigger fails
Browse files Browse the repository at this point in the history
  • Loading branch information
Jim Minter committed Oct 31, 2017
1 parent 6755b0d commit 504dc2c
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 13 deletions.
2 changes: 1 addition & 1 deletion pkg/cmd/server/origin/controller/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func (c *ImageTriggerControllerConfig) RunController(ctx ControllerContext) (boo
Informer: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer(),
Store: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer().GetIndexer(),
TriggerFn: triggerbuildconfigs.NewBuildConfigTriggerIndexer,
Reactor: &triggerbuildconfigs.BuildConfigReactor{Instantiator: bcInstantiator},
Reactor: triggerbuildconfigs.NewBuildConfigReactor(bcInstantiator, kclient.Core().RESTClient()),
})
}
if !c.HasDeploymentsEnabled {
Expand Down
8 changes: 2 additions & 6 deletions pkg/image/controller/trigger/image_trigger_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,9 +297,7 @@ func TestTriggerControllerSyncBuildConfigResource(t *testing.T) {
},
}
inst := fakeBuildConfigInstantiator(test.bc, test.is)
reaction := &buildconfigs.BuildConfigReactor{
Instantiator: inst,
}
reaction := buildconfigs.NewBuildConfigReactor(inst, nil)
controller := TriggerController{
triggerCache: NewTriggerCache(),
lister: lister,
Expand Down Expand Up @@ -398,9 +396,7 @@ func TestTriggerControllerSyncBuildConfigResourceErrorHandling(t *testing.T) {
if test.err != nil {
inst.err = test.err
}
reaction := &buildconfigs.BuildConfigReactor{
Instantiator: inst,
}
reaction := buildconfigs.NewBuildConfigReactor(inst, nil)
controller := TriggerController{
triggerCache: NewTriggerCache(),
lister: lister,
Expand Down
31 changes: 26 additions & 5 deletions pkg/image/trigger/buildconfigs/buildconfigs.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package buildconfigs

import (
"fmt"
"reflect"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
clientv1 "k8s.io/client-go/pkg/api/v1"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/record"
kapi "k8s.io/kubernetes/pkg/api"

"github.com/golang/glog"
Expand Down Expand Up @@ -107,15 +113,25 @@ type BuildConfigInstantiator interface {
Instantiate(namespace string, request *buildapi.BuildRequest) (*buildapi.Build, error)
}

// BuildConfigReactor converts trigger changes into new builds. It will request a build if
// buildConfigReactor converts trigger changes into new builds. It will request a build if
// at least one image is out of date.
type BuildConfigReactor struct {
Instantiator BuildConfigInstantiator
type buildConfigReactor struct {
instantiator BuildConfigInstantiator
eventRecorder record.EventRecorder
}

// NewBuildConfigReactor creates a new buildConfigReactor
func NewBuildConfigReactor(instantiator BuildConfigInstantiator, restclient rest.Interface) trigger.ImageReactor {
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(restclient).Events("")})
eventRecorder := eventBroadcaster.NewRecorder(kapi.Scheme, clientv1.EventSource{Component: "buildconfig-controller"})

return &buildConfigReactor{instantiator: instantiator, eventRecorder: eventRecorder}
}

// ImageChanged is passed a build config and a set of changes and updates the object if
// necessary.
func (r *BuildConfigReactor) ImageChanged(obj interface{}, tagRetriever trigger.TagRetriever) error {
func (r *buildConfigReactor) ImageChanged(obj interface{}, tagRetriever trigger.TagRetriever) error {
bc := obj.(*buildapi.BuildConfig)

var request *buildapi.BuildRequest
Expand Down Expand Up @@ -193,6 +209,11 @@ func (r *BuildConfigReactor) ImageChanged(obj interface{}, tagRetriever trigger.

// instantiate new build
glog.V(4).Infof("Requesting build for BuildConfig based on image triggers %s/%s: %#v", bc.Namespace, bc.Name, request)
_, err := r.Instantiator.Instantiate(bc.Namespace, request)
_, err := r.instantiator.Instantiate(bc.Namespace, request)
if err != nil {
instantiateErr := fmt.Errorf("error triggering Build for BuildConfig %s/%s: %v", bc.Namespace, bc.Name, err)
utilruntime.HandleError(instantiateErr)
r.eventRecorder.Event(bc, kapi.EventTypeWarning, "BuildConfigTriggerFailed", instantiateErr.Error())
}
return err
}
2 changes: 1 addition & 1 deletion pkg/image/trigger/buildconfigs/buildconfigs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ func TestBuildConfigReactor(t *testing.T) {

for i, test := range testCases {
instantiator := &instantiator{build: test.response}
r := BuildConfigReactor{Instantiator: instantiator}
r := buildConfigReactor{instantiator: instantiator}
initial, err := kapi.Scheme.DeepCopy(test.obj)
if err != nil {
t.Fatal(err)
Expand Down

0 comments on commit 504dc2c

Please sign in to comment.