When an instance is committed, the, so far forthcoming, disks
will be replaced by the actual ones. This requires AddInstanceDisk
to be able to replace existing disks. So add support for this.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 lib/config/__init__.py | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/lib/config/__init__.py b/lib/config/__init__.py
index 9d0f89b..c8b56c2 100644
--- a/lib/config/__init__.py
+++ b/lib/config/__init__.py
@@ -329,7 +329,7 @@ class ConfigWriter(object):
     """
     return self._UnlockedGetInstanceDisks(inst_uuid)
 
-  def _UnlockedAddDisk(self, disk):
+  def _UnlockedAddDisk(self, disk, replaces=False):
     """Add a disk to the config.
 
     @type disk: L{objects.Disk}
@@ -341,9 +341,12 @@ class ConfigWriter(object):
 
     logging.info("Adding disk %s to configuration", disk.uuid)
 
-    self._CheckUniqueUUID(disk, include_temporary=False)
-    disk.serial_no = 1
-    disk.ctime = disk.mtime = time.time()
+    if replaces:
+      self._CheckUUIDpresent(disk)
+    else:
+      self._CheckUniqueUUID(disk, include_temporary=False)
+      disk.serial_no = 1
+      disk.ctime = disk.mtime = time.time()
     disk.UpgradeConfig()
     self._ConfigData().disks[disk.uuid] = disk
     self._ConfigData().cluster.serial_no += 1
@@ -389,14 +392,14 @@ class ConfigWriter(object):
     instance.mtime = time.time()
 
   @ConfigSync()
-  def AddInstanceDisk(self, inst_uuid, disk, idx=None):
+  def AddInstanceDisk(self, inst_uuid, disk, idx=None, replaces=False):
     """Add a disk to the config and attach it to instance.
 
     This is a simple wrapper over L{_UnlockedAddDisk} and
     L{_UnlockedAttachInstanceDisk}.
 
     """
-    self._UnlockedAddDisk(disk)
+    self._UnlockedAddDisk(disk, replaces=replaces)
     self._UnlockedAttachInstanceDisk(inst_uuid, disk.uuid, idx)
 
   def _UnlockedDetachInstanceDisk(self, inst_uuid, disk_uuid):
-- 
2.2.0.rc0.207.ga3a616c

Reply via email to