diff --git a/daemons/ganeti-noded b/daemons/ganeti-noded index 86952c6b57b4a3385a8033ceedc06be9c6bb3929..c58df30251e5e183c0aa09511a6551abb22615c8 100755 --- a/daemons/ganeti-noded +++ b/daemons/ganeti-noded @@ -229,8 +229,8 @@ class NodeHttpServer(http.server.HttpServer): """Closes the given block devices. """ - disks = [objects.Disk.FromDict(cf) for cf in params] - return backend.CloseBlockDevices(disks) + disks = [objects.Disk.FromDict(cf) for cf in params[1]] + return backend.CloseBlockDevices(params[0], disks) # export/import -------------------------- diff --git a/lib/backend.py b/lib/backend.py index 45434dcafbb0f115b475cecf9d983eb03b169aff..fb030f583723f886e2bef6290ca42b1310df091c 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -2073,12 +2073,14 @@ def JobQueueSetDrainFlag(drain_flag): return True -def CloseBlockDevices(disks): +def CloseBlockDevices(instance_name, disks): """Closes the given block devices. This means they will be switched to secondary mode (in case of DRBD). + @param instance_name: if the argument is not empty, the symlinks + of this instance will be removed @type disks: list of L{objects.Disk} @param disks: the list of disks to be closed @rtype: tuple (success, message) @@ -2104,6 +2106,8 @@ def CloseBlockDevices(disks): if msg: return (False, "Can't make devices secondary: %s" % ",".join(msg)) else: + if instance_name: + _RemoveBlockDevLinks(instance_name) return (True, "All devices secondary") diff --git a/lib/rpc.py b/lib/rpc.py index a9619f9ad133cb5860b7c5b33c74b8197fae03de..bf16b523454ec2109b6418d2e8f44a9b7b4cd9fc 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -683,14 +683,14 @@ class RpcRunner(object): """ return self._SingleNodeCall(node, "blockdev_find", [disk.ToDict()]) - def call_blockdev_close(self, node, disks): + def call_blockdev_close(self, node, instance_name, disks): """Closes the given block devices. This is a single-node call. """ - return self._SingleNodeCall(node, "blockdev_close", - [cf.ToDict() for cf in disks]) + params = [instance_name, [cf.ToDict() for cf in disks]] + return self._SingleNodeCall(node, "blockdev_close", params) @classmethod def call_upload_file(cls, node_list, file_name, address_list=None):