Merge ~newell-jensen/maas:2.5-lp1812509 into maas:2.5

Proposed by Newell Jensen
Status: Merged
Approved by: Newell Jensen
Approved revision: 9a4ffe17ec07ab34c884e48c7e64e37bb30cc733
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~newell-jensen/maas:2.5-lp1812509
Merge into: maas:2.5
Diff against target: 71 lines (+37/-4)
2 files modified
src/maasserver/models/node.py (+8/-3)
src/maasserver/models/tests/test_node.py (+29/-1)
Reviewer Review Type Date Requested Status
Newell Jensen (community) Approve
Review via email: mp+362500@code.launchpad.net

Commit message

backport 6ac39e8857bb142ef59f234ce06c26310ca508be - LP: #1812509 -- Fix setting the power type for a node with BMCs that have matching power parameters.

To post a comment you must log in.
Revision history for this message
Newell Jensen (newell-jensen) wrote :

Self approved backport

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py
2index e49c649..3798baa 100644
3--- a/src/maasserver/models/node.py
4+++ b/src/maasserver/models/node.py
5@@ -1,4 +1,4 @@
6-# Copyright 2012-2018 Canonical Ltd. This software is licensed under the
7+# Copyright 2012-2019 Canonical Ltd. This software is licensed under the
8 # GNU Affero General Public License version 3 (see the file LICENSE).
9
10 """Node objects."""
11@@ -1219,8 +1219,13 @@ class Node(CleanSave, TimestampedModel):
12 return
13 if self.bmc is not None and self.bmc.power_type == power_type:
14 return
15- self.bmc, _ = BMC.objects.get_or_create(
16- power_type=power_type, power_parameters=self.power_parameters)
17+
18+ if power_type == 'manual':
19+ self.bmc = BMC.objects.create(
20+ power_type='manual', power_parameters={})
21+ else:
22+ self.bmc, _ = BMC.objects.get_or_create(
23+ power_type=power_type, power_parameters=self.power_parameters)
24
25 @property
26 def power_parameters(self):
27diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py
28index 361b6f8..3aa4169 100644
29--- a/src/maasserver/models/tests/test_node.py
30+++ b/src/maasserver/models/tests/test_node.py
31@@ -1,4 +1,4 @@
32-# Copyright 2012-2018 Canonical Ltd. This software is licensed under the
33+# Copyright 2012-2019 Canonical Ltd. This software is licensed under the
34 # GNU Affero General Public License version 3 (see the file LICENSE).
35
36 """Test maasserver models."""
37@@ -4582,6 +4582,34 @@ class TestNodePowerParameters(MAASServerTestCase):
38 self.assertEqual(node.power_type, node.bmc.power_type)
39 self.assertEqual(ip_address, node.bmc.ip_address.ip)
40
41+ def test_power_type_creates_new_bmc_for_manual_power_type(self):
42+ ip_address = factory.make_ipv4_address()
43+ bmc_parameters = dict(power_address=ip_address)
44+ node_parameters = dict(server_name=factory.make_string())
45+ parameters = {**bmc_parameters, **node_parameters}
46+ node = factory.make_Node(
47+ power_type='virsh', power_parameters=parameters)
48+ self.assertFalse(BMC.objects.filter(power_type='manual'))
49+ node.power_type = 'manual'
50+ node.save()
51+ node = reload_object(node)
52+ self.assertEqual('manual', node.bmc.power_type)
53+ self.assertEqual({}, node.bmc.power_parameters)
54+ self.assertTrue(BMC.objects.filter(power_type='manual'))
55+
56+ def test_power_type_does_not_create_new_bmc_for_already_manual(self):
57+ ip_address = factory.make_ipv4_address()
58+ bmc_parameters = dict(power_address=ip_address)
59+ node_parameters = dict(server_name=factory.make_string())
60+ parameters = {**bmc_parameters, **node_parameters}
61+ node = factory.make_Node(
62+ power_type='manual', power_parameters=parameters)
63+ bmc_id = node.bmc.id
64+ node.power_type = 'manual'
65+ node.save()
66+ node = reload_object(node)
67+ self.assertEqual(bmc_id, node.bmc.id)
68+
69 def test_power_parameters_are_stored_in_proper_scopes(self):
70 node = factory.make_Node(power_type='virsh')
71 bmc_parameters = dict(

Subscribers

People subscribed via source and target branches