Merge lp:~jtv/maas/bug-979539 into lp:~maas-committers/maas/trunk

Proposed by Jeroen T. Vermeulen
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: no longer in the source branch.
Merged at revision: 504
Proposed branch: lp:~jtv/maas/bug-979539
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 389 lines (+63/-70)
7 files modified
src/maasserver/enum.py (+7/-9)
src/maasserver/forms.py (+14/-22)
src/maasserver/templates/maasserver/settings.html (+2/-4)
src/maasserver/templates/maasserver/snippets.html (+1/-2)
src/maasserver/tests/test_api.py (+28/-15)
src/maasserver/tests/test_forms.py (+6/-10)
src/maasserver/tests/test_views.py (+5/-8)
To merge this branch: bzr merge lp:~jtv/maas/bug-979539
Reviewer Review Type Date Requested Status
Raphaël Badin (community) Approve
Review via email: mp+103047@code.launchpad.net

Commit message

Restore (mostly) the after-commissioning action.

Description of the change

As discussed with Julian. This re-enables the after-commissioning actions choices in the UI.

As agreed in pre-imp, this disables the two nonexistent options, leaving only one choice.

Jeroen

To post a comment you must log in.
Revision history for this message
Raphaël Badin (rvb) wrote :

Nice! Very straightforward thanks to the XXX messages you've added when this was disabled.

[0]

270 + # The API allows a regular logged-in user to create a Node.

Fwiw I've used the wording "non-admin logged-in user" so far instead of "regular logged-in user".

review: Approve
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

