diff --git a/pkg/reconciler/image/image.go b/pkg/reconciler/image/image.go index 9bf7fe1fc..1f8362fd1 100644 --- a/pkg/reconciler/image/image.go +++ b/pkg/reconciler/image/image.go @@ -143,7 +143,6 @@ func (c *Reconciler) reconcileImage(ctx context.Context, image *buildapi.Image) return nil, err } else if k8serrors.IsNotFound(err) { image.Status.Conditions = image.BuilderNotFound() - image.Status.ObservedGeneration = image.Generation return image, nil } @@ -153,6 +152,7 @@ func (c *Reconciler) reconcileImage(ctx context.Context, image *buildapi.Image) } if lastBuild.IsRunning() { + image.Status.Conditions = buildRunningCondition(lastBuild, builder) return image, nil } diff --git a/pkg/reconciler/image/image_test.go b/pkg/reconciler/image/image_test.go index 5f3ad17f1..b56e211b8 100644 --- a/pkg/reconciler/image/image_test.go +++ b/pkg/reconciler/image/image_test.go @@ -2033,7 +2033,7 @@ func testImageReconciler(t *testing.T, when spec.G, it spec.S) { }) }) - it("does not schedule a build if the previous build is running", func() { + it("does not schedule a build if the previous build is running and updates image status with build status", func() { imageWithBuilder.Status.BuildCounter = 1 imageWithBuilder.Status.LatestBuildRef = "image-name-build-1" @@ -2073,8 +2073,9 @@ func testImageReconciler(t *testing.T, when spec.G, it spec.S) { Status: corev1alpha1.Status{ Conditions: corev1alpha1.Conditions{ { - Type: corev1alpha1.ConditionSucceeded, - Status: corev1.ConditionUnknown, + Type: corev1alpha1.ConditionSucceeded, + Status: corev1.ConditionUnknown, + Message: "Some build message", }, }, }, @@ -2082,6 +2083,33 @@ func testImageReconciler(t *testing.T, when spec.G, it spec.S) { }, }, WantErr: false, + WantStatusUpdates: []clientgotesting.UpdateActionImpl{ + { + Object: &buildapi.Image{ + ObjectMeta: imageWithBuilder.ObjectMeta, + Spec: imageWithBuilder.Spec, + Status: buildapi.ImageStatus{ + Status: corev1alpha1.Status{ + ObservedGeneration: originalGeneration, + Conditions: corev1alpha1.Conditions{ + { + Type: corev1alpha1.ConditionReady, + Status: corev1.ConditionUnknown, + Reason: "BuildRunning", + Message: "Some build message", + }, + { + Type: buildapi.ConditionBuilderReady, + Status: corev1.ConditionTrue, + }, + }, + }, + LatestBuildRef: "image-name-build-1", + BuildCounter: 1, + }, + }, + }, + }, }) }) diff --git a/pkg/reconciler/image/reconcile_build.go b/pkg/reconciler/image/reconcile_build.go index f782e7ccb..003bd8461 100644 --- a/pkg/reconciler/image/reconcile_build.go +++ b/pkg/reconciler/image/reconcile_build.go @@ -13,6 +13,8 @@ import ( corev1alpha1 "github.com/pivotal/kpack/pkg/apis/core/v1alpha1" ) +const BuildRunningReason = "BuildRunning" + func (c *Reconciler) reconcileBuild(ctx context.Context, image *buildapi.Image, latestBuild *buildapi.Build, sourceResolver *buildapi.SourceResolver, builder buildapi.BuilderResource, buildCacheName string) (buildapi.ImageStatus, error) { currentBuildNumber, err := buildCounter(latestBuild) if err != nil { @@ -157,3 +159,16 @@ func buildCounter(build *buildapi.Build) (int64, error) { buildNumber := build.Labels[buildapi.BuildNumberLabel] return strconv.ParseInt(buildNumber, 10, 64) } + +func buildRunningCondition(build *buildapi.Build, builder buildapi.BuilderResource) corev1alpha1.Conditions { + return corev1alpha1.Conditions{ + { + Type: corev1alpha1.ConditionReady, + Status: corev1.ConditionUnknown, + Reason: BuildRunningReason, + Message: emptyMessageIfNil(build.Status.GetCondition(corev1alpha1.ConditionSucceeded)), + LastTransitionTime: corev1alpha1.VolatileTime{Inner: metav1.Now()}, + }, + builderCondition(builder), + } +}