From 7c5eae8897f7cf75720a4b3aba9e88f9281bb59f Mon Sep 17 00:00:00 2001 From: Kálmán Viktor <kviktor@cloud.bme.hu> Date: Tue, 13 Jan 2015 15:13:26 +0100 Subject: [PATCH] dashboard: node/trait fix - use node_exact on vmlist (mega1 vs mega10) - remove trait object if there is no more reference to it --- circle/dashboard/templates/dashboard/_vm-migrate.html | 2 +- circle/dashboard/templates/dashboard/node-detail.html | 2 +- circle/dashboard/views/node.py | 11 ++++++++--- circle/vm/models/common.py | 7 +++++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/circle/dashboard/templates/dashboard/_vm-migrate.html b/circle/dashboard/templates/dashboard/_vm-migrate.html index 89d3ba7..718d0a3 100644 --- a/circle/dashboard/templates/dashboard/_vm-migrate.html +++ b/circle/dashboard/templates/dashboard/_vm-migrate.html @@ -31,7 +31,7 @@ Choose a compute node to migrate {{obj}} to. </label> <input id="migrate-to-{{n.pk}}" type="radio" name="to_node" value="{{ n.pk }}" style="float: right;" {% if current == n.pk %}disabled="disabled"{% endif %} - {% if recommended == n.pk %}checked="checked"{% endif %} + {% if recommended == n.pk and n.pk != current %}checked="checked"{% endif %} /> {% if n.pk not in nodes_w_traits %} <span class="vm-migrate-node-property"> diff --git a/circle/dashboard/templates/dashboard/node-detail.html b/circle/dashboard/templates/dashboard/node-detail.html index 586cd74..c4d04ef 100644 --- a/circle/dashboard/templates/dashboard/node-detail.html +++ b/circle/dashboard/templates/dashboard/node-detail.html @@ -73,7 +73,7 @@ </a> </li> <li> - <a href="{% url "dashboard.views.vm-list" %}?s=node:{{ node.name }}" + <a href="{% url "dashboard.views.vm-list" %}?s=node_exact:{{ node.name }}" target="blank" class="text-center"> <i class="fa fa-desktop fa-2x"></i><br> {% trans "Virtual Machines" %} diff --git a/circle/dashboard/views/node.py b/circle/dashboard/views/node.py index 269eb96..19bcbe4 100644 --- a/circle/dashboard/views/node.py +++ b/circle/dashboard/views/node.py @@ -143,8 +143,13 @@ class NodeDetailView(LoginRequiredMixin, def __remove_trait(self, request): try: to_remove = request.POST.get('to_remove') - self.object = self.get_object() - self.object.traits.remove(to_remove) + trait = Trait.objects.get(pk=to_remove) + node = self.get_object() + node.traits.remove(to_remove) + + if not trait.in_use: + trait.delete() + message = u"Success" except: # note this won't really happen message = u"Not success" @@ -155,7 +160,7 @@ class NodeDetailView(LoginRequiredMixin, content_type="application/json" ) else: - return redirect(self.object.get_absolute_url()) + return redirect(node.get_absolute_url()) class NodeList(LoginRequiredMixin, GraphMixin, SingleTableView): diff --git a/circle/vm/models/common.py b/circle/vm/models/common.py index c86c0b1..fd3efa2 100644 --- a/circle/vm/models/common.py +++ b/circle/vm/models/common.py @@ -170,3 +170,10 @@ class Trait(Model): def __unicode__(self): return self.name + + @property + def in_use(self): + return ( + self.instance_set.exists() or self.node_set.exists() + or self.instancetemplate_set.exists() + ) -- libgit2 0.26.0