Removes the config lock in RemoveInstance.
Added a basic implementation of RemoveInstance
to config_mock. Removed a test on instance removal
as the code is now moved into haskell.

Signed-off-by: BSRK Aditya <[email protected]>
---
 lib/config/__init__.py              |   25 +++----------------------
 test/py/cmdlib/instance_unittest.py |   11 -----------
 test/py/testutils/config_mock.py    |    3 +++
 3 files changed, 6 insertions(+), 33 deletions(-)

diff --git a/lib/config/__init__.py b/lib/config/__init__.py
index c9be38d..991141f 100644
--- a/lib/config/__init__.py
+++ b/lib/config/__init__.py
@@ -1768,32 +1768,13 @@ class ConfigWriter(object):
     return self._SetInstanceStatus(inst_uuid, constants.ADMINST_OFFLINE, False,
                                    constants.ADMIN_SOURCE)
 
-  @ConfigSync()
   def RemoveInstance(self, inst_uuid):
     """Remove the instance from the configuration.
 
     """
-    if inst_uuid not in self._ConfigData().instances:
-      raise errors.ConfigurationError("Unknown instance '%s'" % inst_uuid)
-
-    # If a network port has been allocated to the instance,
-    # return it to the pool of free ports.
-    inst = self._ConfigData().instances[inst_uuid]
-    network_port = getattr(inst, "network_port", None)
-    if network_port is not None:
-      self._ConfigData().cluster.tcpudp_port_pool.add(network_port)
-
-    instance = self._UnlockedGetInstanceInfo(inst_uuid)
-
-    # FIXME: After RemoveInstance is moved to WConfd, use its internal
-    # function from TempRes module.
-    for nic in instance.nics:
-      if nic.network and nic.ip:
-        # Return all IP addresses to the respective address pools
-        self._UnlockedCommitIp(constants.RELEASE_ACTION, nic.network, nic.ip)
-
-    del self._ConfigData().instances[inst_uuid]
-    self._ConfigData().cluster.serial_no += 1
+    utils.SimpleRetry(True, self._wconfd.RemoveInstance, 0.1, 30,
+                      args=[inst_uuid])
+    self.OutDate()
 
   @ConfigSync()
   def RenameInstance(self, inst_uuid, new_name):
diff --git a/test/py/cmdlib/instance_unittest.py 
b/test/py/cmdlib/instance_unittest.py
index be8a86e..582d822 100644
--- a/test/py/cmdlib/instance_unittest.py
+++ b/test/py/cmdlib/instance_unittest.py
@@ -1784,17 +1784,6 @@ class TestCheckOpportunisticLocking(unittest.TestCase):
           instance.CheckOpportunisticLocking(op)
 
 
-class TestLUInstanceRemove(CmdlibTestCase):
-  def testRemoveMissingInstance(self):
-    op = opcodes.OpInstanceRemove(instance_name="missing.inst")
-    self.ExecOpCodeExpectOpPrereqError(op, "Instance 'missing.inst' not known")
-
-  def testRemoveInst(self):
-    inst = self.cfg.AddNewInstance(disks=[])
-    op = opcodes.OpInstanceRemove(instance_name=inst.name)
-    self.ExecOpCode(op)
-
-
 class TestLUInstanceMove(CmdlibTestCase):
   def setUp(self):
     super(TestLUInstanceMove, self).setUp()
diff --git a/test/py/testutils/config_mock.py b/test/py/testutils/config_mock.py
index 45a1280..aa36af9 100644
--- a/test/py/testutils/config_mock.py
+++ b/test/py/testutils/config_mock.py
@@ -969,3 +969,6 @@ class ConfigMock(config.ConfigWriter):
   def RemoveInstanceDisk(self, inst_uuid, disk_uuid):
     self._UnlockedDetachInstanceDisk(inst_uuid, disk_uuid)
     self._UnlockedRemoveDisk(disk_uuid)
+
+  def RemoveInstance(self, inst_uuid):
+    del self._ConfigData().instances[inst_uuid]
-- 
1.7.10.4

Reply via email to