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

Proposed by Raphaël Badin
Status: Merged
Approved by: Raphaël Badin
Approved revision: no longer in the source branch.
Merged at revision: 1386
Proposed branch: lp:~rvb/maas/bug-1234853-1.2
Merge into: lp:maas/1.2
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.2
Reviewer Review Type Date Requested Status
Raphaël Badin (community) Approve
Review via email: mp+189316@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-04-25 07:56:53 +0000
+++ src/maasserver/api.py 2013-10-04 13:49:06 +0000
@@ -1560,10 +1560,10 @@
1560 :type ip_range_high: basestring (IP Address)1560 :type ip_range_high: basestring (IP Address)
1561 """1561 """
1562 nodegroup = get_object_or_404(NodeGroup, uuid=uuid)1562 nodegroup = get_object_or_404(NodeGroup, uuid=uuid)
1563 form = NodeGroupInterfaceForm(request.data)1563 instance = NodeGroupInterface(nodegroup=nodegroup)
1564 form = NodeGroupInterfaceForm(request.data, instance=instance)
1564 if form.is_valid():1565 if form.is_valid():
1565 return form.save(1566 return form.save()
1566 nodegroup=nodegroup)
1567 else:1567 else:
1568 raise ValidationError(form.errors)1568 raise ValidationError(form.errors)
15691569
15701570
=== modified file 'src/maasserver/forms.py'
--- src/maasserver/forms.py 2012-11-16 13:30:09 +0000
+++ src/maasserver/forms.py 2013-10-04 13:49:06 +0000
@@ -712,14 +712,6 @@
712 'ip_range_high',712 'ip_range_high',
713 )713 )
714714
715 def save(self, nodegroup=None, commit=True, *args, **kwargs):
716 interface = super(NodeGroupInterfaceForm, self).save(commit=False)
717 if nodegroup is not None:
718 interface.nodegroup = nodegroup
719 if commit:
720 interface.save(*args, **kwargs)
721 return interface
722
723715
724INTERFACES_VALIDATION_ERROR_MESSAGE = (716INTERFACES_VALIDATION_ERROR_MESSAGE = (
725 "Invalid json value: should be a list of dictionaries, each containing "717 "Invalid json value: should be a list of dictionaries, each containing "
@@ -804,8 +796,9 @@
804 def save(self):796 def save(self):
805 nodegroup = super(NodeGroupWithInterfacesForm, self).save()797 nodegroup = super(NodeGroupWithInterfacesForm, self).save()
806 for interface in self.cleaned_data['interfaces']:798 for interface in self.cleaned_data['interfaces']:
807 form = NodeGroupInterfaceForm(data=interface)799 instance = NodeGroupInterface(nodegroup=nodegroup)
808 form.save(nodegroup=nodegroup)800 form = NodeGroupInterfaceForm(data=interface, instance=instance)
801 form.save()
809 if self.status is not None:802 if self.status is not None:
810 nodegroup.status = self.status803 nodegroup.status = self.status
811 nodegroup.save()804 nodegroup.save()
812805
=== modified file 'src/maasserver/tests/test_forms.py'
--- src/maasserver/tests/test_forms.py 2013-04-25 07:56:53 +0000
+++ src/maasserver/tests/test_forms.py 2013-10-04 13:49:06 +0000
@@ -688,14 +688,6 @@
688688
689class TestNodeGroupInterfaceForm(TestCase):689class TestNodeGroupInterfaceForm(TestCase):
690690
691 def test_NodeGroupInterfaceForm_save_sets_nodegroup(self):
692 nodegroup = factory.make_node_group(
693 management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
694 form = NodeGroupInterfaceForm(data=make_interface_settings())
695 self.assertTrue(form.is_valid(), form._errors)
696 interface = form.save(nodegroup=nodegroup)
697 self.assertEqual(nodegroup, interface.nodegroup)
698
699 def test_NodeGroupInterfaceForm_validates_parameters(self):691 def test_NodeGroupInterfaceForm_validates_parameters(self):
700 form = NodeGroupInterfaceForm(data={'ip': factory.getRandomString()})692 form = NodeGroupInterfaceForm(data={'ip': factory.getRandomString()})
701 self.assertFalse(form.is_valid())693 self.assertFalse(form.is_valid())
@@ -707,9 +699,10 @@
707 settings['management'] = NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED699 settings['management'] = NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED
708 for field_name in nullable_fields:700 for field_name in nullable_fields:
709 del settings[field_name]701 del settings[field_name]
710 form = NodeGroupInterfaceForm(data=settings)
711 nodegroup = factory.make_node_group()702 nodegroup = factory.make_node_group()
712 interface = form.save(nodegroup=nodegroup)703 form = NodeGroupInterfaceForm(
704 data=settings, instance=NodeGroupInterface(nodegroup=nodegroup))
705 interface = form.save()
713 field_values = [706 field_values = [
714 getattr(interface, field_name) for field_name in nullable_fields]707 getattr(interface, field_name) for field_name in nullable_fields]
715 self.assertThat(field_values, AllMatch(Equals('')))708 self.assertThat(field_values, AllMatch(Equals('')))
716709
=== modified file 'src/maasserver/tests/test_views_settings_clusters.py'
--- src/maasserver/tests/test_views_settings_clusters.py 2013-02-11 08:23:10 +0000
+++ src/maasserver/tests/test_views_settings_clusters.py 2013-10-04 13:49:06 +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-12-03 05:18:52 +0000
+++ src/maasserver/views/settings_clusters.py 2013-10-04 13:49:06 +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

to status/vote changes: