From 085b8e24633b1bb4f52ed15c84b47b26d8b00864 Mon Sep 17 00:00:00 2001
From: Thomas Thrainer <thomasth@google.com>
Date: Mon, 6 May 2013 17:03:56 +0200
Subject: [PATCH] Fix `drbdsetup show` parsing for DRBD 8.4

In DRBD 8.4, Ganeti does no longer use indexed external meta data but
flexible external metadata. Therefore, there is no longer a meta data
index in the output of `drbdsetup show`.

Signed-off-by: Thomas Thrainer <thomasth@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 lib/block/drbd.py      | 6 +++---
 lib/block/drbd_info.py | 8 +++++---
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/lib/block/drbd.py b/lib/block/drbd.py
index 65274f326..3cb78b446 100644
--- a/lib/block/drbd.py
+++ b/lib/block/drbd.py
@@ -320,8 +320,8 @@ class DRBD8Dev(base.BlockDev):
     if meta is not None:
       retval = retval and ("meta_dev" in info and
                            info["meta_dev"] == meta.dev_path)
-      retval = retval and ("meta_index" in info and
-                           info["meta_index"] == 0)
+      if "meta_index" in info:
+        retval = retval and info["meta_index"] == 0
     else:
       retval = retval and ("meta_dev" not in info and
                            "meta_index" not in info)
@@ -830,7 +830,7 @@ class DRBD8Dev(base.BlockDev):
         # no local disk, but network attached and it matches
         self._AssembleLocal(minor, self._children[0].dev_path,
                             self._children[1].dev_path, self.size)
-        if self._MatchesNet(self._GetShowInfo(minor)):
+        if self._MatchesLocal(self._GetShowInfo(minor)):
           break
         else:
           base.ThrowError("drbd%d: disk attach successful, but 'drbdsetup"
diff --git a/lib/block/drbd_info.py b/lib/block/drbd_info.py
index 9ebc7bd63..cf0cda783 100644
--- a/lib/block/drbd_info.py
+++ b/lib/block/drbd_info.py
@@ -442,9 +442,11 @@ class DRBD84ShowInfo(BaseShowInfo):
             for inner in lst[1:]:
               if inner[0] == "disk" and len(inner) == 2:
                 retval["local_dev"] = inner[1]
-              elif inner[0] == "meta-disk" and len(inner) == 3:
-                retval["meta_dev"] = inner[1]
-                retval["meta_index"] = inner[2]
+              elif inner[0] == "meta-disk":
+                if len(inner) > 1:
+                  retval["meta_dev"] = inner[1]
+                if len(inner) > 2:
+                  retval["meta_index"] = inner[2]
       elif sname == "_remote_host":
         for lst in section[1:]:
           if lst[0] == "address":
-- 
GitLab