OK. I've changed it to say non-admin logged-in user for uniformity.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/enum.py'
--- src/maasserver/enum.py 2012-04-20 15:16:41 +0000
+++ src/maasserver/enum.py 2012-04-23 10:17:20 +0000
@@ -19,9 +19,7 @@
19 'NODE_STATUS_CHOICES_DICT',19 'NODE_STATUS_CHOICES_DICT',
20 ]20 ]
2121
22from collections import (22from collections import OrderedDict
23 OrderedDict,
24 )
2523
2624
27class NODE_STATUS:25class NODE_STATUS:
@@ -77,18 +75,18 @@
77 #:75 #:
78 QUEUE = 076 QUEUE = 0
79 #:77 #:
80 CHECK = 178 #CHECK = 1
81 #:79 #:
82 DEPLOY_12_04 = 280 #DEPLOY_12_04 = 2
8381
8482
85NODE_AFTER_COMMISSIONING_ACTION_CHOICES = (83NODE_AFTER_COMMISSIONING_ACTION_CHOICES = (
86 (NODE_AFTER_COMMISSIONING_ACTION.QUEUE,84 (NODE_AFTER_COMMISSIONING_ACTION.QUEUE,
87 "Queue for dynamic allocation to services"),85 "Queue for dynamic allocation to services"),
88 (NODE_AFTER_COMMISSIONING_ACTION.CHECK,86 #(NODE_AFTER_COMMISSIONING_ACTION.CHECK,
89 "Check compatibility and hold for future decision"),87 # "Check compatibility and hold for future decision"),
90 (NODE_AFTER_COMMISSIONING_ACTION.DEPLOY_12_04,88 #(NODE_AFTER_COMMISSIONING_ACTION.DEPLOY_12_04,
91 "Deploy with Ubuntu 12.04 LTS"),89 # "Deploy with Ubuntu 12.04 LTS"),
92)90)
9391
9492
9593
=== modified file 'src/maasserver/forms.py'
--- src/maasserver/forms.py 2012-04-20 15:16:41 +0000
+++ src/maasserver/forms.py 2012-04-23 10:17:20 +0000
@@ -47,6 +47,7 @@
47from maasserver.enum import (47from maasserver.enum import (
48 ARCHITECTURE,48 ARCHITECTURE,
49 ARCHITECTURE_CHOICES,49 ARCHITECTURE_CHOICES,
50 NODE_AFTER_COMMISSIONING_ACTION,
50 NODE_AFTER_COMMISSIONING_ACTION_CHOICES,51 NODE_AFTER_COMMISSIONING_ACTION_CHOICES,
51 NODE_PERMISSION,52 NODE_PERMISSION,
52 NODE_STATUS,53 NODE_STATUS,
@@ -86,12 +87,10 @@
86 widget=forms.TextInput(attrs={'readonly': 'readonly'}),87 widget=forms.TextInput(attrs={'readonly': 'readonly'}),
87 required=False)88 required=False)
8889
89 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.90 after_commissioning_action = forms.TypedChoiceField(
9091 label="After commissioning",
91 #after_commissioning_action = forms.TypedChoiceField(92 choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES, required=False,
92 # label="After commissioning",93 empty_value=NODE_AFTER_COMMISSIONING_ACTION.DEFAULT)
93 # choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES, required=False,
94 # empty_value=NODE_AFTER_COMMISSIONING_ACTION.DEFAULT)
9594
96 architecture = forms.ChoiceField(95 architecture = forms.ChoiceField(
97 choices=ARCHITECTURE_CHOICES, required=True,96 choices=ARCHITECTURE_CHOICES, required=True,
@@ -103,8 +102,7 @@
103 fields = (102 fields = (
104 'hostname',103 'hostname',
105 'system_id',104 'system_id',
106 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.105 'after_commissioning_action',
107 #'after_commissioning_action',
108 'architecture',106 'architecture',
109 'power_type',107 'power_type',
110 )108 )
@@ -112,35 +110,29 @@
112110
113class UINodeEditForm(ModelForm):111class UINodeEditForm(ModelForm):
114112
115 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.113 after_commissioning_action = forms.ChoiceField(
116114 label="After commissioning",
117 #after_commissioning_action = forms.ChoiceField(115 choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES)
118 # label="After commissioning",
119 # choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES)
120116
121 class Meta:117 class Meta:
122 model = Node118 model = Node
123 fields = (119 fields = (
124 'hostname',120 'hostname',
125 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.121 'after_commissioning_action',
126 #'after_commissioning_action',
127 )122 )
128123
129124
130class UIAdminNodeEditForm(ModelForm):125class UIAdminNodeEditForm(ModelForm):
131126
132 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.127 after_commissioning_action = forms.ChoiceField(
133128 label="After commissioning",
134 #after_commissioning_action = forms.ChoiceField(129 choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES)
135 # label="After commissioning",
136 # choices=NODE_AFTER_COMMISSIONING_ACTION_CHOICES)
137130
138 class Meta:131 class Meta:
139 model = Node132 model = Node
140 fields = (133 fields = (
141 'hostname',134 'hostname',
142 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.135 'after_commissioning_action',
143 #'after_commissioning_action',
144 'power_type',136 'power_type',
145 )137 )
146138
147139
=== modified file 'src/maasserver/templates/maasserver/settings.html'
--- src/maasserver/templates/maasserver/settings.html 2012-04-16 05:48:10 +0000
+++ src/maasserver/templates/maasserver/settings.html 2012-04-23 10:17:20 +0000
@@ -68,8 +68,7 @@
68 </a>68 </a>
69 <div class="clear"></div>69 <div class="clear"></div>
70 </div>70 </div>
71<!-- XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable. -->71 <div id="commissioning" class="block size7 first">
72 <div id="commissioning" class="hidden block size7 first">
73 <h2>Commissioning</h2>72 <h2>Commissioning</h2>
74 <form action="{% url "settings" %}" method="post">73 <form action="{% url "settings" %}" method="post">
75 <ul>74 <ul>
@@ -81,8 +80,7 @@
81 <input type="submit" class="button right" value="Save" />80 <input type="submit" class="button right" value="Save" />
82 </form>81 </form>
83 </div>82 </div>
84<!-- XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable. -->83 <div id="ubuntu" class="block size7 first">
85 <div id="ubuntu" class="hidden block size7 first">
86 <h2>Ubuntu</h2>84 <h2>Ubuntu</h2>
87 <form action="{% url "settings" %}" method="post">85 <form action="{% url "settings" %}" method="post">
88 <ul>86 <ul>
8987
=== modified file 'src/maasserver/templates/maasserver/snippets.html'
--- src/maasserver/templates/maasserver/snippets.html 2012-04-12 04:21:18 +0000
+++ src/maasserver/templates/maasserver/snippets.html 2012-04-23 10:17:20 +0000
@@ -21,8 +21,7 @@
21 <div class="field-help">Default is MAC-based, e.g. "node-aabbccddeeff"21 <div class="field-help">Default is MAC-based, e.g. "node-aabbccddeeff"
22 </div>22 </div>
23 </p>23 </p>
24<!-- XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable. -->24 <p>
25 <p class="hidden">
26 <label for="id_after_commissioning_action">After commissioning</label>25 <label for="id_after_commissioning_action">After commissioning</label>
27 {{ node_form.after_commissioning_action }}26 {{ node_form.after_commissioning_action }}
28 </p>27 </p>
2928
=== modified file 'src/maasserver/tests/test_api.py'
--- src/maasserver/tests/test_api.py 2012-04-20 15:16:41 +0000
+++ src/maasserver/tests/test_api.py 2012-04-23 10:17:20 +0000
@@ -30,6 +30,7 @@
30 )30 )
31from maasserver.enum import (31from maasserver.enum import (
32 ARCHITECTURE_CHOICES,32 ARCHITECTURE_CHOICES,
33 NODE_AFTER_COMMISSIONING_ACTION,
33 NODE_STATUS,34 NODE_STATUS,
34 NODE_STATUS_CHOICES_DICT,35 NODE_STATUS_CHOICES_DICT,
35 )36 )
@@ -113,7 +114,8 @@
113 'op': 'new',114 'op': 'new',
114 'hostname': 'diane',115 'hostname': 'diane',
115 'architecture': architecture,116 'architecture': architecture,
116 'after_commissioning_action': '2',117 'after_commissioning_action':
118 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
117 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],119 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
118 })120 })
119 parsed_result = json.loads(response.content)121 parsed_result = json.loads(response.content)
@@ -123,8 +125,6 @@
123 self.assertEqual('diane', parsed_result['hostname'])125 self.assertEqual('diane', parsed_result['hostname'])
124 self.assertNotEqual(0, len(parsed_result.get('system_id')))126 self.assertNotEqual(0, len(parsed_result.get('system_id')))
125 [diane] = Node.objects.filter(hostname='diane')127 [diane] = Node.objects.filter(hostname='diane')
126 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.
127 #self.assertEqual(2, diane.after_commissioning_action)
128 self.assertEqual(architecture, diane.architecture)128 self.assertEqual(architecture, diane.architecture)
129129
130 def test_POST_new_power_type_defaults_to_asking_config(self):130 def test_POST_new_power_type_defaults_to_asking_config(self):
@@ -162,7 +162,8 @@
162 'op': 'new',162 'op': 'new',
163 'hostname': 'diane',163 'hostname': 'diane',
164 'architecture': architecture,164 'architecture': architecture,
165 'after_commissioning_action': '2',165 'after_commissioning_action':
166 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
166 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],167 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
167 })168 })
168 [diane] = Node.objects.filter(hostname='diane')169 [diane] = Node.objects.filter(hostname='diane')
@@ -303,7 +304,8 @@
303 'op': 'new',304 'op': 'new',
304 'hostname': factory.getRandomString(),305 'hostname': factory.getRandomString(),
305 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),306 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
306 'after_commissioning_action': '2',307 'after_commissioning_action':
308 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
307 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],309 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],
308 })310 })
309 self.assertEqual(httplib.OK, response.status_code)311 self.assertEqual(httplib.OK, response.status_code)
@@ -335,7 +337,8 @@
335 'op': 'new',337 'op': 'new',
336 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),338 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
337 'hostname': factory.getRandomString(),339 'hostname': factory.getRandomString(),
338 'after_commissioning_action': '2',340 'after_commissioning_action':
341 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
339 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],342 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
340 })343 })
341 parsed_result = json.loads(response.content)344 parsed_result = json.loads(response.content)
@@ -372,14 +375,19 @@
372 'op': 'new',375 'op': 'new',
373 'hostname': factory.getRandomString(),376 'hostname': factory.getRandomString(),
374 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),377 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
375 'after_commissioning_action': '2',378 'after_commissioning_action':
379 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
376 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],380 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
377 })381 })
378 parsed_result = json.loads(response.content)382 parsed_result = json.loads(response.content)
379 self.assertItemsEqual(383 self.assertItemsEqual(
380 [384 [
381 'hostname', 'system_id', 'macaddress_set', 'architecture',385 'hostname',
382 'status', 'resource_uri',386 'system_id',
387 'macaddress_set',
388 'architecture',
389 'status',
390 'resource_uri',
383 ],391 ],
384 list(parsed_result))392 list(parsed_result))
385393
@@ -398,7 +406,8 @@
398 'op': 'new',406 'op': 'new',
399 'hostname': factory.getRandomString(),407 'hostname': factory.getRandomString(),
400 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),408 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
401 'after_commissioning_action': '2',409 'after_commissioning_action':
410 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
402 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],411 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],
403 })412 })
404 self.assertEqual(httplib.OK, response.status_code)413 self.assertEqual(httplib.OK, response.status_code)
@@ -414,7 +423,8 @@
414 'op': 'new',423 'op': 'new',
415 'hostname': factory.getRandomString(),424 'hostname': factory.getRandomString(),
416 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),425 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
417 'after_commissioning_action': '2',426 'after_commissioning_action':
427 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
418 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],428 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
419 })429 })
420 parsed_result = json.loads(response.content)430 parsed_result = json.loads(response.content)
@@ -843,7 +853,7 @@
843 """Tests for /api/1.0/nodes/."""853 """Tests for /api/1.0/nodes/."""
844854
845 def test_POST_new_creates_node(self):855 def test_POST_new_creates_node(self):
846 # The API allows a Node to be created, even as a logged-in user.856 # The API allows a non-admin logged-in user to create a Node.
847 architecture = factory.getRandomChoice(ARCHITECTURE_CHOICES)857 architecture = factory.getRandomChoice(ARCHITECTURE_CHOICES)
848 response = self.client.post(858 response = self.client.post(
849 self.get_uri('nodes/'),859 self.get_uri('nodes/'),
@@ -851,7 +861,8 @@
851 'op': 'new',861 'op': 'new',
852 'hostname': factory.getRandomString(),862 'hostname': factory.getRandomString(),
853 'architecture': architecture,863 'architecture': architecture,
854 'after_commissioning_action': '2',864 'after_commissioning_action':
865 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
855 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],866 'mac_addresses': ['aa:bb:cc:dd:ee:ff', '22:bb:cc:dd:ee:ff'],
856 })867 })
857868
@@ -866,7 +877,8 @@
866 'op': 'new',877 'op': 'new',
867 'hostname': factory.getRandomString(),878 'hostname': factory.getRandomString(),
868 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),879 'architecture': factory.getRandomChoice(ARCHITECTURE_CHOICES),
869 'after_commissioning_action': '2',880 'after_commissioning_action':
881 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
870 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],882 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],
871 })883 })
872 self.assertEqual(httplib.OK, response.status_code)884 self.assertEqual(httplib.OK, response.status_code)
@@ -1734,7 +1746,8 @@
1734 'op': 'new',1746 'op': 'new',
1735 'hostname': hostname,1747 'hostname': hostname,
1736 'architecture': architecture,1748 'architecture': architecture,
1737 'after_commissioning_action': '2',1749 'after_commissioning_action':
1750 NODE_AFTER_COMMISSIONING_ACTION.DEFAULT,
1738 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],1751 'mac_addresses': ['aa:bb:cc:dd:ee:ff'],
1739 })1752 })
17401753
17411754
=== modified file 'src/maasserver/tests/test_forms.py'
--- src/maasserver/tests/test_forms.py 2012-04-20 15:16:41 +0000
+++ src/maasserver/tests/test_forms.py 2012-04-23 10:17:20 +0000
@@ -189,8 +189,7 @@
189 self.assertEqual(189 self.assertEqual(
190 [190 [
191 'hostname',191 'hostname',
192 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.192 'after_commissioning_action',
193 #'after_commissioning_action',
194 ], list(form.fields))193 ], list(form.fields))
195194
196 def test_UINodeEditForm_changes_node(self):195 def test_UINodeEditForm_changes_node(self):
@@ -208,9 +207,8 @@
208 form.save()207 form.save()
209208
210 self.assertEqual(hostname, node.hostname)209 self.assertEqual(hostname, node.hostname)
211 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.210 self.assertEqual(
212 #self.assertEqual(211 after_commissioning_action, node.after_commissioning_action)
213 # after_commissioning_action, node.after_commissioning_action)
214212
215 def test_UIAdminNodeEditForm_contains_limited_set_of_fields(self):213 def test_UIAdminNodeEditForm_contains_limited_set_of_fields(self):
216 form = UIAdminNodeEditForm()214 form = UIAdminNodeEditForm()
@@ -218,8 +216,7 @@
218 self.assertEqual(216 self.assertEqual(
219 [217 [
220 'hostname',218 'hostname',
221 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.219 'after_commissioning_action',
222 #'after_commissioning_action',
223 'power_type',220 'power_type',
224 ],221 ],
225 list(form.fields))222 list(form.fields))
@@ -240,9 +237,8 @@
240 form.save()237 form.save()
241238
242 self.assertEqual(hostname, node.hostname)239 self.assertEqual(hostname, node.hostname)
243 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.240 self.assertEqual(
244 #self.assertEqual(241 after_commissioning_action, node.after_commissioning_action)
245 # after_commissioning_action, node.after_commissioning_action)
246 self.assertEqual(power_type, node.power_type)242 self.assertEqual(power_type, node.power_type)
247243
248244
249245
=== modified file 'src/maasserver/tests/test_views.py'
--- src/maasserver/tests/test_views.py 2012-04-23 09:11:50 +0000
+++ src/maasserver/tests/test_views.py 2012-04-23 10:17:20 +0000
@@ -148,8 +148,7 @@
148 self.assertTemplateExistsAndContains(148 self.assertTemplateExistsAndContains(
149 response.content, '#add-node', 'input#id_hostname')149 response.content, '#add-node', 'input#id_hostname')
150150
151 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.151 def test_after_commissioning_action_snippet(self):
152 def t_e_s_t_after_commissioning_action_snippet(self):
153 response = self.client.get('/')152 response = self.client.get('/')
154 self.assertTemplateExistsAndContains(153 self.assertTemplateExistsAndContains(
155 response.content, '#add-node',154 response.content, '#add-node',
@@ -719,9 +718,8 @@
719 node_edit_link = reverse('node-edit', args=[node.system_id])718 node_edit_link = reverse('node-edit', args=[node.system_id])
720 params = {719 params = {
721 'hostname': factory.getRandomString(),720 'hostname': factory.getRandomString(),
722 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.721 'after_commissioning_action': factory.getRandomEnum(
723 #'after_commissioning_action': factory.getRandomEnum(722 NODE_AFTER_COMMISSIONING_ACTION),
724 # NODE_AFTER_COMMISSIONING_ACTION),
725 }723 }
726 response = self.client.post(node_edit_link, params)724 response = self.client.post(node_edit_link, params)
727725
@@ -866,9 +864,8 @@
866 node_edit_link = reverse('node-edit', args=[node.system_id])864 node_edit_link = reverse('node-edit', args=[node.system_id])
867 params = {865 params = {
868 'hostname': factory.getRandomString(),866 'hostname': factory.getRandomString(),
869 # XXX JeroenVermeulen 2012-04-12, bug=979539: re-enable.867 'after_commissioning_action': factory.getRandomEnum(
870 #'after_commissioning_action': factory.getRandomEnum(868 NODE_AFTER_COMMISSIONING_ACTION),
871 # NODE_AFTER_COMMISSIONING_ACTION),
872 'power_type': factory.getRandomChoice(POWER_TYPE_CHOICES),869 'power_type': factory.getRandomChoice(POWER_TYPE_CHOICES),
873 }870 }
874 response = self.client.post(node_edit_link, params)871 response = self.client.post(node_edit_link, params)