diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index 21227facf362dbf6a72671cc6c9d989ee9c08716..881e4dd2b06fc1f21d9bf469106d170767889ab0 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 c6e5c30c4c90a72e28de17aeafd1cd958fb8a567..9584ef9adf0c55a4ebf9bdcece90d888158b1596 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 57dd960e4f1a2ecb6ad17e95d297435111712fa9..83a88cdf112ec65d018240d68fd7749040b30469 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):