diff --git a/circle/dashboard/templates/dashboard/_disk-list-element.html b/circle/dashboard/templates/dashboard/_disk-list-element.html index a78088f..d6b30a6 100644 --- a/circle/dashboard/templates/dashboard/_disk-list-element.html +++ b/circle/dashboard/templates/dashboard/_disk-list-element.html @@ -12,10 +12,12 @@ {% if op.resize_disk.disabled %}disabled{% endif %}"> <i class="fa fa-{{ op.resize_disk.icon }} fa-fw-12"></i> {% trans "Resize" %} </a> - {% else %} + {% elif d.is_resizable %} <a href="{% url "request.views.request-resize" vm_pk=instance.pk disk_pk=d.pk %}" class="btn btn-xs btn-primary operation"> <i class="fa fa-arrows-alt fa-fw-12"></i> {% trans "Request resize" %} </a> + {% else %} + <small class="text-muted">{% trans "Cannot be resized" %}</small> {% endif %} {% if op.remove_disk %} <a href="{{ op.remove_disk.get_url }}?disk={{d.pk}}" diff --git a/circle/request/templates/request/initials/resize.html b/circle/request/templates/request/initials/resize.html index 48173bc..a1a45c3 100644 --- a/circle/request/templates/request/initials/resize.html +++ b/circle/request/templates/request/initials/resize.html @@ -1,7 +1,7 @@ {% spaceless %} {% if LANGUAGE_CODE == "en" %} -Why do you need bigger disk? +Why do you need a bigger disk? {% else %} {# place your translations here #} -Why do you need bigger disk? +Why do you need a bigger disk? {% endif %} {% endspaceless %} diff --git a/circle/request/views.py b/circle/request/views.py index a2c771e..dabb989 100644 --- a/circle/request/views.py +++ b/circle/request/views.py @@ -327,8 +327,11 @@ class ResizeRequestView(VmRequestMixin, FormView): return context def form_valid(self, form): - vm = self.get_vm() disk = self.get_disk() + if not disk.is_resizable: + raise SuspiciousOperation + + vm = self.get_vm() data = form.cleaned_data user = self.request.user diff --git a/circle/storage/models.py b/circle/storage/models.py index b4a11d0..0b5431d 100644 --- a/circle/storage/models.py +++ b/circle/storage/models.py @@ -539,3 +539,7 @@ class Disk(TimeStampedModel): def get_absolute_url(self): return reverse('dashboard.views.disk-detail', kwargs={'pk': self.pk}) + + @property + def is_resizable(self): + return self.type in ('qcow2-norm', 'raw-rw')