Merge ~adam-collard/maas:2.9-dont-stop-stopped-vms into maas:2.9

Proposed by Adam Collard
Status: Merged
Approved by: Adam Collard
Approved revision: fd0dfa071345efad252a6b05b2a9d95adce1d888
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~adam-collard/maas:2.9-dont-stop-stopped-vms
Merge into: maas:2.9
Diff against target: 41 lines (+18/-1)
2 files modified
src/provisioningserver/drivers/pod/lxd.py (+2/-1)
src/provisioningserver/drivers/pod/tests/test_lxd.py (+16/-0)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
Review via email: mp+395491@code.launchpad.net

Commit message

Make decompose() only try and stop VMs that aren't already stopped.

Cherry-pick b527caab1c98bcbefdda9ba731b9d2c45e921fa4

To post a comment you must log in.
Revision history for this message
Adam Collard (adam-collard) wrote :

self-approve backport

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/provisioningserver/drivers/pod/lxd.py b/src/provisioningserver/drivers/pod/lxd.py
2index bcb3e68..57221b2 100644
3--- a/src/provisioningserver/drivers/pod/lxd.py
4+++ b/src/provisioningserver/drivers/pod/lxd.py
5@@ -707,7 +707,8 @@ class LXDPodDriver(PodDriver):
6
7 def sync_decompose(instance_name):
8 machine = client.virtual_machines.get(instance_name)
9- machine.stop(force=True, wait=True)
10+ if machine.status_code != 102: # 102 - Stopped
11+ machine.stop(force=True, wait=True)
12 machine.delete(wait=True)
13
14 yield deferToThread(sync_decompose, context["instance_name"])
15diff --git a/src/provisioningserver/drivers/pod/tests/test_lxd.py b/src/provisioningserver/drivers/pod/tests/test_lxd.py
16index 99f53d9..edab76d 100644
17--- a/src/provisioningserver/drivers/pod/tests/test_lxd.py
18+++ b/src/provisioningserver/drivers/pod/tests/test_lxd.py
19@@ -1065,6 +1065,22 @@ class TestLXDPodDriver(MAASTestCase):
20 ),
21 )
22
23+ @inlineCallbacks
24+ def test_decompose_on_stopped_instance(self):
25+ pod_id = factory.make_name("pod_id")
26+ context = self.make_parameters_context()
27+ driver = lxd_module.LXDPodDriver()
28+ Client = self.patch(driver, "get_client")
29+ client = Client.return_value
30+ mock_machine = Mock()
31+ # Simulate the case where the VM is already stopped
32+ mock_machine.status_code = 102 # 102 - Stopped
33+ client.virtual_machines.get.return_value = mock_machine
34+ yield driver.decompose(pod_id, context)
35+
36+ mock_machine.stop.assert_not_called()
37+ mock_machine.delete.assert_called_once_with(wait=True)
38+
39
40 class TestLXDGetNicDevice(MAASTestCase):
41 def test_bridged(self):

Subscribers

People subscribed via source and target branches