Return link_name in blockdev_assemble rpc
authorDimitris Aragiorgis <dimara@grnet.gr>
Wed, 9 Oct 2013 14:45:34 +0000 (17:45 +0300)
committerThomas Thrainer <thomasth@google.com>
Thu, 24 Oct 2013 09:27:31 +0000 (11:27 +0200)
Until now this RPC returned only dev_path. Since we use it in
hotplug we have to know the simlink of the device so that we
pass it to the corresponding hypervisor command and include it
in block_devices entry in runtime files.

Fix unittest to be aware of changed rpc

Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Signed-off-by: Thomas Thrainer <thomasth@google.com>
Reviewed-by: Thomas Thrainer <thomasth@google.com>

lib/backend.py
test/py/cmdlib/instance_migration_unittest.py
test/py/cmdlib/instance_unittest.py

index 075ea3e..cf66a56 100644 (file)
@@ -2255,23 +2255,28 @@ def BlockdevAssemble(disk, owner, as_primary, idx):
   This is a wrapper over _RecursiveAssembleBD.
 
   @rtype: str or boolean
-  @return: a C{/dev/...} path for primary nodes, and
-      C{True} for secondary nodes
+  @return: a tuple with the C{/dev/...} path and the created symlink
+      for primary nodes, and (C{True}, C{True}) for secondary nodes
 
   """
   try:
     result = _RecursiveAssembleBD(disk, owner, as_primary)
     if isinstance(result, BlockDev):
       # pylint: disable=E1103
-      result = result.dev_path
+      dev_path = result.dev_path
+      link_name = None
       if as_primary:
-        _SymlinkBlockDev(owner, result, idx)
+        link_name = _SymlinkBlockDev(owner, dev_path, idx)
+    elif result:
+      return result, result
+    else:
+      _Fail("Unexpected result from _RecursiveAssembleBD")
   except errors.BlockDeviceError, err:
     _Fail("Error while assembling disk: %s", err, exc=True)
   except OSError, err:
     _Fail("Error while symlinking disk: %s", err, exc=True)
 
-  return result
+  return dev_path, link_name
 
 
 def BlockdevShutdown(disk):
index 0b25cc9..4de9ae1 100644 (file)
@@ -128,7 +128,7 @@ class TestLUInstanceFailover(CmdlibTestCase):
         .CreateSuccessfulNodeResult(self.master, True)
     self.rpc.call_blockdev_assemble.return_value = \
       self.RpcResultsBuilder() \
-        .CreateSuccessfulNodeResult(self.snode, True)
+        .CreateSuccessfulNodeResult(self.snode, ("/dev/mock", "/var/mock"))
     self.rpc.call_instance_start.return_value = \
       self.RpcResultsBuilder() \
         .CreateSuccessfulNodeResult(self.snode, True)
index 0ea7191..9a539c7 100644 (file)
@@ -1491,7 +1491,8 @@ class TestLUInstanceMove(CmdlibTestCase):
 
     self.rpc.call_blockdev_assemble.return_value = \
       self.RpcResultsBuilder() \
-        .CreateSuccessfulNodeResult(self.node, "/dev/mocked_path")
+        .CreateSuccessfulNodeResult(self.node, ("/dev/mocked_path",
+                                    "/var/run/ganeti/instance-disks/mocked_d"))
     self.rpc.call_blockdev_export.return_value = \
       self.RpcResultsBuilder() \
         .CreateSuccessfulNodeResult(self.master, "")
@@ -1607,7 +1608,7 @@ class TestLUInstanceRename(CmdlibTestCase):
   def testFileInstance(self):
     self.rpc.call_blockdev_assemble.return_value = \
       self.RpcResultsBuilder() \
-        .CreateSuccessfulNodeResult(self.master, None)
+        .CreateSuccessfulNodeResult(self.master, (None, None))
     self.rpc.call_blockdev_shutdown.return_value = \
       self.RpcResultsBuilder() \
         .CreateSuccessfulNodeResult(self.master, None)