From cb95f7149ac434040481a80d24dbfe133409b99e Mon Sep 17 00:00:00 2001
From: Kálmán Viktor <kviktor@cloud.bme.hu>
Date: Wed, 12 Mar 2014 14:01:56 +0100
Subject: [PATCH] dashboard: shut off button

---
 circle/dashboard/templates/dashboard/vm-detail.html |  7 +++++++
 circle/dashboard/views.py                           |  9 +++++++++
 2 files changed, 16 insertions(+)

diff --git a/circle/dashboard/templates/dashboard/vm-detail.html b/circle/dashboard/templates/dashboard/vm-detail.html
index 1cec6bf..5a2dd6b 100644
--- a/circle/dashboard/templates/dashboard/vm-detail.html
+++ b/circle/dashboard/templates/dashboard/vm-detail.html
@@ -36,6 +36,13 @@
         <input type="hidden" name="reset" value="dummy"/>
         <button title="{% trans "Reset (power cycle)" %}" class="btn btn-default btn-xs" type="submit"><i class="icon-bolt"></i></button>
       </form>
+      <form style="display: inline;" method="POST" action="{% url "dashboard.views.detail" pk=instance.pk %}">
+        {% csrf_token %}
+        <input type="hidden" name="shut_off"/>
+        <button title="{% trans "Shut off" %}" class="btn btn-default btn-xs" type="submit">
+          <i class="icon-ban-circle"></i>
+        </button>
+      </form>
       <a title="Migrate" data-vm-pk="{{ instance.pk }}" href="{% url "dashboard.views.vm-migrate" pk=instance.pk %}" class="btn btn-default btn-xs vm-migrate">
         <i class="icon-truck"></i>
       </a>
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py
index cc7021d..00d9d0e 100644
--- a/circle/dashboard/views.py
+++ b/circle/dashboard/views.py
@@ -231,6 +231,7 @@ class VmDetailView(CheckedDetailView):
             'deploy': self.__deploy,
             'reset': self.__reset,
             'reboot': self.__reboot,
+            'shut_off': self.__shut_off,
         }
         for k, v in options.iteritems():
             if request.POST.get(k) is not None:
@@ -465,6 +466,14 @@ class VmDetailView(CheckedDetailView):
         self.object.reboot_async(request.user)
         return redirect("%s#activity" % self.object.get_absolute_url())
 
+    def __shut_off(self, request):
+        self.object = self.get_object()
+        if not self.object.has_level(request.user, 'owner'):
+            raise PermissionDenied()
+
+        self.object.shut_off_async(request.user)
+        return redirect("%s#activity" % self.object.get_absolute_url())
+
 
 class NodeDetailView(LoginRequiredMixin, SuperuserRequiredMixin, DetailView):
     template_name = "dashboard/node-detail.html"
--
libgit2 0.26.0