From 61a980a9813ea9df8556e374262231d9fbe250e4 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Wed, 23 Feb 2011 14:39:08 +0100
Subject: [PATCH] Add constants for instance status
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

They've been hardcoded for too long.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Reviewed-by: RenΓ© Nussbaumer <rn@google.com>
---
 lib/cmdlib.py                 |  4 ++--
 lib/constants.py              | 18 ++++++++++++++++++
 lib/query.py                  | 14 +++++++-------
 lib/watcher/__init__.py       |  4 ++--
 test/ganeti.query_unittest.py | 19 ++++++++-----------
 5 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index db7df85c5..56d8fda0b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -7872,9 +7872,9 @@ class LUInstanceConsole(NoHooksLU):
 
     if instance.name not in node_insts.payload:
       if instance.admin_up:
-        state = "ERROR_down"
+        state = constants.INSTST_ERRORDOWN
       else:
-        state = "ADMIN_down"
+        state = constants.INSTST_ADMINDOWN
       raise errors.OpExecError("Instance %s is not running (state %s)" %
                                (instance.name, state))
 
diff --git a/lib/constants.py b/lib/constants.py
index 2afa13d70..117b43cc3 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -861,6 +861,24 @@ NV_VGLIST = "vglist"
 NV_VMNODES = "vmnodes"
 NV_OOB_PATHS = "oob-paths"
 
+# Instance status
+INSTST_RUNNING = "running"
+INSTST_ADMINDOWN = "ADMIN_down"
+INSTST_NODEOFFLINE = "ERROR_nodeoffline"
+INSTST_NODEDOWN = "ERROR_nodedown"
+INSTST_WRONGNODE = "ERROR_wrongnode"
+INSTST_ERRORUP = "ERROR_up"
+INSTST_ERRORDOWN = "ERROR_down"
+INSTST_ALL = frozenset([
+  INSTST_RUNNING,
+  INSTST_ADMINDOWN,
+  INSTST_NODEOFFLINE,
+  INSTST_NODEDOWN,
+  INSTST_WRONGNODE,
+  INSTST_ERRORUP,
+  INSTST_ERRORDOWN,
+  ])
+
 # SSL certificate check constants (in days)
 SSL_CERT_EXPIRATION_WARN = 30
 SSL_CERT_EXPIRATION_ERROR = 7
diff --git a/lib/query.py b/lib/query.py
index 55b03e658..b185170ef 100644
--- a/lib/query.py
+++ b/lib/query.py
@@ -779,23 +779,23 @@ def _GetInstStatus(ctx, inst):
 
   """
   if inst.primary_node in ctx.offline_nodes:
-    return "ERROR_nodeoffline"
+    return constants.INSTST_NODEOFFLINE
 
   if inst.primary_node in ctx.bad_nodes:
-    return "ERROR_nodedown"
+    return constants.INSTST_NODEDOWN
 
   if bool(ctx.live_data.get(inst.name)):
     if inst.name in ctx.wrongnode_inst:
-      return "ERROR_wrongnode"
+      return constants.INSTST_WRONGNODE
     elif inst.admin_up:
-      return "running"
+      return constants.INSTST_RUNNING
     else:
-      return "ERROR_up"
+      return constants.INSTST_ERRORUP
 
   if inst.admin_up:
-    return "ERROR_down"
+    return constants.INSTST_ERRORDOWN
 
-  return "ADMIN_down"
+  return constants.INSTST_ADMINDOWN
 
 
 def _GetInstDiskSize(index):
diff --git a/lib/watcher/__init__.py b/lib/watcher/__init__.py
index 098f8c2d5..ba78537b2 100644
--- a/lib/watcher/__init__.py
+++ b/lib/watcher/__init__.py
@@ -62,8 +62,8 @@ MAXTRIES = 5
 # 5 minutes, so it takes around half an hour to exceed the retry
 # counter, so 8 hours (16*1/2h) seems like a reasonable reset time
 RETRY_EXPIRATION = 8 * 3600
-BAD_STATES = ['ERROR_down']
-HELPLESS_STATES = ['ERROR_nodedown', 'ERROR_nodeoffline']
+BAD_STATES = [constants.INSTST_ERRORDOWN]
+HELPLESS_STATES = [constants.INSTST_NODEDOWN, constants.INSTST_NODEOFFLINE]
 NOTICE = 'NOTICE'
 ERROR = 'ERROR'
 KEY_RESTART_COUNT = "restart_count"
diff --git a/test/ganeti.query_unittest.py b/test/ganeti.query_unittest.py
index 18c6d2894..8994425a1 100755
--- a/test/ganeti.query_unittest.py
+++ b/test/ganeti.query_unittest.py
@@ -743,20 +743,20 @@ class TestInstanceQuery(unittest.TestCase):
                        (constants.RS_NORMAL, inst.name))
 
       if inst.primary_node in offline_nodes:
-        exp_status = "ERROR_nodeoffline"
+        exp_status = constants.INSTST_NODEOFFLINE
       elif inst.primary_node in bad_nodes:
-        exp_status = "ERROR_nodedown"
+        exp_status = constants.INSTST_NODEDOWN
       elif inst.name in live_data:
         if inst.name in wrongnode_inst:
-          exp_status = "ERROR_wrongnode"
+          exp_status = constants.INSTST_WRONGNODE
         elif inst.admin_up:
-          exp_status = "running"
+          exp_status = constants.INSTST_RUNNING
         else:
-          exp_status = "ERROR_up"
+          exp_status = constants.INSTST_ERRORUP
       elif inst.admin_up:
-        exp_status = "ERROR_down"
+        exp_status = constants.INSTST_ERRORDOWN
       else:
-        exp_status = "ADMIN_down"
+        exp_status = constants.INSTST_ADMINDOWN
 
       self.assertEqual(row[fieldidx["status"]],
                        (constants.RS_NORMAL, exp_status))
@@ -830,10 +830,7 @@ class TestInstanceQuery(unittest.TestCase):
       self._CheckInstanceConsole(inst, row[fieldidx["console"]])
 
     # Ensure all possible status' have been tested
-    self.assertEqual(tested_status,
-                     set(["ERROR_nodeoffline", "ERROR_nodedown",
-                          "running", "ERROR_up", "ERROR_down",
-                          "ADMIN_down", "ERROR_wrongnode"]))
+    self.assertEqual(tested_status, constants.INSTST_ALL)
 
   def _CheckInstanceConsole(self, instance, (status, consdata)):
     if instance.name == "inst7":
-- 
GitLab