Signed-off-by: Luca Bigliardi <[email protected]>
---
daemons/ganeti-noded | 7 +++++++
lib/backend.py | 10 ++++++++++
lib/rpc.py | 9 +++++++++
3 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded
index 21227fa..881e4dd 100755
--- a/daemons/ganeti-noded
+++ b/daemons/ganeti-noded
@@ -361,6 +361,13 @@ class NodeHttpServer(http.server.HttpServer):
disks = [objects.Disk.FromDict(cf) for cf in disks]
return backend.DrbdWaitSync(nodes_ip, disks)
+ @staticmethod
+ def perspective_drbd_helper(params):
+ """Query drbd helper.
+
+ """
+ return backend.GetDrbdUsermodeHelper()
+
# export/import --------------------------
@staticmethod
diff --git a/lib/backend.py b/lib/backend.py
index c6e5c30..9584ef9 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -3055,6 +3055,16 @@ def DrbdWaitSync(nodes_ip, disks):
return (alldone, min_resync)
+def GetDrbdUsermodeHelper():
+ """Returns DRBD usermode helper currently configured.
+
+ """
+ try:
+ return bdev.BaseDRBD.GetUsermodeHelper()
+ except errors.BlockDeviceError, err:
+ _Fail(str(err))
+
+
def PowercycleNode(hypervisor_type):
"""Hard-powercycle the node.
diff --git a/lib/rpc.py b/lib/rpc.py
index 57dd960..83a88cd 100644
--- a/lib/rpc.py
+++ b/lib/rpc.py
@@ -993,6 +993,15 @@ class RpcRunner(object):
return self._MultiNodeCall(node_list, "drbd_wait_sync",
[nodes_ip, [cf.ToDict() for cf in disks]])
+ @_RpcTimeout(_TMO_URGENT)
+ def call_drbd_helper(self, node_list):
+ """Gets drbd helper.
+
+ This is a multi-node call.
+
+ """
+ return self._MultiNodeCall(node_list, "drbd_helper", [])
+
@classmethod
@_RpcTimeout(_TMO_NORMAL)
def call_upload_file(cls, node_list, file_name, address_list=None):
--
1.7.1