summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openstack_dashboard/dashboards/admin/flavors/forms.py21
-rw-r--r--openstack_dashboard/dashboards/admin/flavors/tests.py1
2 files changed, 22 insertions, 0 deletions
diff --git a/openstack_dashboard/dashboards/admin/flavors/forms.py b/openstack_dashboard/dashboards/admin/flavors/forms.py
index a7d8d1d3b..b66217e33 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 6104d6432..06c265093 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')