
* Currently uses mock data * Many tests have call_count asserts removed * Many tests are removed pending additional API refactoring * Plan creation workflow needs to be fixed; successive workflow steps depend on initial role-selection step * Overcloud and plans index redirect logic may need to be rethought * Plans need to take responsibility for image and flavor (instead of role) Change-Id: I3299a66b4f11b74196d88c458b276cad0851cbab
92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
# -*- coding: utf8 -*-
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
from django.core.urlresolvers import reverse
|
|
from django.views.generic import base as base_views
|
|
|
|
from horizon.utils import memoized
|
|
import horizon.workflows
|
|
|
|
from tuskar_ui import api
|
|
from tuskar_ui.infrastructure.plans.workflows import create
|
|
from tuskar_ui.infrastructure.plans.workflows import scale
|
|
|
|
|
|
INDEX_URL = 'horizon:infrastructure:plans:index'
|
|
CREATE_URL = 'horizon:infrastructure:plans:create'
|
|
OVERCLOUD_INDEX_URL = 'horizon:infrastructure:overcloud:index'
|
|
|
|
|
|
class OvercloudPlanMixin(object):
|
|
@memoized.memoized
|
|
def get_plan(self, redirect=None):
|
|
if redirect is None:
|
|
redirect = reverse(INDEX_URL)
|
|
plan_id = self.kwargs['plan_id']
|
|
plan = api.tuskar.OvercloudPlan.get(self.request, plan_id,
|
|
_error_redirect=redirect)
|
|
return plan
|
|
|
|
|
|
class OvercloudRoleMixin(object):
|
|
@memoized.memoized
|
|
def get_role(self, redirect=None):
|
|
role_id = self.kwargs['role_id']
|
|
role = api.tuskar.OvercloudRole.get(self.request, role_id,
|
|
_error_redirect=redirect)
|
|
return role
|
|
|
|
|
|
class IndexView(base_views.RedirectView):
|
|
permanent = False
|
|
|
|
def get_redirect_url(self):
|
|
plan = api.tuskar.OvercloudPlan.get_the_plan(self.request)
|
|
|
|
if plan is None:
|
|
redirect = reverse(CREATE_URL)
|
|
else:
|
|
redirect = reverse(OVERCLOUD_INDEX_URL)
|
|
|
|
return redirect
|
|
|
|
|
|
class CreateView(horizon.workflows.WorkflowView):
|
|
workflow_class = create.Workflow
|
|
template_name = 'infrastructure/_fullscreen_workflow_base.html'
|
|
|
|
|
|
class Scale(horizon.workflows.WorkflowView, OvercloudPlanMixin):
|
|
workflow_class = scale.Workflow
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(Scale, self).get_context_data(**kwargs)
|
|
context['plan_id'] = self.kwargs['plan_id']
|
|
return context
|
|
|
|
def get_initial(self):
|
|
plan = self.get_plan()
|
|
overcloud_roles = dict((overcloud_role.id, overcloud_role)
|
|
for overcloud_role in
|
|
api.tuskar.OvercloudRole.list(self.request))
|
|
|
|
role_counts = dict((
|
|
(count['overcloud_role_id'],
|
|
overcloud_roles[count['overcloud_role_id']].flavor_id),
|
|
count['num_nodes'],
|
|
) for count in plan.counts)
|
|
return {
|
|
'plan_id': plan.id,
|
|
'role_counts': role_counts,
|
|
}
|