diff --git a/controllers/k6_start.go b/controllers/k6_start.go index 4024cb26..358c7ee3 100644 --- a/controllers/k6_start.go +++ b/controllers/k6_start.go @@ -3,6 +3,7 @@ package controllers import ( "context" "fmt" + "net/http" "time" "github.com/go-logr/logr" @@ -15,6 +16,17 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) +func isServiceReady(log logr.Logger, service *v1.Service) bool { + resp, err := http.Get(fmt.Sprintf("http://%v.%v.svc.cluster.local:6565/v1/status", service.ObjectMeta.Name, service.ObjectMeta.Namespace)) + + if err != nil { + log.Error(err, fmt.Sprintf("failed to get status from %v", service.ObjectMeta.Name)) + return false + } + + return resp.StatusCode < 400 +} + // StartJobs in the Ready phase using a curl container func StartJobs(ctx context.Context, log logr.Logger, k6 *v1alpha1.K6, r *K6Reconciler) (ctrl.Result, error) { log.Info("Waiting for pods to get ready") @@ -58,6 +70,11 @@ func StartJobs(ctx context.Context, log logr.Logger, k6 *v1alpha1.K6, r *K6Recon for _, service := range sl.Items { hostnames = append(hostnames, service.ObjectMeta.Name) + + if !isServiceReady(log, &service) { + log.Info(fmt.Sprintf("%v service is not ready, aborting", service.ObjectMeta.Name)) + return false, nil + } } starter := jobs.NewStarterJob(k6, hostnames)