Skip to content

Commit 9217f99

Browse files
Merge pull request buildpacks-community#1226 from evankanderson/unconditional-logic
Followup on 1221 - further condition improvements
2 parents 75f11be + 3cc0616 commit 9217f99

2 files changed

Lines changed: 34 additions & 49 deletions

File tree

pkg/reconciler/image/image_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2387,7 +2387,7 @@ func testImageReconciler(t *testing.T, when spec.G, it spec.S) {
23872387
Type: corev1alpha1.ConditionReady,
23882388
Status: corev1.ConditionFalse,
23892389
Reason: image.BuildFailedReason,
2390-
Message: failureMessage,
2390+
Message: fmt.Sprintf("Build %s failed: %s", failedBuild.Name, failureMessage),
23912391
},
23922392
{
23932393
Type: buildapi.ConditionBuilderReady,
@@ -2409,7 +2409,7 @@ func testImageReconciler(t *testing.T, when spec.G, it spec.S) {
24092409
it("deletes a failed build if more than the limit", func() {
24102410
imageWithBuilder.Spec.FailedBuildHistoryLimit = limit(4)
24112411
imageWithBuilder.Status.LatestBuildRef = "image-name-build-5"
2412-
imageWithBuilder.Status.Conditions = conditionNotReady()
2412+
imageWithBuilder.Status.Conditions = conditionNotReady(imageWithBuilder.Status.LatestBuildRef)
24132413
imageWithBuilder.Status.BuildCounter = 5
24142414
sourceResolver := resolvedSourceResolver(imageWithBuilder)
24152415

@@ -2647,12 +2647,13 @@ func conditionReady() corev1alpha1.Conditions {
26472647
}
26482648
}
26492649

2650-
func conditionNotReady() corev1alpha1.Conditions {
2650+
func conditionNotReady(failedBuild string) corev1alpha1.Conditions {
26512651
return corev1alpha1.Conditions{
26522652
{
2653-
Type: corev1alpha1.ConditionReady,
2654-
Status: corev1.ConditionFalse,
2655-
Reason: image.BuildFailedReason,
2653+
Type: corev1alpha1.ConditionReady,
2654+
Status: corev1.ConditionFalse,
2655+
Reason: image.BuildFailedReason,
2656+
Message: fmt.Sprintf("Build %s failed: ", failedBuild),
26562657
},
26572658
{
26582659
Type: buildapi.ConditionBuilderReady,

pkg/reconciler/image/reconcile_build.go

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
const (
1717
BuildRunningReason = "BuildRunning"
1818
ResolverNotReadyReason = "ResolverNotReady"
19+
UnknownStateReason = "UnknownState"
1920
BuildFailedReason = "BuildFailed"
2021
UpToDateReason = "UpToDate"
2122
)
@@ -76,53 +77,36 @@ func (c *Reconciler) reconcileBuild(ctx context.Context, image *buildapi.Image,
7677
}
7778

7879
func noScheduledBuild(buildNeeded corev1.ConditionStatus, builder buildapi.BuilderResource, build *buildapi.Build, sourceResolver *buildapi.SourceResolver) corev1alpha1.Conditions {
79-
if !builder.Ready() {
80-
return corev1alpha1.Conditions{
81-
{
82-
Type: corev1alpha1.ConditionReady,
83-
Status: corev1.ConditionFalse,
84-
Reason: buildapi.BuilderNotReady,
85-
Message: builderError(builder),
86-
LastTransitionTime: corev1alpha1.VolatileTime{Inner: metav1.Now()},
87-
},
88-
builderCondition(builder),
89-
}
90-
}
91-
if buildNeeded == corev1.ConditionUnknown {
92-
message := "Build status unknown"
93-
if !sourceResolver.Ready() {
94-
message = fmt.Sprintf("SourceResolver %s is not ready", sourceResolver.GetName())
95-
}
96-
return corev1alpha1.Conditions{
97-
{
98-
Type: corev1alpha1.ConditionReady,
99-
Status: corev1.ConditionUnknown,
100-
Reason: ResolverNotReadyReason,
101-
Message: message,
102-
LastTransitionTime: corev1alpha1.VolatileTime{Inner: metav1.Now()},
103-
},
104-
builderCondition(builder),
105-
}
80+
ready := corev1alpha1.Condition{
81+
Type: corev1alpha1.ConditionReady,
82+
Status: corev1.ConditionUnknown,
83+
LastTransitionTime: corev1alpha1.VolatileTime{Inner: metav1.Now()},
10684
}
10785

108-
buildReason := UpToDateReason
109-
buildMessage := "Last build succeeded"
110-
111-
if !build.Status.GetCondition(corev1alpha1.ConditionSucceeded).IsTrue() {
112-
buildReason = BuildFailedReason
113-
buildMessage = "Last build did not succeed"
86+
switch {
87+
case !builder.Ready():
88+
ready.Status = corev1.ConditionFalse
89+
ready.Reason = buildapi.BuilderNotReady
90+
ready.Message = builderError(builder)
91+
case buildNeeded == corev1.ConditionUnknown && !sourceResolver.Ready():
92+
ready.Status = corev1.ConditionUnknown
93+
ready.Reason = ResolverNotReadyReason
94+
ready.Message = fmt.Sprintf("SourceResolver %s is not ready", sourceResolver.GetName())
95+
case buildNeeded == corev1.ConditionUnknown && sourceResolver.Ready():
96+
ready.Status = corev1.ConditionUnknown
97+
ready.Reason = UnknownStateReason
98+
ready.Message = "Build status unknown"
99+
case build.Status.GetCondition(corev1alpha1.ConditionSucceeded).IsTrue():
100+
ready.Status = corev1.ConditionTrue
101+
ready.Reason = UpToDateReason
102+
ready.Message = defaultMessageIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded), "Last build succeeded")
103+
default:
104+
ready.Status = unknownStatusIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded))
105+
ready.Reason = BuildFailedReason
106+
ready.Message = fmt.Sprintf("Build %s failed: %s", build.Name, defaultMessageIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded), "unknown error"))
114107
}
115108

116-
return corev1alpha1.Conditions{
117-
{
118-
Type: corev1alpha1.ConditionReady,
119-
Status: unknownStatusIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded)),
120-
Reason: buildReason,
121-
Message: defaultMessageIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded), buildMessage),
122-
LastTransitionTime: corev1alpha1.VolatileTime{Inner: metav1.Now()},
123-
},
124-
builderCondition(builder),
125-
}
109+
return corev1alpha1.Conditions{ready, builderCondition(builder)}
126110

127111
}
128112

0 commit comments

Comments
 (0)