Merge ~cgrabowski/maas:backport_lp2033632_fix_3.4 into maas:3.4

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 16bd012e83e917e2889bbfcd610f3880dc42c670
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:backport_lp2033632_fix_3.4
Merge into: maas:3.4
Diff against target: 180 lines (+115/-11)
3 files modified
src/maasserver/api/machines.py (+7/-11)
src/maasserver/api/tests/test_enlistment.py (+2/-0)
src/maasserver/api/tests/test_machine.py (+106/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Christian Grabowski Approve
Review via email: mp+464764@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
Christian Grabowski (cgrabowski) wrote :

self-approving backport

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

LANDING
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

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

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

UNIT TESTS
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5331/console
COMMIT: bb8f658a051647c84c1f03d5cab06e66e29338dd

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

LANDING
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

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

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

UNIT TESTS
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5335/console
COMMIT: 3bee4c556069928cfd86b41b4f9c4a647ce8fcd7

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

UNIT TESTS
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5337/console
COMMIT: 2098ed0a22a294374a5c4b1595258e59c2fa7fa1

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

UNIT TESTS
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 16bd012e83e917e2889bbfcd610f3880dc42c670

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

LANDING
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

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

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

LANDING
-b backport_lp2033632_fix_3.4 lp:~cgrabowski/maas/+git/maas into -b 3.4 lp:~maas-committers/maas

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

Update scan failed

At least one of the branches involved have failed to scan. You can manually schedule a rescan if required.

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 e46aa53..b6c4cb7 100644
3--- a/src/maasserver/api/machines.py
4+++ b/src/maasserver/api/machines.py
5@@ -123,6 +123,7 @@ DISPLAYED_MACHINE_FIELDS = (
6 "description",
7 "hardware_uuid",
8 "domain",
9+ "ephemeral_deploy",
10 "fqdn",
11 "owner",
12 "owner_data",
13@@ -850,24 +851,19 @@ class MachineHandler(NodeHandler, WorkloadAnnotationsMixin, PowerMixin):
14 NODE_STATUS_CHOICES_DICT[machine.status]
15 )
16 )
17- if not machine.distro_series and not series:
18+
19+ if not series:
20 series = Config.objects.get_config("default_distro_series")
21 Form = get_machine_edit_form(request.user)
22 form = Form(instance=machine, data={})
23- if series is not None:
24- form.set_distro_series(series=series)
25+ form.set_distro_series(series=series)
26 if license_key is not None:
27 form.set_license_key(license_key=license_key)
28 if hwe_kernel is not None:
29 form.set_hwe_kernel(hwe_kernel=hwe_kernel)
30- if options.install_rackd:
31- form.set_install_rackd(install_rackd=options.install_rackd)
32- if options.ephemeral_deploy:
33- form.set_ephemeral_deploy(
34- ephemeral_deploy=options.ephemeral_deploy
35- )
36- if options.enable_hw_sync:
37- form.set_enable_hw_sync(enable_hw_sync=options.enable_hw_sync)
38+ form.set_install_rackd(install_rackd=options.install_rackd)
39+ form.set_ephemeral_deploy(ephemeral_deploy=options.ephemeral_deploy)
40+ form.set_enable_hw_sync(enable_hw_sync=options.enable_hw_sync)
41 if form.is_valid():
42 form.save()
43 else:
44diff --git a/src/maasserver/api/tests/test_enlistment.py b/src/maasserver/api/tests/test_enlistment.py
45index 3df9854..5fe3428 100644
46--- a/src/maasserver/api/tests/test_enlistment.py
47+++ b/src/maasserver/api/tests/test_enlistment.py
48@@ -684,6 +684,7 @@ class TestSimpleUserLoggedInEnlistmentAPI(APITestCase.ForUser):
49 "hardware_uuid",
50 "default_gateways",
51 "domain",
52+ "ephemeral_deploy",
53 "fqdn",
54 "owner",
55 "owner_data",
56@@ -910,6 +911,7 @@ class TestAdminLoggedInEnlistmentAPI(APITestCase.ForAdmin):
57 "hardware_uuid",
58 "default_gateways",
59 "domain",
60+ "ephemeral_deploy",
61 "fqdn",
62 "owner",
63 "owner_data",
64diff --git a/src/maasserver/api/tests/test_machine.py b/src/maasserver/api/tests/test_machine.py
65index e895199..0a20759 100644
66--- a/src/maasserver/api/tests/test_machine.py
67+++ b/src/maasserver/api/tests/test_machine.py
68@@ -1402,6 +1402,112 @@ class TestMachineAPI(APITestCase.ForUser):
69 machine.refresh_from_db()
70 self.assertTrue(machine.enable_hw_sync)
71
72+ def test_POST_multiple_deploy_override_options_ephemeral_deploy(self):
73+ self.patch(node_module.Node, "_start")
74+ self.patch(machines_module, "get_curtin_merged_config")
75+ osystem = Config.objects.get_config("default_osystem")
76+ distro_series = Config.objects.get_config("default_distro_series")
77+ make_usable_osystem(
78+ self, osystem_name=osystem, releases=[distro_series]
79+ )
80+ machine = factory.make_Node(
81+ owner=self.user,
82+ interface=True,
83+ status=NODE_STATUS.ALLOCATED,
84+ power_type="manual",
85+ distro_series=distro_series,
86+ osystem=osystem,
87+ architecture=make_usable_architecture(self),
88+ )
89+
90+ response = self.client.post(
91+ self.get_machine_uri(machine),
92+ {"op": "deploy", "ephemeral_deploy": True},
93+ )
94+ self.assertEqual(http.client.OK, response.status_code)
95+ response_info = json_load_bytes(response.content)
96+ self.assertTrue(response_info["ephemeral_deploy"])
97+
98+ response = self.client.post(
99+ self.get_machine_uri(machine), {"op": "deploy"}
100+ )
101+ self.assertEqual(http.client.OK, response.status_code)
102+ response_info = json_load_bytes(response.content)
103+ self.assertFalse(response_info["ephemeral_deploy"])
104+
105+ def test_POST_multiple_deploy_override_options_hw_sync(self):
106+ self.patch(node_module.Node, "_start")
107+ self.patch(machines_module, "get_curtin_merged_config")
108+ osystem = Config.objects.get_config("default_osystem")
109+ distro_series = Config.objects.get_config("default_distro_series")
110+ make_usable_osystem(
111+ self, osystem_name=osystem, releases=[distro_series]
112+ )
113+ machine = factory.make_Node(
114+ owner=self.user,
115+ interface=True,
116+ status=NODE_STATUS.ALLOCATED,
117+ power_type="manual",
118+ distro_series=distro_series,
119+ osystem=osystem,
120+ architecture=make_usable_architecture(self),
121+ )
122+
123+ response = self.client.post(
124+ self.get_machine_uri(machine),
125+ {"op": "deploy", "enable_hw_sync": True},
126+ )
127+ self.assertEqual(http.client.OK, response.status_code)
128+ response_info = json_load_bytes(response.content)
129+ self.assertTrue(response_info["enable_hw_sync"])
130+
131+ response = self.client.post(
132+ self.get_machine_uri(machine), {"op": "deploy"}
133+ )
134+ self.assertEqual(http.client.OK, response.status_code)
135+ response_info = json_load_bytes(response.content)
136+ self.assertFalse(response_info["enable_hw_sync"])
137+
138+ def test_POST_multiple_deploy_override_options_distro_series(self):
139+ self.patch(node_module.Node, "_start")
140+ self.patch(machines_module, "get_curtin_merged_config")
141+ osystem = Config.objects.get_config("default_osystem")
142+ os = make_usable_osystem(self)
143+ releases = [release["name"] for release in os.get("releases", [])]
144+ default_distro_series = Config.objects.get_config(
145+ "default_distro_series"
146+ )
147+ distro_series = (
148+ releases[0]
149+ if releases[0] != default_distro_series
150+ else releases[1]
151+ )
152+
153+ machine = factory.make_Node(
154+ owner=self.user,
155+ interface=True,
156+ status=NODE_STATUS.ALLOCATED,
157+ power_type="manual",
158+ distro_series=distro_series,
159+ osystem=osystem,
160+ architecture=make_usable_architecture(self),
161+ )
162+
163+ response = self.client.post(
164+ self.get_machine_uri(machine),
165+ {"op": "deploy", "distro_series": distro_series},
166+ )
167+ self.assertEqual(http.client.OK, response.status_code)
168+ response_info = json_load_bytes(response.content)
169+ self.assertEqual(response_info["distro_series"], distro_series)
170+
171+ response = self.client.post(
172+ self.get_machine_uri(machine), {"op": "deploy"}
173+ )
174+ self.assertEqual(http.client.OK, response.status_code)
175+ response_info = json_load_bytes(response.content)
176+ self.assertEqual(response_info["distro_series"], default_distro_series)
177+
178 def test_POST_release_releases_owned_machine(self):
179 self.patch(node_module.Machine, "_stop")
180 owned_statuses = [NODE_STATUS.RESERVED, NODE_STATUS.ALLOCATED]

Subscribers

People subscribed via source and target branches