Repository URL to install this package:
Version:
5.2.8.1.dev1 ▾
|
python3-tvault-horizon-plugin
/
usr
/
lib
/
python3
/
dist-packages
/
trilio_dashboard
/
migration_plans
/
views.py
|
---|
# Copyright (c) 2014 TrilioData, Inc.
# All Rights Reserved.
"""
Views for managing WorkloadMgr Migration Plans.
"""
from datetime import datetime
import json
import logging
import ast
from django.utils.translation import ugettext_lazy as _
from django.views.generic import View
from django.http import HttpResponse, JsonResponse
try:
from django.core.urlresolvers import reverse
except ImportError:
from django.urls import reverse
try:
from django.core.urlresolvers import reverse_lazy
except ImportError:
from django.urls import reverse_lazy
from horizon import messages
from horizon import exceptions
from horizon import forms
from horizon import tables
from horizon import workflows
from horizon import messages
from openstack_dashboard import api
from trilio_dashboard import workloadmgr
from .tables import MigrationPlansTable
from .migrations.tables import MigrationsTable
from .migrations.forms import DiscoverVMsServiceForm
from .workflows import CreateMigrationPlan
from .workflows import UpdateMigrationPlan
from .workflows import CreateMigration, SetCreateMigration_DefaultSteps
LOG = logging.getLogger(__name__)
class NextMigrationView(View):
"""
This will give Next Migration Id.
"""
def get(self, request):
"""
Args:
request: HttpRequest Object.
Returns: Dict Next_migration_id
"""
req = request.GET
migration_plan_id = req.get('migration_plan_id')
migration_id = req.get('migration_id')
next_migration_id = workloadmgr.next_migration_by_id(request,
migration_plan_id,
migration_id)
return JsonResponse({"id": next_migration_id})
class PreviousMigrationView(View):
"""
This will give Previous Migration Id.
"""
def get(self, request):
"""
Args:
request: HttpRequest Object
Returns: dict Migration_id
"""
req = request.GET
migration_plan_id = req.get('migration_plan_id')
migration_id = req.get('migration_id')
next_migration_id = workloadmgr.prev_migration_by_id(request,
migration_plan_id,
migration_id)
return JsonResponse({"id": next_migration_id})
class IndexView(tables.DataTableView):
table_class = MigrationPlansTable
template_name = 'project/migration_plans/index.html'
def get_migration_plans_data(self):
try:
migration_plans = workloadmgr.migration_plan_list(self.request)
except Exception as ex:
migration_plans = []
msg = _('Migration Plans list can not be retrieved.')
messages.error(self.request, msg)
return migration_plans
def get_data(self):
return self.get_migration_plans_data()
class DetailView(tables.DataTableView):
table_class = MigrationsTable
template_name = 'project/migration_plans/detail.html'
failure_url = reverse_lazy('horizon:project:migration_plans:index')
def get_data(self):
migrations = []
try:
migration_plan = self._get_data()
if migration_plan:
migrations = workloadmgr.migration_list(
self.request,
migration_plan_id=migration_plan.id)
except Exception as ex:
msg = _('Migrations list can not be retrieved. Error %s' % str(ex))
messages.error(self.request, msg)
return migrations
def _get_data(self):
if not hasattr(self, "_migration_plan"):
migration_plan = None
try:
migration_plan_id = self.kwargs['migration_plan_id']
migration_plan = workloadmgr.migration_plan_get(self.request, migration_plan_id)
except:
msg = _('Unable to retrieve details for migration plan "%s".') \
% (migration_plan_id)
messages.error(self.request, msg)
self._migration_plan = migration_plan
return self._migration_plan
def _get_migrations(self, migration_plan_id):
try:
migrations = []
unique_vm_list = []
unique_vm_list_info = []
migrations = workloadmgr.migration_list(
self.request,
migration_plan_id=migration_plan_id,
status="available",
filter_it=False, get_instances=True)
tz = workloadmgr.get_time_zone(self.request)
for migration in migrations:
migration.created_at = workloadmgr.get_local_time(
migration.created_at, "%H:%M:%S %p - %m/%d/%Y",
"%m/%d/%Y - %I:%M:%S %p", tz)
if hasattr(migration, 'vms'):
for instance in migration.vms:
if instance['vm_id'] in unique_vm_list:
continue
unique_vm_list.append(instance['vm_id'])
d = {}
d['vm_name'] = instance['vm_name']
d['vm_id'] = instance['vm_id']
unique_vm_list_info.append(d)
except Exception as ex:
msg = _('Migrations list can not be retrieved. Error %s' % str(ex))
messages.error(self.request, msg)
return (migrations, unique_vm_list, unique_vm_list_info)
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context["migration_plan"] = self._get_data()
migrations, unique_vm_list, unique_vm_list_info = self._get_migrations(context["migration_plan_id"])
context["migrations"] = migrations
context["unique_vm_list"] = unique_vm_list
context["unique_vm_list_info"] = unique_vm_list_info
if len(migrations) == 0 and len(unique_vm_list_info) == 0:
for vm in context["migration_plan"].vms:
d = {}
d['vm_name'] = vm['name']
d['vm_id'] = vm['id']
unique_vm_list_info.append(d)
return context
class CreateView(workflows.WorkflowView):
workflow_class = CreateMigrationPlan
template_name = 'project/migration_plans/create.html'
def get_initial(self):
pass
class UpdateView(workflows.WorkflowView):
workflow_class = UpdateMigrationPlan
template_name = 'project/migration_plans/create.html'
failure_url = reverse_lazy('horizon:project:migration_plans:index')
def _get_data(self):
migration_plan = None
try:
migration_plan_id = self.kwargs['migration_plan_id']
migration_plan = workloadmgr.migration_plan_get(self.request, migration_plan_id)
except Exception as ex:
msg = _('Unable to retrieve details for migration_plan "%s". Reason: %s') \
% (migration_plan_id, str(ex))
messages.error(self.request, msg)
self._migration_plan = migration_plan
return self._migration_plan
def get_context_data(self, **kwargs):
migration_plan = self._get_data()
context = super(UpdateView, self).get_context_data(**kwargs)
context['migration_plan_id'] = self.kwargs['migration_plan_id']
context["migration_plan"] = self._migration_plan
context['workflow'].context['migration_plan_id'] = self.kwargs['migration_plan_id']
context["project_id"] = self._migration_plan.project_id
return context
def get_initial(self):
initial = super(UpdateView, self).get_initial()
initial_values = {'migration_plan_id': self.kwargs['migration_plan_id'],
'name': self._migration_plan.name,
'description': self._migration_plan.description,
'migration_plan_id': self._migration_plan.id,
'VMs': self._migration_plan.vms,
'project_id':self._migration_plan.project_id,}
initial.update(initial_values)
return initial
class CreateMigrationView(workflows.WorkflowView):
workflow_class = CreateMigration
template_name = 'project/migration_plans/migrations/migrate.html'
failure_url = reverse_lazy('horizon:project:migration_plans:index')
def _get_data(self):
if not hasattr(self, "_migration_plan"):
try:
migration_plan_id = self.kwargs['migration_plan_id']
migration_plan = workloadmgr.migration_plan_get(self.request, migration_plan_id)
except Exception:
msg = _('Unable to retrieve details for migration_plan "%s".') \
% (migration_plan_id)
exceptions.handle(self.request, msg, redirect=self.failure_url)
self._migration_plan = migration_plan
return self._migration_plan
def get_context_data(self, **kwargs):
# set class specific attributes here
# once super class method is called, it is too late
migration_plan = self._get_data()
SetCreateMigration_DefaultSteps(migration_plan)
context = super(CreateMigrationView, self).get_context_data(**kwargs)
context['migration_plan_id'] = self.kwargs['migration_plan_id']
context["migration_plan"] = self._migration_plan
context['workflow'].context['migration_plan_id'] = self.kwargs['migration_plan_id']
return context
class DiscoverVMsView(forms.ModalFormView):
form_class = DiscoverVMsServiceForm
template_name = 'project/migration_plans/migrations/discover.html'
submit_label = _("Discover VM's")
def get_success_url(self):
if self.request.META['HTTP_REFERER'].endswith('migration_plans/') or self.request.META['HTTP_REFERER'].endswith('migration_plans'):
return reverse_lazy('horizon:project:migration_plans:index')
else:
return reverse_lazy('horizon:project:migration_plans:detail', kwargs={'migration_plan_id': self.migration_plan_id})
def get_failure_url(self):
if self.request.META['HTTP_REFERER'].endswith('migration_plans/') or self.request.META['HTTP_REFERER'].endswith('migration_plans'):
return reverse_lazy('horizon:project:migration_plans:index')
else:
return reverse_lazy('horizon:project:migration_plans:detail', kwargs={'migration_plan_id': self.migration_plan_id})
def get_context_data(self, **kwargs):
migration_plan_url = self.request.META['PATH_INFO'].split('/')
self.migration_plan_id = migration_plan_url[migration_plan_url.index('migration_plans') + 1]
context = super(DiscoverVMsView, self).get_context_data(**kwargs)
context["migration_plan_id"] = self.migration_plan_id
return context
def get_initial(self):
migration_plan_url = self.request.META['PATH_INFO'].split('/')
self.migration_plan_id = migration_plan_url[migration_plan_url.index('migration_plans') + 1]
initial = super(DiscoverVMsView, self).get_initial()
initial.update({'migration_plan_id': self.migration_plan_id})
return initial