Browse code

Logs wait for first build from bc with ConfigChange trigger

jupierce authored on 2016/12/07 07:21:53
Showing 4 changed files
... ...
@@ -59,3 +59,19 @@ func hasBuildConfigAnnotation(build Build, annotationName, annotationValue strin
59 59
 	value, ok := build.Annotations[annotationName]
60 60
 	return ok && value == annotationValue
61 61
 }
62
+
63
+// FindTriggerPolicy retrieves the BuildTrigger(s) of a given type from a build configuration.
64
+// Returns nil if no matches are found.
65
+func FindTriggerPolicy(triggerType BuildTriggerType, config *BuildConfig) (buildTriggers []BuildTriggerPolicy) {
66
+	for _, specTrigger := range config.Spec.Triggers {
67
+		if specTrigger.Type == triggerType {
68
+			buildTriggers = append(buildTriggers, specTrigger)
69
+		}
70
+	}
71
+	return buildTriggers
72
+}
73
+
74
+func HasTriggerType(triggerType BuildTriggerType, bc *BuildConfig) bool {
75
+	matches := FindTriggerPolicy(triggerType, bc)
76
+	return len(matches) > 0
77
+}
... ...
@@ -42,13 +42,7 @@ type BuildConfigController struct {
42 42
 func (c *BuildConfigController) HandleBuildConfig(bc *buildapi.BuildConfig) error {
43 43
 	glog.V(4).Infof("Handling BuildConfig %s/%s", bc.Namespace, bc.Name)
44 44
 
45
-	hasChangeTrigger := false
46
-	for _, trigger := range bc.Spec.Triggers {
47
-		if trigger.Type == buildapi.ConfigChangeBuildTriggerType {
48
-			hasChangeTrigger = true
49
-			break
50
-		}
51
-	}
45
+	hasChangeTrigger := buildapi.HasTriggerType(buildapi.ConfigChangeBuildTriggerType, bc)
52 46
 
53 47
 	if !hasChangeTrigger {
54 48
 		return nil
... ...
@@ -50,12 +50,9 @@ func GitRefMatches(eventRef, configRef string, buildSource *buildapi.BuildSource
50 50
 // FindTriggerPolicy retrieves the BuildTrigger of a given type from a build
51 51
 // configuration
52 52
 func FindTriggerPolicy(triggerType buildapi.BuildTriggerType, config *buildapi.BuildConfig) (buildTriggers []buildapi.BuildTriggerPolicy, err error) {
53
-	err = ErrHookNotEnabled
54
-	for _, specTrigger := range config.Spec.Triggers {
55
-		if specTrigger.Type == triggerType {
56
-			buildTriggers = append(buildTriggers, specTrigger)
57
-			err = nil
58
-		}
53
+	buildTriggers = buildapi.FindTriggerPolicy(triggerType, config)
54
+	if len(buildTriggers) == 0 {
55
+		err = ErrHookNotEnabled
59 56
 	}
60 57
 	return buildTriggers, err
61 58
 }
... ...
@@ -20,6 +20,7 @@ import (
20 20
 	"github.com/spf13/cobra"
21 21
 	"github.com/spf13/pflag"
22 22
 
23
+	"k8s.io/client-go/1.4/pkg/util/wait"
23 24
 	"k8s.io/kubernetes/pkg/api"
24 25
 	"k8s.io/kubernetes/pkg/api/meta"
25 26
 	"k8s.io/kubernetes/pkg/api/unversioned"
... ...
@@ -463,14 +464,31 @@ func NewFactory(clientConfig kclientcmd.ClientConfig) *Factory {
463 463
 			if err != nil {
464 464
 				return nil, err
465 465
 			}
466
-			builds, err := oc.Builds(t.Namespace).List(api.ListOptions{})
467
-			if err != nil {
468
-				return nil, err
469
-			}
470
-			builds.Items = buildapi.FilterBuilds(builds.Items, buildapi.ByBuildConfigPredicate(t.Name))
466
+
467
+			hasConfigChangeTrigger := buildapi.HasTriggerType(buildapi.ConfigChangeBuildTriggerType, t)
468
+
469
+			var builds *buildapi.BuildList
470
+			err = wait.PollImmediate(time.Second, time.Minute, func() (bool, error) {
471
+				builds, err = oc.Builds(t.Namespace).List(api.ListOptions{})
472
+				if err != nil {
473
+					return false, err
474
+				}
475
+				builds.Items = buildapi.FilterBuilds(builds.Items, buildapi.ByBuildConfigPredicate(t.Name))
476
+				if len(builds.Items) > 0 || !hasConfigChangeTrigger {
477
+					return true, nil
478
+				}
479
+				// Wait for timeout before giving up on the first build from configchange trigger
480
+				return false, nil
481
+			})
482
+
471 483
 			if len(builds.Items) == 0 {
472 484
 				return nil, fmt.Errorf("no builds found for %q", t.Name)
473 485
 			}
486
+
487
+			if err != nil {
488
+				return nil, fmt.Errorf("error finding build for %q: %v", t.Name, err)
489
+			}
490
+
474 491
 			if bopts.Version != nil {
475 492
 				// If a version has been specified, try to get the logs from that build.
476 493
 				desired := buildutil.BuildNameForConfigVersion(t.Name, int(*bopts.Version))