Merge ~cgrabowski/maas:backport_lp2033632_fix_3.3 into maas:3.3

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: 61475a132807281279bea3fdf532e5db553aea06
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~cgrabowski/maas:backport_lp2033632_fix_3.3
Merge into: maas:3.3
Diff against target: 183 lines (+118/-11)
3 files modified
src/maasserver/api/machines.py (+8/-11)
src/maasserver/api/tests/test_enlistment.py (+4/-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+464765@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.3 lp:~cgrabowski/maas/+git/maas into -b 3.3 lp:~maas-committers/maas

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

61475a1... by Christian Grabowski

fix ephemeral deploy reference

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

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5333/console
COMMIT: 2f5a540af1a007261b4f717f954f8d4ee81a13c8

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

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5334/console
COMMIT: 1b223b7c9adacd9246719186e95ce73dae79d909

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

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

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

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

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

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/5339/console
COMMIT: 61475a132807281279bea3fdf532e5db553aea06

review: Needs Fixing
Revision history for this message
Christian Grabowski (cgrabowski) wrote :

jenkins: !test

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

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

STATUS: SUCCESS
COMMIT: 61475a132807281279bea3fdf532e5db553aea06

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

Subscribers

People subscribed via source and target branches