From b05a0bc9fb11a66ac43a99ccfdf6972c3ba908fa Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 10 May 2017 13:18:39 +0800 Subject: [PATCH] Add Start/Stop server support Change-Id: Ie962b22496e4974c2be2f131c9ff8e888dd86f60 --- mogan_ui/api/mogan.py | 20 ++++++++++ mogan_ui/content/servers/tables.py | 64 +++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/mogan_ui/api/mogan.py b/mogan_ui/api/mogan.py index 7aaefcf..7ddb3fa 100644 --- a/mogan_ui/api/mogan.py +++ b/mogan_ui/api/mogan.py @@ -82,6 +82,26 @@ def server_delete(request, server_id): return server_manager.delete(server_id) +def server_start(request, server_id): + """Start a server. + + :param request: HTTP request. + :param server_id: The uuid of the server. + """ + server_manager = moganclient(request).server + return server_manager.set_power_state(server_id, 'on') + + +def server_stop(request, server_id): + """Stop a server. + + :param request: HTTP request. + :param server_id: The uuid of the server. + """ + server_manager = moganclient(request).server + return server_manager.set_power_state(server_id, 'off') + + def keypair_list(request): """Retrieve a list of keypairs. diff --git a/mogan_ui/content/servers/tables.py b/mogan_ui/content/servers/tables.py index cafbd51..272868b 100644 --- a/mogan_ui/content/servers/tables.py +++ b/mogan_ui/content/servers/tables.py @@ -16,6 +16,7 @@ from django.http import HttpResponse from django import template from django.template.defaultfilters import title +from django.utils.translation import npgettext_lazy from django.utils.translation import pgettext_lazy from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ungettext_lazy @@ -82,6 +83,66 @@ class DeleteServer(tables.DeleteAction): mogan.server_delete(request, obj_id) +class StartServer(tables.BatchAction): + name = "start" + classes = ('btn-confirm',) + + @staticmethod + def action_present(count): + return ungettext_lazy( + u"Start Server", + u"Start Servers", + count + ) + + @staticmethod + def action_past(count): + return ungettext_lazy( + u"Started Server", + u"Started Servers", + count + ) + + def allowed(self, request, server): + return ((server is None) or + (server.status in ("stopped",))) + + def action(self, request, obj_id): + mogan.server_start(request, obj_id) + + +class StopServer(tables.BatchAction): + name = "stop" + help_text = _("The server(s) will be shut off.") + action_type = "danger" + + @staticmethod + def action_present(count): + return npgettext_lazy( + "Action to perform (the server is currently running)", + u"Shut Off Server", + u"Shut Off Servers", + count + ) + + @staticmethod + def action_past(count): + return npgettext_lazy( + "Past action (the server is currently already Shut Off)", + u"Shut Off Server", + u"Shut Off Servers", + count + ) + + def allowed(self, request, server): + return ((server is None) + or ((server.power_state in ("power on",)) + and (server.status != "deleting"))) + + def action(self, request, obj_id): + mogan.server_stop(request, obj_id) + + class UpdateRow(tables.Row): ajax = True @@ -193,5 +254,6 @@ class ServersTable(tables.DataTable): verbose_name = _("Servers") status_columns = ["status"] row_class = UpdateRow + table_actions_menu = (StartServer, StopServer) table_actions = (LaunchLink, DeleteServer, ServersFilterAction) - row_actions = (DeleteServer,) + row_actions = (StartServer, StopServer, DeleteServer,)