Merge ~alemar99/maas:MAASENG-2872-fix-deployment-config-problems into maas:master

Proposed by Alessandro Marcolini
Status: Merged
Approved by: Jacopo Rota
Approved revision: 1a91c7aaea1d924b3d2fa33d0870d7f7620fc8d2
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~alemar99/maas:MAASENG-2872-fix-deployment-config-problems
Merge into: maas:master
Diff against target: 147 lines (+110/-7)
2 files modified
src/maasserver/api/machines.py (+5/-7)
src/maasserver/api/tests/test_machine.py (+105/-0)
Reviewer Review Type Date Requested Status
Jacopo Rota Approve
MAAS Lander Approve
Review via email: mp+463673@code.launchpad.net
To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b MAASENG-2872-fix-deployment-config-problems lp:~alemar99/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 1a91c7aaea1d924b3d2fa33d0870d7f7620fc8d2

review: Approve
Revision history for this message
Jacopo Rota (r00ta) wrote :

lgtm

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/api/machines.py b/src/maasserver/api/machines.py
2index 2c0a116..08bcad5 100644
3--- a/src/maasserver/api/machines.py
4+++ b/src/maasserver/api/machines.py
5@@ -851,21 +851,19 @@ class MachineHandler(NodeHandler, WorkloadAnnotationsMixin, PowerMixin):
6 NODE_STATUS_CHOICES_DICT[machine.status]
7 )
8 )
9- if not machine.distro_series and not series:
10+
11+ if not series:
12 series = Config.objects.get_config("default_distro_series")
13 Form = get_machine_edit_form(request.user)
14 form = Form(instance=machine, data={})
15- if series is not None:
16- form.set_distro_series(series=series)
17+ form.set_distro_series(series=series)
18 if license_key is not None:
19 form.set_license_key(license_key=license_key)
20 if hwe_kernel is not None:
21 form.set_hwe_kernel(hwe_kernel=hwe_kernel)
22- if options.install_rackd:
23- form.set_install_rackd(install_rackd=options.install_rackd)
24+ form.set_install_rackd(install_rackd=options.install_rackd)
25 form.set_ephemeral_deploy(ephemeral_deploy=ephemeral_deploy)
26- if options.enable_hw_sync:
27- form.set_enable_hw_sync(enable_hw_sync=options.enable_hw_sync)
28+ form.set_enable_hw_sync(enable_hw_sync=options.enable_hw_sync)
29 if form.is_valid():
30 form.save()
31 else:
32diff --git a/src/maasserver/api/tests/test_machine.py b/src/maasserver/api/tests/test_machine.py
33index 42b3511..4b8ae8a 100644
34--- a/src/maasserver/api/tests/test_machine.py
35+++ b/src/maasserver/api/tests/test_machine.py
36@@ -1415,6 +1415,111 @@ class TestMachineAPI(APITestCase.ForUser):
37 machine.refresh_from_db()
38 self.assertTrue(machine.enable_hw_sync)
39
40+ def test_POST_multiple_deploy_override_options_ephemeral_deploy(self):
41+ self.patch(node_module.Node, "_start")
42+ self.patch(machines_module, "get_curtin_merged_config")
43+ osystem = Config.objects.get_config("default_osystem")
44+ distro_series = Config.objects.get_config("default_distro_series")
45+ make_usable_osystem(
46+ self, osystem_name=osystem, releases=[distro_series]
47+ )
48+ machine = factory.make_Node(
49+ owner=self.user,
50+ interface=True,
51+ status=NODE_STATUS.ALLOCATED,
52+ power_type="manual",
53+ distro_series=distro_series,
54+ osystem=osystem,
55+ architecture=make_usable_architecture(self),
56+ )
57+
58+ response = self.client.post(
59+ self.get_machine_uri(machine),
60+ {"op": "deploy", "ephemeral_deploy": True},
61+ )
62+ self.assertEqual(http.client.OK, response.status_code)
63+ response_info = json_load_bytes(response.content)
64+ self.assertTrue(response_info["ephemeral_deploy"])
65+
66+ response = self.client.post(
67+ self.get_machine_uri(machine), {"op": "deploy"}
68+ )
69+ self.assertEqual(http.client.OK, response.status_code)
70+ response_info = json_load_bytes(response.content)
71+ self.assertFalse(response_info["ephemeral_deploy"])
72+
73+ def test_POST_multiple_deploy_override_options_hw_sync(self):
74+ self.patch(node_module.Node, "_start")
75+ self.patch(machines_module, "get_curtin_merged_config")
76+ osystem = Config.objects.get_config("default_osystem")
77+ distro_series = Config.objects.get_config("default_distro_series")
78+ make_usable_osystem(
79+ self, osystem_name=osystem, releases=[distro_series]
80+ )
81+ machine = factory.make_Node(
82+ owner=self.user,
83+ interface=True,
84+ status=NODE_STATUS.ALLOCATED,
85+ power_type="manual",
86+ distro_series=distro_series,
87+ osystem=osystem,
88+ architecture=make_usable_architecture(self),
89+ )
90+
91+ response = self.client.post(
92+ self.get_machine_uri(machine),
93+ {"op": "deploy", "enable_hw_sync": True},
94+ )
95+ self.assertEqual(http.client.OK, response.status_code)
96+ response_info = json_load_bytes(response.content)
97+ self.assertTrue(response_info["enable_hw_sync"])
98+
99+ response = self.client.post(
100+ self.get_machine_uri(machine), {"op": "deploy"}
101+ )
102+ self.assertEqual(http.client.OK, response.status_code)
103+ response_info = json_load_bytes(response.content)
104+ self.assertFalse(response_info["enable_hw_sync"])
105+
106+ def test_POST_multiple_deploy_override_options_distro_series(self):
107+ self.patch(node_module.Node, "_start")
108+ self.patch(machines_module, "get_curtin_merged_config")
109+ osystem = Config.objects.get_config("default_osystem")
110+ _, releases = make_usable_osystem(self)
111+ default_distro_series = Config.objects.get_config(
112+ "default_distro_series"
113+ )
114+ distro_series = (
115+ releases[0]
116+ if releases[0] != default_distro_series
117+ else releases[1]
118+ )
119+
120+ machine = factory.make_Node(
121+ owner=self.user,
122+ interface=True,
123+ status=NODE_STATUS.ALLOCATED,
124+ power_type="manual",
125+ distro_series=distro_series,
126+ osystem=osystem,
127+ architecture=make_usable_architecture(self),
128+ )
129+
130+ response = self.client.post(
131+ self.get_machine_uri(machine),
132+ {"op": "deploy", "distro_series": distro_series},
133+ )
134+ self.assertEqual(http.client.OK, response.status_code)
135+ response_info = json_load_bytes(response.content)
136+ self.assertEqual(response_info["distro_series"], distro_series)
137+
138+ response = self.client.post(
139+ self.get_machine_uri(machine), {"op": "deploy"}
140+ )
141+ self.assertEqual(http.client.OK, response.status_code)
142+ response_info = json_load_bytes(response.content)
143+ self.assertEqual(response_info["distro_series"], default_distro_series)
144+
145 def test_POST_release_releases_owned_machine(self):
146 self.patch(node_module.Machine, "_stop")
147 owned_statuses = [NODE_STATUS.RESERVED, NODE_STATUS.ALLOCATED]

Subscribers

People subscribed via source and target branches