Merge "Allow non-admins to cold migrate instances"

This commit is contained in:
Zuul
2025-06-03 13:16:31 +00:00
committed by Gerrit Code Review
2 changed files with 34 additions and 34 deletions

View File

@@ -16,7 +16,6 @@
from django.template.defaultfilters import title
from django import urls
from django.utils.translation import gettext_lazy as _
from django.utils.translation import ngettext_lazy
from keystoneclient import exceptions as keystone_exceptions
from horizon import tables
@@ -46,38 +45,6 @@ class RescueInstance(project_tables.RescueInstance):
url = "horizon:admin:instances:rescue"
class MigrateInstance(policy.PolicyTargetMixin, tables.BatchAction):
name = "migrate"
classes = ("btn-migrate",)
policy_rules = (("compute", "os_compute_api:os-migrate-server:migrate"),)
help_text = _("Migrating instances may cause some unrecoverable results.")
action_type = "danger"
@staticmethod
def action_present(count):
return ngettext_lazy(
"Migrate Instance",
"Migrate Instances",
count
)
@staticmethod
def action_past(count):
return ngettext_lazy(
"Scheduled migration (pending confirmation) of Instance",
"Scheduled migration (pending confirmation) of Instances",
count
)
def allowed(self, request, instance):
return ((instance.status in project_tables.ACTIVE_STATES or
instance.status == 'SHUTOFF') and
not project_tables.is_deleting(instance))
def action(self, request, obj_id):
api.nova.server_migrate(request, obj_id)
class LiveMigrateInstance(policy.PolicyTargetMixin,
tables.LinkAction):
name = "live_migrate"
@@ -204,7 +171,7 @@ class AdminInstancesTable(tables.DataTable):
project_tables.TogglePause,
project_tables.ToggleSuspend,
project_tables.ToggleShelve,
MigrateInstance,
project_tables.MigrateInstance,
LiveMigrateInstance,
project_tables.SoftRebootInstance,
project_tables.RebootInstance,

View File

@@ -1007,6 +1007,38 @@ class DetachInterface(policy.PolicyTargetMixin, tables.LinkAction):
return urls.reverse(self.url, args=[instance_id])
class MigrateInstance(policy.PolicyTargetMixin, tables.BatchAction):
name = "migrate"
classes = ("btn-migrate",)
policy_rules = (("compute", "os_compute_api:os-migrate-server:migrate"),)
help_text = _("Migrating instances may cause some unrecoverable results.")
action_type = "danger"
@staticmethod
def action_present(count):
return ngettext_lazy(
"Migrate Instance",
"Migrate Instances",
count
)
@staticmethod
def action_past(count):
return ngettext_lazy(
"Scheduled migration (pending confirmation) of Instance",
"Scheduled migration (pending confirmation) of Instances",
count
)
def allowed(self, request, instance):
return ((instance.status in ACTIVE_STATES or
instance.status == 'SHUTOFF') and
not is_deleting(instance))
def action(self, request, obj_id):
api.nova.server_migrate(request, obj_id)
def get_ips(instance):
template_name = 'project/instances/_instance_ips.html'
ip_groups = {}
@@ -1304,4 +1336,5 @@ class InstancesTable(tables.DataTable):
TogglePause, ToggleSuspend, ToggleShelve,
ResizeLink, LockInstance, UnlockInstance,
SoftRebootInstance, RebootInstance,
MigrateInstance,
StopInstance, RebuildInstance, DeleteInstance)