Tzu-Mainn Chen a18f40554c Code update for new Tuskar API
* 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
2014-07-10 16:25:05 +02:00

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,
}