From 2a710df1ff9dc68265c9a84e9a28f22a3c77ff8d Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Thu, 30 Aug 2007 15:36:10 +0000
Subject: [PATCH] - Check for secondary node before doing a failover. - Replace
 magic values by constants.

Reviewed-by: iustinp
---
 lib/cmdlib.py | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index b3d83eac5..014290fe4 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2192,8 +2192,17 @@ class LUFailoverInstance(LogicalUnit):
       raise errors.OpPrereqError("Instance '%s' not known" %
                                  self.op.instance_name)
 
+    if instance.disk_template != constants.DT_REMOTE_RAID1:
+      raise errors.OpPrereqError("Instance's disk layout is not"
+                                 " remote_raid1.")
+
+    secondary_nodes = instance.secondary_nodes
+    if not secondary_nodes:
+      raise errors.ProgrammerError("no secondary node but using "
+                                   "DT_REMOTE_RAID1 template")
+
     # check memory requirements on the secondary node
-    target_node = instance.secondary_nodes[0]
+    target_node = secondary_nodes[0]
     nodeinfo = rpc.call_node_info([target_node], self.cfg.GetVGName())
     info = nodeinfo.get(target_node, None)
     if not info:
@@ -2404,7 +2413,7 @@ def _GenerateDiskTemplate(cfg, template_name,
                               size=swap_sz,
                               children = [sdb_dev_m1, sdb_dev_m2])
     disks = [md_sda_dev, md_sdb_dev]
-  elif template_name == "remote_raid1":
+  elif template_name == constants.DT_REMOTE_RAID1:
     if len(secondary_nodes) != 1:
       raise errors.ProgrammerError("Wrong template configuration")
     remote_node = secondary_nodes[0]
@@ -2728,7 +2737,7 @@ class LUCreateInstance(LogicalUnit):
 
     if self.op.wait_for_sync:
       disk_abort = not _WaitForSync(self.cfg, iobj)
-    elif iobj.disk_template == "remote_raid1":
+    elif iobj.disk_template == constants.DT_REMOTE_RAID1:
       # make sure the disks are not degraded (still sync-ing is ok)
       time.sleep(15)
       feedback_fn("* checking mirrors status")
-- 
GitLab