This patch allows to parse a release version number introduced in DRBD
8.4.7-1.

Signed-off-by: Jun Futagawa <[email protected]>
---
 lib/storage/drbd_info.py                |   16 +++++++++++-----
 test/py/ganeti.storage.drbd_unittest.py |   10 ++++++++++
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/lib/storage/drbd_info.py b/lib/storage/drbd_info.py
index 99605f1..4fd9a67 100644
--- a/lib/storage/drbd_info.py
+++ b/lib/storage/drbd_info.py
@@ -164,7 +164,8 @@ class DRBD8Info(object):
 
   """
 
-  _VERSION_RE = re.compile(r"^version: (\d+)\.(\d+)\.(\d+)(?:\.(\d+))?"
+  _VERSION_RE = re.compile(r"^version: (\d+)\.(\d+)\.(\d+)"
+                           r"(?:\.(\d+))?(?:-(\d+))?"
                            r" \(api:(\d+)/proto:(\d+)(?:-(\d+))?\)")
   _VALID_LINE_RE = re.compile("^ *([0-9]+): cs:([^ ]+).*$")
 
@@ -180,6 +181,7 @@ class DRBD8Info(object):
       - k_minor
       - k_point
       - k_fix (only on some drbd versions)
+      - k_release
       - api
       - proto
       - proto2 (only on drbd > 8.2.X)
@@ -196,6 +198,8 @@ class DRBD8Info(object):
              (version["k_major"], version["k_minor"], version["k_point"])
     if "k_fix" in version:
       retval += ".%s" % version["k_fix"]
+    if "k_release" in version:
+      retval += "-%s" % version["k_release"]
 
     retval += " (api:%d/proto:%d" % (version["api"], version["proto"])
     if "proto2" in version:
@@ -230,13 +234,15 @@ class DRBD8Info(object):
       "k_major": int(values[0]),
       "k_minor": int(values[1]),
       "k_point": int(values[2]),
-      "api": int(values[4]),
-      "proto": int(values[5]),
+      "api": int(values[5]),
+      "proto": int(values[6]),
       }
     if values[3] is not None:
       retval["k_fix"] = values[3]
-    if values[6] is not None:
-      retval["proto2"] = values[6]
+    if values[4] is not None:
+      retval["k_release"] = values[4]
+    if values[7] is not None:
+      retval["proto2"] = values[7]
 
     return retval
 
diff --git a/test/py/ganeti.storage.drbd_unittest.py 
b/test/py/ganeti.storage.drbd_unittest.py
index 9a1894f..2c181e8 100755
--- a/test/py/ganeti.storage.drbd_unittest.py
+++ b/test/py/ganeti.storage.drbd_unittest.py
@@ -50,6 +50,7 @@ class TestDRBD8(testutils.GanetiTestCase):
       "version: 8.0.12 (api:76/proto:86-91)",
       "version: 8.2.7 (api:88/proto:0-100)",
       "version: 8.3.7.49 (api:188/proto:13-191)",
+      "version: 8.4.7-1 (api:1/proto:86-101)",
     ]
     result = [
       {
@@ -83,6 +84,15 @@ class TestDRBD8(testutils.GanetiTestCase):
         "api": 188,
         "proto": 13,
         "proto2": "191",
+      },
+      {
+        "k_major": 8,
+        "k_minor": 4,
+        "k_point": 7,
+        "k_release": "1",
+        "api": 1,
+        "proto": 86,
+        "proto2": "101",
       }
     ]
     for d, r in zip(data, result):
-- 
1.7.1

Reply via email to