Merge ~ack/maas:1988759-vmhost-deploy-3.1 into maas:3.1

Proposed by Alberto Donato
Status: Merged
Merge reported by: Alberto Donato
Merged at revision: f8b559effd63d85343cba11462310e8b3e705296
Proposed branch: ~ack/maas:1988759-vmhost-deploy-3.1
Merge into: maas:3.1
Diff against target: 119 lines (+43/-14)
2 files modified
src/provisioningserver/drivers/pod/lxd.py (+11/-10)
src/provisioningserver/drivers/pod/tests/test_lxd.py (+32/-4)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
Review via email: mp+431586@code.launchpad.net

Commit message

LP:1988759 allow null config from LXD storage pools

(backport of 95c09efaf and 9b23293a6)

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

LANDING
-b 1988759-vmhost-deploy-3.1 lp:~ack/maas/+git/maas into -b 3.1 lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas-tester/1072/consoleText

Revision history for this message
MAAS Lander (maas-lander) wrote :

LANDING
-b 1988759-vmhost-deploy-3.1 lp:~ack/maas/+git/maas into -b 3.1 lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas-tester/1074/consoleText

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 2ef7f8c..0706aee 100644
3--- a/src/provisioningserver/drivers/pod/lxd.py
4+++ b/src/provisioningserver/drivers/pod/lxd.py
5@@ -391,7 +391,7 @@ class LXDPodDriver(PodDriver):
6 pools = []
7 local_storage = 0
8 for storage_pool in storage_pools:
9- discovered_storage_pool = self._get_discovered_pod_storage_pool(
10+ discovered_storage_pool = self._get_discovered_storage_pool(
11 storage_pool
12 )
13 local_storage += discovered_storage_pool.storage
14@@ -803,11 +803,12 @@ class LXDPodDriver(PodDriver):
15 location=machine.location,
16 )
17
18- def _get_discovered_pod_storage_pool(self, storage_pool):
19- """Get the Pod storage pool."""
20- storage_pool_config = storage_pool.config
21- # Sometimes the config is empty, use get() method on the dictionary in case.
22- storage_pool_path = storage_pool_config.get("source")
23+ def _get_discovered_storage_pool(self, storage_pool):
24+ """Get storage pool info by name."""
25+ # Storage configuration can either be empty or None (if credentials are
26+ # restricted to a project)
27+ storage_pool_config = storage_pool.config or {}
28+ storage_pool_path = storage_pool_config.get("source", "")
29 storage_pool_resources = storage_pool.resources.get()
30 total_storage = storage_pool_resources.space["total"]
31
32@@ -875,7 +876,7 @@ class LXDPodDriver(PodDriver):
33 try:
34 client.authenticate(password)
35 except LXDAPIException as e:
36- raise Error(f"Password authentication failed: {e}")
37+ raise Error(f"Password authentication failed: {e}") from e
38 return client
39
40 try:
41@@ -898,10 +899,10 @@ class LXDPodDriver(PodDriver):
42 raise Error(
43 "Certificate is not trusted and no password was given"
44 )
45- except ClientConnectionFailed:
46+ except ClientConnectionFailed as e:
47 raise LXDPodError(
48- f"Pod {pod_id}: Failed to connect to the LXD REST API."
49- )
50+ f"Pod {pod_id}: Failed to connect to the LXD REST API: {e}"
51+ ) from e
52 yield client
53 if cert_paths:
54 for path in cert_paths:
55diff --git a/src/provisioningserver/drivers/pod/tests/test_lxd.py b/src/provisioningserver/drivers/pod/tests/test_lxd.py
56index c74af1f..d72ec1d 100644
57--- a/src/provisioningserver/drivers/pod/tests/test_lxd.py
58+++ b/src/provisioningserver/drivers/pod/tests/test_lxd.py
59@@ -721,12 +721,11 @@ class TestLXDPodDriver(MAASTestCase):
60 ],
61 )
62
63- def test_get_discovered_pod_storage_pool(self):
64+ def test_get_discovered_storage_pool(self):
65 mock_storage_pool = Mock()
66 mock_storage_pool.name = factory.make_name("pool")
67 mock_storage_pool.driver = "dir"
68 mock_storage_pool.config = {
69- "size": "61203283968",
70 "source": "/home/chb/mnt/l2/disks/default.img",
71 "volume.size": "0",
72 "zfs.pool_name": "default",
73@@ -734,8 +733,8 @@ class TestLXDPodDriver(MAASTestCase):
74 mock_resources = Mock()
75 mock_resources.space = {"used": 207111192576, "total": 306027577344}
76 mock_storage_pool.resources.get.return_value = mock_resources
77- discovered_pod_storage_pool = (
78- self.driver._get_discovered_pod_storage_pool(mock_storage_pool)
79+ discovered_pod_storage_pool = self.driver._get_discovered_storage_pool(
80+ mock_storage_pool
81 )
82 self.assertEqual(
83 mock_storage_pool.name, discovered_pod_storage_pool.id
84@@ -754,6 +753,35 @@ class TestLXDPodDriver(MAASTestCase):
85 mock_resources.space["total"], discovered_pod_storage_pool.storage
86 )
87
88+ def test_get_discovered_storage_pool_no_source(self):
89+ mock_storage_pool = Mock()
90+ mock_storage_pool.name = factory.make_name("pool")
91+ mock_storage_pool.driver = "dir"
92+ mock_storage_pool.config = {
93+ "volume.size": "0",
94+ "zfs.pool_name": "default",
95+ }
96+ mock_resources = Mock()
97+ mock_resources.space = {"used": 207111192576, "total": 306027577344}
98+ mock_storage_pool.resources.get.return_value = mock_resources
99+ discovered_pod_storage_pool = self.driver._get_discovered_storage_pool(
100+ mock_storage_pool
101+ )
102+ self.assertEqual(discovered_pod_storage_pool.path, "")
103+
104+ def test_get_discovered_storage_pool_no_config(self):
105+ mock_storage_pool = Mock()
106+ mock_storage_pool.name = factory.make_name("pool")
107+ mock_storage_pool.driver = "dir"
108+ mock_storage_pool.config = None
109+ mock_resources = Mock()
110+ mock_resources.space = {"used": 207111192576, "total": 306027577344}
111+ mock_storage_pool.resources.get.return_value = mock_resources
112+ discovered_pod_storage_pool = self.driver._get_discovered_storage_pool(
113+ mock_storage_pool
114+ )
115+ self.assertEqual(discovered_pod_storage_pool.path, "")
116+
117 def test_get_discovered_machine(self):
118 mock_machine = Mock()
119 mock_machine.name = factory.make_name("machine")

Subscribers

People subscribed via source and target branches