Merge lp:~rvb/maas/bug-1234853-1.3 into lp:maas/1.3

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 1474
Proposed branch: lp:~rvb/maas/bug-1234853-1.3
Merge into: lp:maas/1.3
Diff against target: 129 lines (+31/-24)
5 files modified
src/maasserver/api.py (+3/-3)
src/maasserver/forms.py (+3/-10)
src/maasserver/tests/test_forms.py (+3/-10)
src/maasserver/tests/test_views_settings_clusters.py (+15/-0)
src/maasserver/views/settings_clusters.py (+7/-1)
To merge this branch: bzr merge lp:~rvb/maas/bug-1234853-1.3
Reviewer Review Type Date Requested Status
Raphaël Badin (community) Approve
Review via email: mp+189315@code.launchpad.net

Commit message

Fix the add-new-interface UI so that it doesn't blow up when the nodegroup is already 'managed' and one is trying to add another 'managed' interface (backport of revision 1661).

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

Simple backport, self-approving.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/api.py'
--- src/maasserver/api.py 2013-03-12 16:00:25 +0000
+++ src/maasserver/api.py 2013-10-04 13:48:39 +0000
@@ -1313,10 +1313,10 @@
1313 :type ip_range_high: basestring (IP Address)1313 :type ip_range_high: basestring (IP Address)
1314 """1314 """
1315 nodegroup = get_object_or_404(NodeGroup, uuid=uuid)1315 nodegroup = get_object_or_404(NodeGroup, uuid=uuid)
1316 form = NodeGroupInterfaceForm(request.data)1316 instance = NodeGroupInterface(nodegroup=nodegroup)
1317 form = NodeGroupInterfaceForm(request.data, instance=instance)
1317 if form.is_valid():1318 if form.is_valid():
1318 return form.save(1319 return form.save()
1319 nodegroup=nodegroup)
1320 else:1320 else:
1321 raise ValidationError(form.errors)1321 raise ValidationError(form.errors)
13221322
13231323
=== modified file 'src/maasserver/forms.py'
--- src/maasserver/forms.py 2012-12-20 10:08:36 +0000
+++ src/maasserver/forms.py 2013-10-04 13:48:39 +0000
@@ -697,14 +697,6 @@
697 'ip_range_high',697 'ip_range_high',
698 )698 )
699699
700 def save(self, nodegroup=None, commit=True, *args, **kwargs):
701 interface = super(NodeGroupInterfaceForm, self).save(commit=False)
702 if nodegroup is not None:
703 interface.nodegroup = nodegroup
704 if commit:
705 interface.save(*args, **kwargs)
706 return interface
707
708700
709INTERFACES_VALIDATION_ERROR_MESSAGE = (701INTERFACES_VALIDATION_ERROR_MESSAGE = (
710 "Invalid json value: should be a list of dictionaries, each containing "702 "Invalid json value: should be a list of dictionaries, each containing "
@@ -789,8 +781,9 @@
789 def save(self):781 def save(self):
790 nodegroup = super(NodeGroupWithInterfacesForm, self).save()782 nodegroup = super(NodeGroupWithInterfacesForm, self).save()
791 for interface in self.cleaned_data['interfaces']:783 for interface in self.cleaned_data['interfaces']:
792 form = NodeGroupInterfaceForm(data=interface)784 instance = NodeGroupInterface(nodegroup=nodegroup)
793 form.save(nodegroup=nodegroup)785 form = NodeGroupInterfaceForm(data=interface, instance=instance)
786 form.save()
794 if self.status is not None:787 if self.status is not None:
795 nodegroup.status = self.status788 nodegroup.status = self.status
796 nodegroup.save()789 nodegroup.save()
797790
=== modified file 'src/maasserver/tests/test_forms.py'
--- src/maasserver/tests/test_forms.py 2012-12-20 10:08:36 +0000
+++ src/maasserver/tests/test_forms.py 2013-10-04 13:48:39 +0000
@@ -652,14 +652,6 @@
652652
653class TestNodeGroupInterfaceForm(TestCase):653class TestNodeGroupInterfaceForm(TestCase):
654654
655 def test_NodeGroupInterfaceForm_save_sets_nodegroup(self):
656 nodegroup = factory.make_node_group(
657 management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
658 form = NodeGroupInterfaceForm(data=make_interface_settings())
659 self.assertTrue(form.is_valid(), form._errors)
660 interface = form.save(nodegroup=nodegroup)
661 self.assertEqual(nodegroup, interface.nodegroup)
662
663 def test_NodeGroupInterfaceForm_validates_parameters(self):655 def test_NodeGroupInterfaceForm_validates_parameters(self):
664 form = NodeGroupInterfaceForm(data={'ip': factory.getRandomString()})656 form = NodeGroupInterfaceForm(data={'ip': factory.getRandomString()})
665 self.assertFalse(form.is_valid())657 self.assertFalse(form.is_valid())
@@ -671,9 +663,10 @@
671 settings['management'] = NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED663 settings['management'] = NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED
672 for field_name in nullable_fields:664 for field_name in nullable_fields:
673 del settings[field_name]665 del settings[field_name]
674 form = NodeGroupInterfaceForm(data=settings)
675 nodegroup = factory.make_node_group()666 nodegroup = factory.make_node_group()
676 interface = form.save(nodegroup=nodegroup)667 form = NodeGroupInterfaceForm(
668 data=settings, instance=NodeGroupInterface(nodegroup=nodegroup))
669 interface = form.save()
677 field_values = [670 field_values = [
678 getattr(interface, field_name) for field_name in nullable_fields]671 getattr(interface, field_name) for field_name in nullable_fields]
679 self.assertThat(field_values, AllMatch(Equals('')))672 self.assertThat(field_values, AllMatch(Equals('')))
680673
=== modified file 'src/maasserver/tests/test_views_settings_clusters.py'
--- src/maasserver/tests/test_views_settings_clusters.py 2013-02-08 17:16:07 +0000
+++ src/maasserver/tests/test_views_settings_clusters.py 2013-10-04 13:48:39 +0000
@@ -198,6 +198,21 @@
198 reload_object(interface),198 reload_object(interface),
199 MatchesStructure.byEquality(**data))199 MatchesStructure.byEquality(**data))
200200
201 def test_rejects_interface_creation_if_cluster_already_managed(self):
202 nodegroup = factory.make_node_group(
203 management=NODEGROUPINTERFACE_MANAGEMENT.DHCP)
204 create_link = reverse(
205 'cluster-interface-create', args=[nodegroup.uuid])
206 # nodegroup already has a 'managed' interface, try adding another
207 # one, also 'managed'.
208 data = factory.get_interface_fields(
209 management=NODEGROUPINTERFACE_MANAGEMENT.DHCP)
210 response = self.client.post(create_link, data)
211 self.assertEqual(httplib.OK, response.status_code)
212 error_message = (
213 "Another managed interface already exists for this cluster.")
214 self.assertThat(response.content, Contains(error_message))
215
201216
202# XXX: rvb 2012-10-08 bug=1063881: apache transforms '//' into '/' in217# XXX: rvb 2012-10-08 bug=1063881: apache transforms '//' into '/' in
203# the urls it passes around and this happens when an interface has an empty218# the urls it passes around and this happens when an interface has an empty
204219
=== modified file 'src/maasserver/views/settings_clusters.py'
--- src/maasserver/views/settings_clusters.py 2012-10-15 09:32:06 +0000
+++ src/maasserver/views/settings_clusters.py 2013-10-04 13:48:39 +0000
@@ -126,12 +126,18 @@
126 form_class = NodeGroupInterfaceForm126 form_class = NodeGroupInterfaceForm
127 context_object_name = 'interface'127 context_object_name = 'interface'
128128
129 def get_form_kwargs(self):
130 kwargs = super(ClusterInterfaceCreate, self).get_form_kwargs()
131 assert kwargs.get('instance', None) is None
132 kwargs['instance'] = NodeGroupInterface(nodegroup=self.get_nodegroup())
133 return kwargs
134
129 def get_success_url(self):135 def get_success_url(self):
130 uuid = self.kwargs.get('uuid', None)136 uuid = self.kwargs.get('uuid', None)
131 return reverse('cluster-edit', args=[uuid])137 return reverse('cluster-edit', args=[uuid])
132138
133 def form_valid(self, form):139 def form_valid(self, form):
134 self.object = form.save(nodegroup=self.get_nodegroup())140 self.object = form.save()
135 messages.info(self.request, "Interface created.")141 messages.info(self.request, "Interface created.")
136 return super(ClusterInterfaceCreate, self).form_valid(form)142 return super(ClusterInterfaceCreate, self).form_valid(form)
137143

Subscribers

People subscribed via source and target branches