Blame SOURCES/bz1977588-3-fence_kubevirt-fix-status.patch

0ed125
From c23bfc3b9fc6e1dc7b1350e340171f3827fb6fb7 Mon Sep 17 00:00:00 2001
0ed125
From: Nir Argaman <nargaman@redhat.com>
0ed125
Date: Mon, 1 Nov 2021 08:34:00 +0200
0ed125
Subject: [PATCH] fence_kubevirt: Fix kubevirt VM status
0ed125
0ed125
---
0ed125
 agents/kubevirt/fence_kubevirt.py | 19 +++++++++++++------
0ed125
 1 file changed, 13 insertions(+), 6 deletions(-)
0ed125
0ed125
diff --git a/agents/kubevirt/fence_kubevirt.py b/agents/kubevirt/fence_kubevirt.py
0ed125
index 70c14d89a..61ffcaa09 100755
0ed125
--- a/agents/kubevirt/fence_kubevirt.py
0ed125
+++ b/agents/kubevirt/fence_kubevirt.py
0ed125
@@ -4,7 +4,7 @@
0ed125
 import logging
0ed125
 sys.path.append("@FENCEAGENTSLIBDIR@")
0ed125
 from fencing import *
0ed125
-from fencing import fail, fail_usage, run_delay, EC_STATUS
0ed125
+from fencing import fail, fail_usage, run_delay, EC_STATUS, EC_FETCH_VM_UUID
0ed125
 
0ed125
 try:
0ed125
     from kubernetes.client.exceptions import ApiException
0ed125
@@ -35,13 +35,15 @@ def get_power_status(conn, options):
0ed125
         vmi_api = conn.resources.get(api_version=apiversion,
0ed125
                                               kind='VirtualMachineInstance')
0ed125
         vmi = vmi_api.get(name=name, namespace=namespace)
0ed125
-        if vmi is not None:
0ed125
-            phase = vmi.status.phase
0ed125
-            if phase == "Running":
0ed125
-                return "on"
0ed125
-        return "off"
0ed125
+        return translate_status(vmi.status.phase)
0ed125
     except ApiException as e:
0ed125
         if e.status == 404:
0ed125
+            try:
0ed125
+                vm_api = conn.resources.get(api_version=apiversion, kind='VirtualMachine')
0ed125
+                vm = vm_api.get(name=name, namespace=namespace)
0ed125
+            except ApiException as e:
0ed125
+                logging.error("VM %s doesn't exist", name)
0ed125
+                fail(EC_FETCH_VM_UUID)
0ed125
             return "off"
0ed125
         logging.error("Failed to get power status, with API Exception: %s", e)
0ed125
         fail(EC_STATUS)
0ed125
@@ -49,6 +51,11 @@ def get_power_status(conn, options):
0ed125
         logging.error("Failed to get power status, with Exception: %s", e)
0ed125
         fail(EC_STATUS)
0ed125
 
0ed125
+def translate_status(instance_status):
0ed125
+    if instance_status == "Running":
0ed125
+        return "on"
0ed125
+    return "unknown"
0ed125
+
0ed125
 def set_power_status(conn, options):
0ed125
     logging.debug("Starting set status operation")
0ed125
     try: