diff --git a/pkg/reconciler/kubernetes/tektonhub/tektonhub.go b/pkg/reconciler/kubernetes/tektonhub/tektonhub.go index c6875fb35f..4970b39e94 100644 --- a/pkg/reconciler/kubernetes/tektonhub/tektonhub.go +++ b/pkg/reconciler/kubernetes/tektonhub/tektonhub.go @@ -139,19 +139,19 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, th *v1alpha1.TektonHub) // Manage DB if err := r.manageDbComponent(ctx, th, hubDir, version); err != nil { - return err + return r.handleError(err, th) } th.Status.MarkDbInstallerSetAvailable() // Manage DB migration if err := r.manageDbMigrationComponent(ctx, th, hubDir, version); err != nil { - return err + return r.handleError(err, th) } th.Status.MarkDatabasebMigrationDone() // Manage API if err := r.manageApiComponent(ctx, th, hubDir, version); err != nil { - return err + return r.handleError(err, th) } th.Status.MarkApiInstallerSetAvailable() @@ -164,6 +164,14 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, th *v1alpha1.TektonHub) return nil } +func (r *Reconciler) handleError(err error, th *v1alpha1.TektonHub) error { + if err == v1alpha1.RECONCILE_AGAIN_ERR { + r.enqueueAfter(th, 10*time.Second) + return nil + } + return err +} + func (r *Reconciler) manageApiComponent(ctx context.Context, th *v1alpha1.TektonHub, hubDir, version string) error { // Validate whether the secrets and configmap are created for API if err := r.validateApiDependencies(ctx, th); err != nil { @@ -191,8 +199,7 @@ func (r *Reconciler) manageApiComponent(ctx context.Context, th *v1alpha1.Tekton err = r.checkComponentStatus(ctx, th, apiInstallerSet) if err != nil { th.Status.MarkApiInstallerSetNotAvailable(err.Error()) - r.enqueueAfter(th, 10*time.Second) - return err + return v1alpha1.RECONCILE_AGAIN_ERR } return nil } @@ -216,8 +223,7 @@ func (r *Reconciler) manageDbMigrationComponent(ctx context.Context, th *v1alpha err = r.checkComponentStatus(ctx, th, dbMigrationInstallerSet) if err != nil { th.Status.MarkDatabasebMigrationFailed(err.Error()) - r.enqueueAfter(th, 10*time.Second) - return err + return v1alpha1.RECONCILE_AGAIN_ERR } return nil } @@ -247,8 +253,7 @@ func (r *Reconciler) manageDbComponent(ctx context.Context, th *v1alpha1.TektonH err = r.checkComponentStatus(ctx, th, dbInstallerSet) if err != nil { th.Status.MarkDbInstallerSetNotAvailable(err.Error()) - r.enqueueAfter(th, 10*time.Second) - return err + return v1alpha1.RECONCILE_AGAIN_ERR } return nil diff --git a/pkg/reconciler/kubernetes/tektoninstallerset/install.go b/pkg/reconciler/kubernetes/tektoninstallerset/install.go index 35e08067c1..d812794b94 100644 --- a/pkg/reconciler/kubernetes/tektoninstallerset/install.go +++ b/pkg/reconciler/kubernetes/tektoninstallerset/install.go @@ -17,6 +17,7 @@ limitations under the License. package tektoninstallerset import ( + "context" "fmt" "strings" @@ -30,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/scheme" + "knative.dev/pkg/logging" "knative.dev/pkg/ptr" ) @@ -354,7 +356,7 @@ func (i *installer) AllDeploymentsReady() error { return nil } -func (i *installer) IsJobCompleted() error { +func (i *installer) IsJobCompleted(ctx context.Context, labels map[string]string, installSetName string) error { for _, u := range i.Manifest.Filter(jobPred).Resources() { resource, err := i.Manifest.Client.Get(&u) if err != nil { @@ -364,7 +366,10 @@ func (i *installer) IsJobCompleted() error { if err := scheme.Scheme.Convert(resource, job, nil); err != nil { return err } + + logger := logging.FromContext(ctx) if !isJobCompleted(job) { + logger.Info("job not ready in installerset, name: %s, created-by: %s, in namespace: %s", installSetName, labels[v1alpha1.CreatedByKey], job.GetNamespace()) return fmt.Errorf("Job not successful") } } diff --git a/pkg/reconciler/kubernetes/tektoninstallerset/install_test.go b/pkg/reconciler/kubernetes/tektoninstallerset/install_test.go index 4336b5ba04..84e8cde5e6 100644 --- a/pkg/reconciler/kubernetes/tektoninstallerset/install_test.go +++ b/pkg/reconciler/kubernetes/tektoninstallerset/install_test.go @@ -17,6 +17,7 @@ limitations under the License. package tektoninstallerset import ( + "context" "fmt" "testing" @@ -416,7 +417,7 @@ func TestJobCompleted(t *testing.T) { Manifest: manifest, } - err = i.IsJobCompleted() + err = i.IsJobCompleted(context.Background(), nil, "") if err != nil { t.Fatal("Unexpected Error: ", err) } @@ -435,7 +436,7 @@ func TestJobFailed(t *testing.T) { Manifest: manifest, } - err = i.IsJobCompleted() + err = i.IsJobCompleted(context.Background(), nil, "") if err == nil { t.Fatal("Expected Error but got nil ") } diff --git a/pkg/reconciler/kubernetes/tektoninstallerset/tektoninstallerset.go b/pkg/reconciler/kubernetes/tektoninstallerset/tektoninstallerset.go index 0268f4533c..9ac793566b 100644 --- a/pkg/reconciler/kubernetes/tektoninstallerset/tektoninstallerset.go +++ b/pkg/reconciler/kubernetes/tektoninstallerset/tektoninstallerset.go @@ -166,6 +166,14 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, installerSet *v1alpha1.T // Update Ready status of Controller installerSet.Status.MarkControllerReady() + // job + labels := installerSet.GetLabels() + installSetname := installerSet.GetName() + err = installer.IsJobCompleted(ctx, labels, installSetname) + if err != nil { + return err + } + // Check if any other deployment exists other than controller // and webhook and is ready err = installer.AllDeploymentsReady() @@ -178,12 +186,6 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, installerSet *v1alpha1.T // Mark all deployments ready installerSet.Status.MarkAllDeploymentsReady() - // job - err = installer.IsJobCompleted() - if err != nil { - return err - } - return nil }