Merge ~ltrager/maas:lp1904398_2.8 into maas:2.8

Proposed by Lee Trager
Status: Merged
Approved by: Lee Trager
Approved revision: 21ab297d560c9cb8056c47fdda69bfcaffd36969
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ltrager/maas:lp1904398_2.8
Merge into: maas:2.8
Diff against target: 148 lines (+59/-14)
4 files modified
src/maasserver/api/machines.py (+8/-2)
src/maasserver/api/tests/test_machines.py (+33/-0)
src/maasserver/forms/__init__.py (+13/-11)
src/maasserver/forms/tests/test_machinewithmacaddresses.py (+5/-1)
Reviewer Review Type Date Requested Status
MAAS Lander Approve
Lee Trager (community) Approve
Review via email: mp+394499@code.launchpad.net

Commit message

LP: #1904398 - Only set machines to commissioning in form when anonymous

Backport of 9f03422

To post a comment you must log in.
Revision history for this message
Lee Trager (ltrager) wrote :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b lp1904398_2.8 lp:~ltrager/maas/+git/maas into -b 2.8 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 21ab297d560c9cb8056c47fdda69bfcaffd36969

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/api/machines.py b/src/maasserver/api/machines.py
index 72281b4..9a18d34 100644
--- a/src/maasserver/api/machines.py
+++ b/src/maasserver/api/machines.py
@@ -1923,7 +1923,8 @@ class MachinesHandler(NodesHandler, PowersMixin):
1923 @param (boolean) "commission" [required=false,formatting=true] Request1923 @param (boolean) "commission" [required=false,formatting=true] Request
1924 the newly created machine to be created with status set to1924 the newly created machine to be created with status set to
1925 COMMISSIONING. Machines will wait for COMMISSIONING results and not1925 COMMISSIONING. Machines will wait for COMMISSIONING results and not
1926 time out.1926 time out. Machines created by administrators will be commissioned
1927 unless set to false.
19271928
1928 @param (int) "enable_ssh" [required=false] Whether to enable SSH for1929 @param (int) "enable_ssh" [required=false] Whether to enable SSH for
1929 the commissioning environment using the user's SSH key(s). '1' == True,1930 the commissioning environment using the user's SSH key(s). '1' == True,
@@ -1959,8 +1960,13 @@ class MachinesHandler(NodesHandler, PowersMixin):
1959 @success-example "success-json" [exkey=machines-create]1960 @success-example "success-json" [exkey=machines-create]
1960 placeholder text1961 placeholder text
1961 """1962 """
1963 # Only admins are allowed to commission, store the value but remove it
1964 # from the form.
1965 commission = get_optional_param(
1966 request.data, "commission", default=True, validator=StringBool
1967 )
1962 machine = create_machine(request)1968 machine = create_machine(request)
1963 if request.user.is_superuser:1969 if request.user.is_superuser and commission:
1964 form = CommissionForm(1970 form = CommissionForm(
1965 instance=machine, user=request.user, data=request.data1971 instance=machine, user=request.user, data=request.data
1966 )1972 )
diff --git a/src/maasserver/api/tests/test_machines.py b/src/maasserver/api/tests/test_machines.py
index 98c4485..070bb68 100644
--- a/src/maasserver/api/tests/test_machines.py
+++ b/src/maasserver/api/tests/test_machines.py
@@ -334,6 +334,39 @@ class TestMachinesAPI(APITestCase.ForUser):
334 [script_result.name for script_result in script_set],334 [script_result.name for script_result in script_set],
335 )335 )
336336
337 def test_POST_commission_true(self):
338 # Regression test for LP:1904398
339 self.become_admin()
340 self.patch(Machine, "_start").return_value = None
341 make_usable_osystem(self)
342 response = self.client.post(
343 reverse("machines_handler"),
344 {
345 "architecture": make_usable_architecture(self),
346 "mac_addresses": ["aa:bb:cc:dd:ee:ff"],
347 "power_type": "manual",
348 "commission": True,
349 },
350 )
351 parsed_result = json.loads(response.content.decode())
352 self.assertEquals(NODE_STATUS.COMMISSIONING, parsed_result["status"])
353
354 def test_POST_commission_false(self):
355 # Regression test for LP:1904398
356 self.become_admin()
357 make_usable_osystem(self)
358 response = self.client.post(
359 reverse("machines_handler"),
360 {
361 "architecture": make_usable_architecture(self),
362 "mac_addresses": ["aa:bb:cc:dd:ee:ff"],
363 "power_type": "manual",
364 "commission": False,
365 },
366 )
367 parsed_result = json.loads(response.content.decode())
368 self.assertEquals(NODE_STATUS.NEW, parsed_result["status"])
369
337 def test_GET_lists_machines(self):370 def test_GET_lists_machines(self):
338 # The api allows for fetching the list of Machines.371 # The api allows for fetching the list of Machines.
339 machine1 = factory.make_Node()372 machine1 = factory.make_Node()
diff --git a/src/maasserver/forms/__init__.py b/src/maasserver/forms/__init__.py
index 62e1ecd..40be585 100644
--- a/src/maasserver/forms/__init__.py
+++ b/src/maasserver/forms/__init__.py
@@ -713,13 +713,8 @@ class MachineForm(NodeForm):
713 def __init__(self, request=None, requires_arch=False, *args, **kwargs):713 def __init__(self, request=None, requires_arch=False, *args, **kwargs):
714 super(MachineForm, self).__init__(*args, **kwargs)714 super(MachineForm, self).__init__(*args, **kwargs)
715715
716 # Even though it doesn't need it and doesn't use it, this form accepts
717 # a parameter named 'request' because it is used interchangingly
718 # with AdminMachineForm which actually uses this parameter.
719 request = kwargs.get("request")
720 if request is not None:
721 self.data = request.data
722 instance = kwargs.get("instance")716 instance = kwargs.get("instance")
717 self.request = request
723718
724 self.set_up_architecture_field(requires_arch=requires_arch)719 self.set_up_architecture_field(requires_arch=requires_arch)
725 # We only want the license key field to render in the UI if the `OS`720 # We only want the license key field to render in the UI if the `OS`
@@ -919,7 +914,16 @@ class MachineForm(NodeForm):
919914
920 # LP:1807991 - If requested when creating a new Machine, set the status915 # LP:1807991 - If requested when creating a new Machine, set the status
921 # to COMMISSIONING when the object is created.916 # to COMMISSIONING when the object is created.
922 commission = not self.instance.id and self.cleaned_data["commission"]917 is_anonymous = (
918 self.request
919 and self.request.user
920 and self.request.user.is_anonymous
921 )
922 commission = (
923 is_anonymous
924 and not self.instance.id
925 and self.cleaned_data["commission"]
926 )
923 if commission:927 if commission:
924 self.instance.status = NODE_STATUS.COMMISSIONING928 self.instance.status = NODE_STATUS.COMMISSIONING
925 machine = super(MachineForm, self).save(*args, **kwargs)929 machine = super(MachineForm, self).save(*args, **kwargs)
@@ -1144,10 +1148,8 @@ class AdminMachineForm(MachineForm, AdminNodeForm, WithPowerTypeMixin):
1144 "memory",1148 "memory",
1145 )1149 )
11461150
1147 def __init__(self, data=None, instance=None, request=None, **kwargs):1151 def __init__(self, data=None, instance=None, **kwargs):
1148 super(AdminMachineForm, self).__init__(1152 super().__init__(data=data, instance=instance, **kwargs)
1149 data=data, instance=instance, **kwargs
1150 )
1151 WithPowerTypeMixin.set_up_power_fields(self, data, instance)1153 WithPowerTypeMixin.set_up_power_fields(self, data, instance)
11521154
1153 def clean(self):1155 def clean(self):
diff --git a/src/maasserver/forms/tests/test_machinewithmacaddresses.py b/src/maasserver/forms/tests/test_machinewithmacaddresses.py
index 6e78321..6afcd94 100644
--- a/src/maasserver/forms/tests/test_machinewithmacaddresses.py
+++ b/src/maasserver/forms/tests/test_machinewithmacaddresses.py
@@ -5,6 +5,8 @@
55
6__all__ = []6__all__ = []
77
8from unittest.mock import MagicMock
9
8from django.http import QueryDict10from django.http import QueryDict
9from testtools.matchers import Contains11from testtools.matchers import Contains
1012
@@ -218,8 +220,10 @@ class MachineWithMACAddressesFormTest(MAASServerTestCase):
218 self.assertEqual("192-168-12-10-extra", node.hostname)220 self.assertEqual("192-168-12-10-extra", node.hostname)
219221
220 def test_form_with_commissioning(self):222 def test_form_with_commissioning(self):
223 request = MagicMock()
224 request.user.is_anonymous = True
221 form = MachineWithMACAddressesForm(225 form = MachineWithMACAddressesForm(
222 data={"commission": True, **self.make_params()}226 request, data={"commission": True, **self.make_params()}
223 )227 )
224 self.assertTrue(form.is_valid())228 self.assertTrue(form.is_valid())
225 machine = form.save()229 machine = form.save()

Subscribers

People subscribed via source and target branches