Merge ~cgrabowski/maas:handle_existing_cluster_returning_no_name_on_discover into maas:master

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: e6c81ff28a749535d63adb4caf0351bf4880bfe7
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:handle_existing_cluster_returning_no_name_on_discover
Merge into: maas:master
Diff against target: 140 lines (+105/-2)
2 files modified
src/maasserver/tests/test_vmhost.py (+95/-0)
src/maasserver/vmhost.py (+10/-2)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Alexsander de Souza Approve
Review via email: mp+410561@code.launchpad.net

Commit message

use existing cluster name when discovered_cluster does not return one

To post a comment you must log in.
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

+1

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

UNIT TESTS
-b handle_existing_cluster_returning_no_name_on_discover lp:~cgrabowski/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: e6c81ff28a749535d63adb4caf0351bf4880bfe7

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/tests/test_vmhost.py b/src/maasserver/tests/test_vmhost.py
2index f33bbab..b0a4843 100644
3--- a/src/maasserver/tests/test_vmhost.py
4+++ b/src/maasserver/tests/test_vmhost.py
5@@ -464,6 +464,48 @@ class TestSyncVMCluster(MAASServerTestCase):
6 cluster.hosts(), updated_vmhost.hints.cluster.hosts()
7 )
8
9+ def test_sync_vmcluster_uses_existing_cluster_name_when_discovered_cluster_has_none(
10+ self,
11+ ):
12+ (
13+ discovered_cluster,
14+ discovered_racks,
15+ failed_racks,
16+ ) = fake_cluster_discovery(self)
17+ discovered_cluster.name = None
18+ zone = factory.make_Zone()
19+ pool = factory.make_ResourcePool()
20+ cluster = factory.make_VMCluster(
21+ name=factory.make_name("cluster"),
22+ project=discovered_cluster.project,
23+ zone=zone,
24+ pool=pool,
25+ pods=0,
26+ )
27+ vmhosts = [
28+ factory.make_Pod(
29+ cluster=cluster,
30+ parameters={"power_address": address},
31+ zone=zone,
32+ pool=pool,
33+ )
34+ for address in discovered_cluster.pod_addresses
35+ ]
36+ successes = {
37+ rack_id: discovered_cluster for rack_id in discovered_racks
38+ }
39+ failures = {
40+ rack_id: factory.make_exception() for rack_id in failed_racks
41+ }
42+ self.patch(vmhost_module, "discover_pod").return_value = (
43+ successes,
44+ failures,
45+ )
46+ updated_vmhost = vmhost_module.discover_and_sync_vmhost(
47+ vmhosts[0], factory.make_User()
48+ )
49+ self.assertEqual(updated_vmhost.hints.cluster.name, cluster.name)
50+
51
52 class TestSyncVMClusterAsync(MAASTransactionServerTestCase):
53
54@@ -670,3 +712,56 @@ class TestSyncVMClusterAsync(MAASTransactionServerTestCase):
55 )
56
57 await deferToDatabase(_compare_cluster)
58+
59+ @wait_for_reactor
60+ async def test_sync_vmcluster_uses_existing_cluster_name_when_discovered_cluster_has_none_async(
61+ self,
62+ ):
63+ (
64+ discovered_cluster,
65+ discovered_racks,
66+ failed_racks,
67+ ) = await deferToDatabase(fake_cluster_discovery, self)
68+ discovered_cluster.name = None
69+ zone = await deferToDatabase(factory.make_Zone)
70+ pool = await deferToDatabase(factory.make_ResourcePool)
71+ cluster = await deferToDatabase(
72+ factory.make_VMCluster,
73+ name=factory.make_name("cluster"),
74+ project=discovered_cluster.project,
75+ zone=zone,
76+ pool=pool,
77+ pods=0,
78+ )
79+
80+ def _create_vmhosts():
81+ return [
82+ factory.make_Pod(
83+ cluster=cluster,
84+ parameters={"power_address": address},
85+ zone=zone,
86+ pool=pool,
87+ )
88+ for address in discovered_cluster.pod_addresses
89+ ]
90+
91+ vmhosts = await deferToDatabase(_create_vmhosts)
92+ successes = {
93+ rack_id: discovered_cluster for rack_id in discovered_racks
94+ }
95+ failures = {
96+ rack_id: factory.make_exception() for rack_id in failed_racks
97+ }
98+ vmhost_module.discover_pod.return_value = succeed(
99+ (successes, failures)
100+ )
101+ user = await deferToDatabase(factory.make_User)
102+ updated_vmhost = await vmhost_module.discover_and_sync_vmhost_async(
103+ vmhosts[0], user
104+ )
105+
106+ def _get_name():
107+ return updated_vmhost.hints.cluster.name
108+
109+ name = await deferToDatabase(_get_name)
110+ self.assertEqual(name, cluster.name)
111diff --git a/src/maasserver/vmhost.py b/src/maasserver/vmhost.py
112index 2fc5a11..2a67f64 100644
113--- a/src/maasserver/vmhost.py
114+++ b/src/maasserver/vmhost.py
115@@ -179,7 +179,10 @@ def _get_or_create_clustered_host(
116
117 def sync_vmcluster(discovered_cluster, discovered, vmhost, user):
118 cluster, _ = VMCluster.objects.get_or_create(
119- name=discovered_cluster.name or vmhost.name,
120+ name=discovered_cluster.name
121+ or (
122+ vmhost.hints.cluster.name if vmhost.hints.cluster else vmhost.name
123+ ),
124 project=discovered_cluster.project,
125 pool=vmhost.pool,
126 zone=vmhost.zone,
127@@ -215,7 +218,12 @@ def sync_vmcluster(discovered_cluster, discovered, vmhost, user):
128 async def sync_vmcluster_async(discovered_cluster, discovered, vmhost, user):
129 def _transaction(discovered_cluster, discovered, vmhost, user):
130 cluster, _ = VMCluster.objects.get_or_create(
131- name=discovered_cluster.name or vmhost.name,
132+ name=discovered_cluster.name
133+ or (
134+ vmhost.hints.cluster.name
135+ if vmhost.hints.cluster
136+ else vmhost.name
137+ ),
138 project=discovered_cluster.project,
139 pool=vmhost.pool,
140 zone=vmhost.zone,

Subscribers

People subscribed via source and target branches