From dcda6940263a43344bf98aa1776cce34d25ff927 Mon Sep 17 00:00:00 2001 From: Matthias Runge Date: Mon, 19 Nov 2012 13:14:02 +0100 Subject: [PATCH] Return a friendly error at flavor creation When trying to create a flavor with an Id/Name that is already in use, the operation fails and no error message is being displayed Change-Id: I92db8b52bc4e63e5e5ce4d90169944e484baeddd Fixes: bug #1079155 --- .../dashboards/admin/flavors/forms.py | 21 +++++++++++++++++++ .../dashboards/admin/flavors/tests.py | 1 + 2 files changed, 22 insertions(+) diff --git a/openstack_dashboard/dashboards/admin/flavors/forms.py b/openstack_dashboard/dashboards/admin/flavors/forms.py index a7d8d1d3be..b66217e339 100644 --- a/openstack_dashboard/dashboards/admin/flavors/forms.py +++ b/openstack_dashboard/dashboards/admin/flavors/forms.py @@ -40,6 +40,24 @@ class CreateFlavor(forms.SelfHandlingForm): disk_gb = forms.IntegerField(label=_("Root Disk GB")) eph_gb = forms.IntegerField(label=_("Ephemeral Disk GB")) + def clean_name(self): + name = self.cleaned_data.get('name') + try: + flavors = api.nova.flavor_list(self.request) + except: + flavors = [] + msg = _('Unable to get flavor list') + exceptions.check_message(["Connection", "refused"], msg) + raise + if flavors is not None: + for flavor in flavors: + if flavor.name == name: + raise forms.ValidationError( + _('The name "%s" is already used by another flavor.') + % name + ) + return name + def handle(self, request, data): try: flavor = api.nova.flavor_create(request, @@ -59,6 +77,9 @@ class CreateFlavor(forms.SelfHandlingForm): class EditFlavor(CreateFlavor): flavor_id = forms.IntegerField(widget=forms.widgets.HiddenInput) + def clean_name(self): + return self.cleaned_data['name'] + def handle(self, request, data): try: flavor_id = data['flavor_id'] diff --git a/openstack_dashboard/dashboards/admin/flavors/tests.py b/openstack_dashboard/dashboards/admin/flavors/tests.py index 6104d6432d..06c2650931 100644 --- a/openstack_dashboard/dashboards/admin/flavors/tests.py +++ b/openstack_dashboard/dashboards/admin/flavors/tests.py @@ -23,6 +23,7 @@ class FlavorsTests(test.BaseAdminViewTests): flavor.disk, IsA(uuid.uuid4()), ephemeral=eph).AndReturn(flavor) + api.nova.flavor_list(IsA(http.HttpRequest)) self.mox.ReplayAll() url = reverse('horizon:admin:flavors:create')