From 18208ce291ef079420a4f8bb534958841851a8ee Mon Sep 17 00:00:00 2001 From: Victor Morales Date: Thu, 23 Jan 2025 14:46:39 -0800 Subject: [PATCH] Raise VMI failures --- cmd/kar/app/root.go | 6 ++++++ internal/runner.go | 18 +++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/kar/app/root.go b/cmd/kar/app/root.go index be2db28..4c1805e 100644 --- a/cmd/kar/app/root.go +++ b/cmd/kar/app/root.go @@ -18,9 +18,11 @@ package app import ( "context" + "errors" runner "github.com/electrocucaracha/kubevirt-actions-runner/internal" "github.com/spf13/cobra" + kubevirt_v1 "kubevirt.io/api/core/v1" ) func NewRootCommand(ctx context.Context, runner *runner.Runner, opts Opts) *cobra.Command { @@ -46,5 +48,9 @@ func run(ctx context.Context, runner *runner.Runner, opts Opts) error { runner.WaitForVirtualMachineInstance(ctx) + if runner.CurrentStatus == kubevirt_v1.Failed { + return errors.New("virtual machine instance has failed") + } + return nil } diff --git a/internal/runner.go b/internal/runner.go index ebf6a4d..9045ea6 100644 --- a/internal/runner.go +++ b/internal/runner.go @@ -45,6 +45,7 @@ type Runner struct { namespace string dataVolume string virtualMachineInstance string + CurrentStatus v1.VirtualMachineInstancePhase } func (rc *Runner) getResources(ctx context.Context, vmTemplate, runnerName, jitConfig string) ( @@ -162,23 +163,26 @@ func (rc *Runner) WaitForVirtualMachineInstance(ctx context.Context) { } defer watch.Stop() - lastPhase := "" lastTimeChecked := time.Now() for event := range watch.ResultChan() { vmi, ok := event.Object.(*v1.VirtualMachineInstance) if ok && vmi.Name == rc.virtualMachineInstance { - if vmi.Status.Phase != v1.VirtualMachineInstancePhase(lastPhase) { - lastPhase = string(vmi.Status.Phase) - log.Printf("%s has transitioned to %s phase \n", rc.virtualMachineInstance, lastPhase) + if vmi.Status.Phase != rc.CurrentStatus { + rc.CurrentStatus = vmi.Status.Phase + log.Printf("%s has transitioned to %s phase \n", rc.virtualMachineInstance, rc.CurrentStatus) lastTimeChecked = time.Now() - switch lastPhase { - case "Succeeded", "Failed": + switch rc.CurrentStatus { + case v1.Succeeded: + log.Printf("%s has successfuly completed\n", rc.virtualMachineInstance) + return + case v1.Failed: + log.Printf("%s has failed\n", rc.virtualMachineInstance) return } } else if time.Since(lastTimeChecked).Minutes() > 5.0 { - log.Printf("%s is in %s phase \n", rc.virtualMachineInstance, lastPhase) + log.Printf("%s is in %s phase \n", rc.virtualMachineInstance, rc.CurrentStatus) lastTimeChecked = time.Now() } }