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
