diff --git a/openstack_dashboard/api/nova.py b/openstack_dashboard/api/nova.py index 19069441644..d9e0f2d7575 100644 --- a/openstack_dashboard/api/nova.py +++ b/openstack_dashboard/api/nova.py @@ -475,6 +475,14 @@ def server_revert_resize(request, instance_id): novaclient(request).servers.revert_resize(instance_id) +def server_start(request, instance_id): + novaclient(request).servers.start(instance_id) + + +def server_stop(request, instance_id): + novaclient(request).servers.stop(instance_id) + + def tenant_quota_get(request, tenant_id): return QuotaSet(novaclient(request).quotas.get(tenant_id)) diff --git a/openstack_dashboard/dashboards/project/instances/tables.py b/openstack_dashboard/dashboards/project/instances/tables.py index 82f8ae9986b..a9e671d26d9 100644 --- a/openstack_dashboard/dashboards/project/instances/tables.py +++ b/openstack_dashboard/dashboards/project/instances/tables.py @@ -413,6 +413,35 @@ def get_data(self, request, instance_id): return instance +class StartInstance(tables.BatchAction): + name = "start" + action_present = _("Start") + action_past = _("Started") + data_type_singular = _("Instance") + data_type_plural = _("Instances") + + def allowed(self, request, instance): + return instance.status in ("SHUTDOWN", "SHUTOFF", "CRASHED") + + def action(self, request, obj_id): + api.nova.server_start(request, obj_id) + + +class StopInstance(tables.BatchAction): + name = "stop" + action_present = _("Shut Off") + action_past = _("Shut Off") + data_type_singular = _("Instance") + data_type_plural = _("Instances") + classes = ('btn-danger',) + + def allowed(self, request, instance): + return get_power_state(instance) in ("RUNNING", "PAUSED", "SUSPENDED") + + def action(self, request, obj_id): + api.nova.server_stop(request, obj_id) + + def get_ips(instance): template_name = 'project/instances/_instance_ips.html' context = {"instance": instance} @@ -514,9 +543,10 @@ class Meta: status_columns = ["status", "task"] row_class = UpdateRow table_actions = (LaunchLink, TerminateInstance, InstancesFilterAction) - row_actions = (ConfirmResize, RevertResize, CreateSnapshot, - SimpleAssociateIP, AssociateIP, + row_actions = (StartInstance, ConfirmResize, RevertResize, + CreateSnapshot, SimpleAssociateIP, AssociateIP, SimpleDisassociateIP, EditInstance, EditInstanceSecurityGroups, ConsoleLink, LogLink, TogglePause, ToggleSuspend, ResizeLink, - SoftRebootInstance, RebootInstance, TerminateInstance) + SoftRebootInstance, RebootInstance, StopInstance, + TerminateInstance)