Currently, previous page in checkpoints pagination not work, it always throw an error in the web page. It is because that checkpoints in karbor do not need reverse the order (checkpoints are sorted by 'timestamp@id' in the backend, so we can not do the reverse only be the id or name) This patch will fix it. Change-Id: I45c3e7337bf2ee9d3f2fbf9ee7a438884b8b8ca9 Closes-Bug: #1714909
490 lines
19 KiB
Python
490 lines
19 KiB
Python
# Copyright (c) 2016 Huawei, Inc.
|
|
#
|
|
# 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 __future__ import absolute_import
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from horizon import exceptions
|
|
from horizon.utils import functions as utils
|
|
from horizon.utils.memoized import memoized
|
|
from karborclient.v1 import client as karbor_client
|
|
from openstack_dashboard.api import base
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
def get_karbor_endpoint(request):
|
|
endpoint = ""
|
|
try:
|
|
endpoint = base.url_for(request, "data-protect")
|
|
except exceptions.ServiceCatalogException:
|
|
endpoint = 'http://localhost:8799'
|
|
LOG.warning('Karbor API location could not be found in Service '
|
|
'Catalog, using default: {0}'.format(endpoint))
|
|
return endpoint
|
|
|
|
|
|
@memoized
|
|
def karborclient(request):
|
|
endpoint = get_karbor_endpoint(request)
|
|
LOG.debug('karborclient connection created using the token "%s" and url'
|
|
'"%s"' % (request.user.token.id, endpoint))
|
|
c = karbor_client.Client(endpoint=endpoint,
|
|
auth_url=getattr(settings,
|
|
'OPENSTACK_KEYSTONE_URL'),
|
|
token=request.user.token.id,
|
|
username=request.user.username,
|
|
project_id=request.user.tenant_id,
|
|
auth_plugin='token',
|
|
)
|
|
return c
|
|
|
|
|
|
def update_pagination(entities, page_size, marker, sort_dir, sort_key,
|
|
reversed_order):
|
|
entities, has_more_data, has_prev_data = get_pagination_info(
|
|
entities, page_size, marker, reversed_order)
|
|
|
|
# restore the original ordering here
|
|
if reversed_order:
|
|
entities = sorted(entities, key=lambda entity:
|
|
(getattr(entity, sort_key) or '').lower(),
|
|
reverse=(sort_dir == 'asc'))
|
|
|
|
return entities, has_more_data, has_prev_data
|
|
|
|
|
|
def get_pagination_info(entities, page_size, marker, reversed_order):
|
|
has_more_data = has_prev_data = False
|
|
if len(entities) > page_size:
|
|
has_more_data = True
|
|
entities.pop()
|
|
if marker is not None:
|
|
has_prev_data = True
|
|
# first page condition when reached via prev back
|
|
elif reversed_order and marker is not None:
|
|
has_more_data = True
|
|
# last page condition
|
|
elif marker is not None:
|
|
has_prev_data = True
|
|
return entities, has_more_data, has_prev_data
|
|
|
|
|
|
def plan_create(request, name, provider_id, resources, parameters):
|
|
return karborclient(request).plans.create(name, provider_id, resources,
|
|
parameters)
|
|
|
|
|
|
def plan_delete(request, plan_id):
|
|
return karborclient(request).plans.delete(plan_id)
|
|
|
|
|
|
def plan_update(request, plan_id, data):
|
|
return karborclient(request).plans.update(plan_id, data)
|
|
|
|
|
|
def plan_list(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None):
|
|
return karborclient(request).plans.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def plan_list_paged(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None,
|
|
paginate=False, reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
plans = karborclient(request).plans.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
plans, has_more_data, has_prev_data = update_pagination(
|
|
plans, page_size, marker, sort_dir, sort_key, reversed_order)
|
|
else:
|
|
plans = karborclient(request).plans.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
return (plans, has_more_data, has_prev_data)
|
|
|
|
|
|
def plan_get(request, plan_id):
|
|
return karborclient(request).plans.get(plan_id)
|
|
|
|
|
|
def scheduled_operation_create(request, name, operation_type, trigger_id,
|
|
operation_definition):
|
|
return karborclient(request).scheduled_operations.create(
|
|
name,
|
|
operation_type,
|
|
trigger_id,
|
|
operation_definition)
|
|
|
|
|
|
def scheduled_operation_delete(request, scheduled_operation_id):
|
|
return karborclient(request).scheduled_operations.delete(
|
|
scheduled_operation_id)
|
|
|
|
|
|
def scheduled_operation_list(request, detailed=False, search_opts=None,
|
|
marker=None, limit=None, sort_key=None,
|
|
sort_dir=None, sort=None):
|
|
return karborclient(request).scheduled_operations.list(
|
|
detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def scheduled_operation_list_paged(request, detailed=False, search_opts=None,
|
|
marker=None, limit=None, sort_key=None,
|
|
sort_dir=None, sort=None, paginate=False,
|
|
reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
scheduled_operations = karborclient(request).scheduled_operations.list(
|
|
detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
scheduled_operations, has_more_data, has_prev_data = update_pagination(
|
|
scheduled_operations,
|
|
page_size,
|
|
marker,
|
|
sort_dir,
|
|
sort_key,
|
|
reversed_order)
|
|
else:
|
|
scheduled_operations = karborclient(request).scheduled_operations.list(
|
|
detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (scheduled_operations, has_more_data, has_prev_data)
|
|
|
|
|
|
def scheduled_operation_get(request, scheduled_operation_id):
|
|
return karborclient(request).scheduled_operations.get(
|
|
scheduled_operation_id)
|
|
|
|
|
|
def restore_create(request, provider_id, checkpoint_id,
|
|
restore_target, parameters, restore_auth):
|
|
return karborclient(request).restores.create(provider_id,
|
|
checkpoint_id,
|
|
restore_target,
|
|
parameters,
|
|
restore_auth)
|
|
|
|
|
|
def restore_delete(request, restore_id):
|
|
return karborclient(request).restores.delete(restore_id)
|
|
|
|
|
|
def restore_list(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None):
|
|
return karborclient(request).restores.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def restore_list_paged(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None,
|
|
paginate=False, reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
restores = karborclient(request).restores.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
restores, has_more_data, has_prev_data = update_pagination(
|
|
restores, page_size, marker, sort_dir, sort_key, reversed_order)
|
|
else:
|
|
restores = karborclient(request).restores.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (restores, has_more_data, has_prev_data)
|
|
|
|
|
|
def restore_get(request, restore_id):
|
|
return karborclient(request).restores.get(restore_id)
|
|
|
|
|
|
def protectable_list(request):
|
|
return karborclient(request).protectables.list()
|
|
|
|
|
|
def protectable_get(request, protectable_type):
|
|
return karborclient(request).protectables.get(protectable_type)
|
|
|
|
|
|
def protectable_list_instances(request, protectable_type, search_opts=None,
|
|
marker=None, limit=None, sort_key=None,
|
|
sort_dir=None, sort=None):
|
|
return karborclient(request).protectables.list_instances(
|
|
protectable_type=protectable_type,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def protectable_list_instances_paged(request, protectable_type,
|
|
search_opts=None, marker=None, limit=None,
|
|
sort_key=None, sort_dir=None, sort=None,
|
|
paginate=False, reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
instances = karborclient(request).protectables.list_instances(
|
|
protectable_type,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
instances, has_more_data, has_prev_data = update_pagination(
|
|
instances, page_size, marker, sort_dir, sort_key, reversed_order)
|
|
else:
|
|
instances = karborclient(request).protectables.list_instances(
|
|
protectable_type,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (instances, has_more_data, has_prev_data)
|
|
|
|
|
|
def protectable_get_instance(request, type, id):
|
|
return karborclient(request).protectables.get_instance(type, id)
|
|
|
|
|
|
def provider_list(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None):
|
|
return karborclient(request).providers.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def provider_list_paged(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None,
|
|
paginate=False, reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
providers = karborclient(request).providers.list(
|
|
detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
providers, has_more_data, has_prev_data = update_pagination(
|
|
providers, page_size, marker, sort_dir, sort_key, reversed_order)
|
|
else:
|
|
providers = karborclient(request).providers.list(
|
|
detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (providers, has_more_data, has_prev_data)
|
|
|
|
|
|
def provider_get(request, provider_id):
|
|
return karborclient(request).providers.get(provider_id)
|
|
|
|
|
|
def checkpoint_create(request, provider_id, plan_id):
|
|
return karborclient(request).checkpoints.create(provider_id, plan_id)
|
|
|
|
|
|
def checkpoint_delete(request, provider_id, checkpoint_id):
|
|
return karborclient(request).checkpoints.delete(provider_id, checkpoint_id)
|
|
|
|
|
|
def checkpoint_list(request, provider_id=None, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None):
|
|
return karborclient(request).checkpoints.list(provider_id=provider_id,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def checkpoint_list_paged(request, provider_id=None, search_opts=None,
|
|
marker=None, limit=None, sort_key=None,
|
|
sort_dir=None, sort=None, paginate=False,
|
|
reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
checkpoints = karborclient(request).checkpoints.list(
|
|
provider_id=provider_id,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
checkpoints, has_more_data, has_prev_data = \
|
|
get_pagination_info(
|
|
checkpoints, page_size, marker, reversed_order)
|
|
else:
|
|
checkpoints = karborclient(request).checkpoints.list(
|
|
provider_id=provider_id,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (checkpoints, has_more_data, has_prev_data)
|
|
|
|
|
|
def checkpoint_get(request, provider_id, checkpoint_id):
|
|
return karborclient(request).checkpoints.get(provider_id, checkpoint_id)
|
|
|
|
|
|
def trigger_create(request, name, type, properties):
|
|
return karborclient(request).triggers.create(name, type, properties)
|
|
|
|
|
|
def trigger_delete(request, trigger_id):
|
|
return karborclient(request).triggers.delete(trigger_id)
|
|
|
|
|
|
def trigger_list(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None):
|
|
return karborclient(request).triggers.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
|
|
def trigger_list_paged(request, detailed=False, search_opts=None, marker=None,
|
|
limit=None, sort_key=None, sort_dir=None, sort=None,
|
|
paginate=False, reversed_order=False):
|
|
has_more_data = False
|
|
has_prev_data = False
|
|
|
|
if paginate:
|
|
if reversed_order:
|
|
sort_dir = 'desc' if sort_dir == 'asc' else 'asc'
|
|
page_size = utils.get_page_size(request)
|
|
triggers = karborclient(request).triggers.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=page_size + 1,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
triggers, has_more_data, has_prev_data = update_pagination(
|
|
triggers, page_size, marker, sort_dir, sort_key, reversed_order)
|
|
else:
|
|
triggers = karborclient(request).triggers.list(detailed=detailed,
|
|
search_opts=search_opts,
|
|
marker=marker,
|
|
limit=limit,
|
|
sort_key=sort_key,
|
|
sort_dir=sort_dir,
|
|
sort=sort)
|
|
|
|
return (triggers, has_more_data, has_prev_data)
|
|
|
|
|
|
def trigger_get(request, trigger_id):
|
|
return karborclient(request).triggers.get(trigger_id)
|