Merge ~troyanov/maas:backport-147ce84-3.5 into maas:3.5

Proposed by Anton Troyanov
Status: Merged
Approved by: Anton Troyanov
Approved revision: f715ebf83d50464921f6571e89fd1eaf6ad479bf
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~troyanov/maas:backport-147ce84-3.5
Merge into: maas:3.5
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
MAAS Lander Approve
Anton Troyanov Approve
Review via email: mp+463759@code.launchpad.net

Commit message

Fix lp bug 2033632
https://bugs.launchpad.net/maas/+bug/2033632

(cherry picked from commit 147ce845b0575adf944eccafff804caf0bdd876e)

To post a comment you must log in.
Revision history for this message
Anton Troyanov (troyanov) wrote :

Self approving backport

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

LANDING
-b backport-147ce84-3.5 lp:~troyanov/maas/+git/maas into -b 3.5 lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas-tester/5215/console

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

UNIT TESTS
-b backport-147ce84-3.5 lp:~troyanov/maas/+git/maas into -b 3.5 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: f715ebf83d50464921f6571e89fd1eaf6ad479bf

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

LANDING
-b backport-147ce84-3.5 lp:~troyanov/maas/+git/maas into -b 3.5 lp:~maas-committers/maas

STATUS: FAILED BUILD
LOG: http://maas-ci.internal:8080/job/maas-tester/5218/console

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 6a2c152..255bbe3 100644
3--- a/src/maasserver/api/machines.py
4+++ b/src/maasserver/api/machines.py
5@@ -852,21 +852,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 be86cb1..caeb5fa 100644
34--- a/src/maasserver/api/tests/test_machine.py
35+++ b/src/maasserver/api/tests/test_machine.py
36@@ -1427,6 +1427,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