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