From 89d0443e40b3a5e9355ef444d6165b6729269c13 Mon Sep 17 00:00:00 2001 From: motive <motive@openwow.dev> Date: Thu, 3 Apr 2025 23:58:28 -0400 Subject: [PATCH] fix runner watch expiry --- internal/runner.go | 52 ++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/internal/runner.go b/internal/runner.go index 62f3ec2..75978ce 100644 --- a/internal/runner.go +++ b/internal/runner.go @@ -192,37 +192,39 @@ func (rc *KubevirtRunner) WaitForVirtualMachineInstance(ctx context.Context, vir const reportingElapse = 5.0 - watch, err := rc.virtClient.VirtualMachineInstance(rc.namespace).Watch(ctx, k8smetav1.ListOptions{}) - if err != nil { - return errors.Wrap(err, "failed to watch the virtual machine instance") - } - defer watch.Stop() + for rc.currentStatus != v1.Succeeded && rc.currentStatus != v1.Failed { + watch, err := rc.virtClient.VirtualMachineInstance(rc.namespace).Watch(ctx, k8smetav1.ListOptions{}) + if err != nil { + return errors.Wrap(err, "failed to watch the virtual machine instance") + } + defer watch.Stop() - lastTimeChecked := time.Now() + lastTimeChecked := time.Now() - for event := range watch.ResultChan() { - vmi, ok := event.Object.(*v1.VirtualMachineInstance) - if ok && vmi.Name == rc.virtualMachineInstance { - if vmi.Status.Phase != rc.currentStatus { - rc.currentStatus = vmi.Status.Phase - lastTimeChecked = time.Now() + for event := range watch.ResultChan() { + vmi, ok := event.Object.(*v1.VirtualMachineInstance) + if ok && vmi.Name == rc.virtualMachineInstance { + if vmi.Status.Phase != rc.currentStatus { + rc.currentStatus = vmi.Status.Phase + lastTimeChecked = time.Now() - switch rc.currentStatus { - case v1.Succeeded: - log.Printf("%s has successfully completed\n", virtualMachineInstance) + switch rc.currentStatus { + case v1.Succeeded: + log.Printf("%s has successfully completed\n", virtualMachineInstance) - return nil - case v1.Failed: - log.Printf("%s has failed\n", virtualMachineInstance) + return nil + case v1.Failed: + log.Printf("%s has failed\n", virtualMachineInstance) - return ErrRunnerFailed - default: - log.Printf("%s has transitioned to %s phase \n", virtualMachineInstance, rc.currentStatus) - } - } else if time.Since(lastTimeChecked).Minutes() > reportingElapse { - log.Printf("%s is in %s phase \n", virtualMachineInstance, rc.currentStatus) + return ErrRunnerFailed + default: + log.Printf("%s has transitioned to %s phase \n", virtualMachineInstance, rc.currentStatus) + } + } else if time.Since(lastTimeChecked).Minutes() > reportingElapse { + log.Printf("%s is in %s phase \n", virtualMachineInstance, rc.currentStatus) - lastTimeChecked = time.Now() + lastTimeChecked = time.Now() + } } } }