Merge ~ack/maas:pod-websocket-always-storage-pools into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: a775c3f3623dc7b48755eff1219794307a3e353f
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:pod-websocket-always-storage-pools
Merge into: maas:master
Diff against target: 111 lines (+45/-28)
2 files modified
src/maasserver/websockets/handlers/pod.py (+29/-27)
src/maasserver/websockets/handlers/tests/test_pod.py (+16/-1)
Reviewer Review Type Date Requested Status
Adam Collard (community) Approve
MAAS Lander Approve
Review via email: mp+397726@code.launchpad.net

Commit message

LP: #1912727 - always include default_storage_pool/storage_pools in Pod websocket

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

UNIT TESTS
-b pod-websocket-always-storage-pools lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: a75de86dfe63204d8f7b61ecd7b6e7b7908b2986

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

UNIT TESTS
-b pod-websocket-always-storage-pools lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: a775c3f3623dc7b48755eff1219794307a3e353f

review: Approve
Revision history for this message
Adam Collard (adam-collard) wrote :

+1

review: Approve

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/websockets/handlers/pod.py b/src/maasserver/websockets/handlers/pod.py
2index ab9b876..8180a69 100644
3--- a/src/maasserver/websockets/handlers/pod.py
4+++ b/src/maasserver/websockets/handlers/pod.py
5@@ -102,33 +102,37 @@ class PodHandler(TimestampedModelHandler):
6 """Add extra fields to `data`."""
7 if self.user.is_superuser:
8 data.update(obj.power_parameters)
9- data["type"] = obj.power_type
10- data["total"] = self.dehydrate_total(obj)
11- data["used"] = self.dehydrate_used(obj)
12- data["available"] = self.dehydrate_available(obj)
13- data["composed_machines_count"] = obj.node_set.filter(
14- node_type=NODE_TYPE.MACHINE
15- ).count()
16- data["owners_count"] = (
17- obj.node_set.exclude(owner=None)
18- .values_list("owner")
19- .distinct()
20- .count()
21+ data.update(
22+ {
23+ "type": obj.power_type,
24+ "total": self.dehydrate_total(obj),
25+ "used": self.dehydrate_used(obj),
26+ "available": self.dehydrate_available(obj),
27+ "composed_machines_count": obj.node_set.filter(
28+ node_type=NODE_TYPE.MACHINE
29+ ).count(),
30+ "owners_count": (
31+ obj.node_set.exclude(owner=None)
32+ .values_list("owner")
33+ .distinct()
34+ .count()
35+ ),
36+ "hints": self.dehydrate_hints(obj.hints),
37+ "storage_pools": [
38+ self.dehydrate_storage_pool(pool)
39+ for pool in obj.storage_pools.all()
40+ ],
41+ "default_storage_pool": (
42+ obj.default_storage_pool.pool_id
43+ if obj.default_storage_pool
44+ else None
45+ ),
46+ "host": obj.host.system_id if obj.host else None,
47+ "numa_pinning": self.dehydrate_numa_pinning(obj),
48+ }
49 )
50- data["hints"] = self.dehydrate_hints(obj.hints)
51- storage_pools = obj.storage_pools.all()
52- if len(storage_pools) > 0:
53- pools_data = []
54- for pool in storage_pools:
55- pools_data.append(self.dehydrate_storage_pool(pool))
56- data["storage_pools"] = pools_data
57- data["default_storage_pool"] = obj.default_storage_pool.pool_id
58- if obj.host is not None:
59- data["host"] = obj.host.system_id
60- else:
61- data["host"] = None
62 if not for_list:
63- if obj.host is not None:
64+ if obj.host:
65 data["attached_vlans"] = list(
66 obj.host.interface_set.filter(
67 vlan_id__isnull=False
68@@ -146,8 +150,6 @@ class PodHandler(TimestampedModelHandler):
69 data["attached_vlans"] = []
70 data["boot_vlans"] = []
71
72- data["numa_pinning"] = self.dehydrate_numa_pinning(obj)
73-
74 if self.user.has_perm(PodPermission.compose, obj):
75 data["permissions"].append("compose")
76
77diff --git a/src/maasserver/websockets/handlers/tests/test_pod.py b/src/maasserver/websockets/handlers/tests/test_pod.py
78index 9e91f34..f76be47 100644
79--- a/src/maasserver/websockets/handlers/tests/test_pod.py
80+++ b/src/maasserver/websockets/handlers/tests/test_pod.py
81@@ -14,7 +14,7 @@ from twisted.internet.defer import inlineCallbacks, succeed
82 from maasserver.enum import INTERFACE_TYPE
83 from maasserver.forms import pods
84 from maasserver.forms.pods import PodForm
85-from maasserver.models import Pod
86+from maasserver.models import Pod, PodStoragePool
87 from maasserver.models.virtualmachine import MB, VirtualMachineInterface
88 from maasserver.testing.factory import factory
89 from maasserver.testing.testcase import MAASTransactionServerTestCase
90@@ -228,6 +228,21 @@ class TestPodHandler(MAASTransactionServerTestCase):
91 ],
92 )
93
94+ def test_get_with_pod_host_no_storage_pools(self):
95+ admin = factory.make_admin()
96+ handler = PodHandler(admin, {}, None)
97+ node = factory.make_Node()
98+ pod = self.make_pod_with_hints(
99+ pod_type="lxd",
100+ host=node,
101+ )
102+ pod.default_storage_pool = None
103+ pod.save()
104+ PodStoragePool.objects.all().delete()
105+ result = handler.get({"id": pod.id})
106+ self.assertIsNone(result["default_storage_pool"])
107+ self.assertEqual(result["storage_pools"], [])
108+
109 def test_get_with_pod_host_no_vlan(self):
110 admin = factory.make_admin()
111 handler = PodHandler(admin, {}, None)

Subscribers

People subscribed via source and target branches