From: Sarah Newman <[email protected]>
This addresses issue 1086 where adopted LVs are not tagged.
Signed-off-by: Sarah Newman <[email protected]>
---
lib/backend.py | 6 +++++-
lib/cmdlib/instance.py | 7 ++++---
lib/cmdlib/instance_storage.py | 5 +++--
lib/rpc_defs.py | 1 +
lib/server/noded.py | 3 ++-
5 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/lib/backend.py b/lib/backend.py
index ef386d2..d9e0589 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -3391,13 +3391,16 @@ def RemoveExport(export):
_Fail("Error while removing the export: %s", err, exc=True)
-def BlockdevRename(devlist):
+def BlockdevRename(devlist, info):
"""Rename a list of block devices.
@type devlist: list of tuples
@param devlist: list of tuples of the form (disk, new_unique_id); disk is
an L{objects.Disk} object describing the current disk, and new
unique_id is the name we rename it to
+ @type info: string
+ @param info: string that will be sent to the physical device
+ creation, used for example to set (LVM) tags on LVs
@rtype: boolean
@return: True if all renames succeeded, False otherwise
@@ -3412,6 +3415,7 @@ def BlockdevRename(devlist):
continue
try:
old_rpath = dev.dev_path
+ dev.SetInfo(info)
dev.Rename(unique_id)
new_rpath = dev.dev_path
if old_rpath != new_rpath:
diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py
index 5bb47db..d6945aa 100644
--- a/lib/cmdlib/instance.py
+++ b/lib/cmdlib/instance.py
@@ -1353,13 +1353,14 @@ class LUInstanceCreate(LogicalUnit):
if self.op.disk_template == constants.DT_PLAIN:
# rename LVs to the newly-generated names; we need to construct
# 'fake' LV disks with the old data, plus the new unique_id
+ info = GetInstanceInfoText(iobj)
tmp_disks = [objects.Disk.FromDict(v.ToDict()) for v in disks]
rename_to = []
for t_dsk, a_dsk in zip(tmp_disks, self.disks):
rename_to.append(t_dsk.logical_id)
t_dsk.logical_id = (t_dsk.logical_id[0], a_dsk[constants.IDISK_ADOPT])
result = self.rpc.call_blockdev_rename(self.pnode.uuid,
- zip(tmp_disks, rename_to))
+ zip(tmp_disks, rename_to), info)
result.Raise("Failed to rename adoped LVs")
else:
feedback_fn("* creating instance disks...")
@@ -3240,7 +3241,7 @@ class LUInstanceSetParams(LogicalUnit):
feedback_fn("Renaming original volumes...")
rename_list = [(o, n.children[0].logical_id)
for (o, n) in zip(self.instance.disks, new_disks)]
- result = self.rpc.call_blockdev_rename(pnode_uuid, rename_list)
+ result = self.rpc.call_blockdev_rename(pnode_uuid, rename_list, info)
result.Raise("Failed to rename original LVs")
feedback_fn("Initializing DRBD devices...")
@@ -3257,7 +3258,7 @@ class LUInstanceSetParams(LogicalUnit):
" renaming back original volumes...")
rename_back_list = [(n.children[0], o.logical_id)
for (n, o) in zip(new_disks, self.instance.disks)]
- result = self.rpc.call_blockdev_rename(pnode_uuid, rename_back_list)
+ result = self.rpc.call_blockdev_rename(pnode_uuid, rename_back_list,
info)
result.Raise("Failed to rename LVs back after error %s" % str(e))
raise
diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
index bb4e60e..fe39208 100644
--- a/lib/cmdlib/instance_storage.py
+++ b/lib/cmdlib/instance_storage.py
@@ -2375,9 +2375,10 @@ class TLReplaceDisks(Tasklet):
# device exists
rename_old_to_new.append((to_ren, ren_fn(to_ren, temp_suffix)))
+ info = GetInstanceInfoText(self.instance)
self.lu.LogInfo("Renaming the old LVs on the target node")
result = self.rpc.call_blockdev_rename(self.target_node_uuid,
- rename_old_to_new)
+ rename_old_to_new, info)
result.Raise("Can't rename old LVs on node %s" %
self.cfg.GetNodeName(self.target_node_uuid))
@@ -2386,7 +2387,7 @@ class TLReplaceDisks(Tasklet):
rename_new_to_old = [(new, old.logical_id)
for old, new in zip(old_lvs, new_lvs)]
result = self.rpc.call_blockdev_rename(self.target_node_uuid,
- rename_new_to_old)
+ rename_new_to_old, info)
result.Raise("Can't rename new LVs on node %s" %
self.cfg.GetNodeName(self.target_node_uuid))
diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py
index 200c97c..7f8ea9a 100644
--- a/lib/rpc_defs.py
+++ b/lib/rpc_defs.py
@@ -443,6 +443,7 @@ _BLOCKDEV_CALLS = [
], None, None, "Export a given disk to another node"),
("blockdev_rename", SINGLE, None, constants.RPC_TMO_NORMAL, [
("devlist", ED_BLOCKDEV_RENAME, None),
+ ("info", None, None),
], None, None, "Request rename of the given block devices"),
("blockdev_find", SINGLE, None, constants.RPC_TMO_NORMAL, [
("disk", ED_SINGLE_DISK_DICT_DP, None),
diff --git a/lib/server/noded.py b/lib/server/noded.py
index 0540a96..60883e6 100644
--- a/lib/server/noded.py
+++ b/lib/server/noded.py
@@ -256,7 +256,8 @@ class NodeRequestHandler(http.server.HttpServerHandler):
"""
devlist = [(objects.Disk.FromDict(ds), uid) for ds, uid in params[0]]
- return backend.BlockdevRename(devlist)
+ info = params[1]
+ return backend.BlockdevRename(devlist, info)
@staticmethod
def perspective_blockdev_assemble(params):
--
1.9.1