256 lines
8.2 KiB
Python
256 lines
8.2 KiB
Python
# Copyright 2017 Huawei Technologies Co.,LTD.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
"""Base classes for storage engines."""
|
|
|
|
import abc
|
|
|
|
from oslo_config import cfg
|
|
from oslo_db import api as db_api
|
|
import six
|
|
|
|
|
|
_BACKEND_MAPPING = {'sqlalchemy': 'cyborg.db.sqlalchemy.api'}
|
|
IMPL = db_api.DBAPI.from_config(cfg.CONF,
|
|
backend_mapping=_BACKEND_MAPPING,
|
|
lazy=True)
|
|
|
|
|
|
def get_instance():
|
|
"""Return a DB API instance."""
|
|
return IMPL
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class Connection(object):
|
|
"""Base class for storage system connections."""
|
|
|
|
@abc.abstractmethod
|
|
def __init__(self):
|
|
"""Constructor."""
|
|
|
|
# device
|
|
@abc.abstractmethod
|
|
def device_create(self, context, values):
|
|
"""Create a new device when device is inserted into the host."""
|
|
|
|
@abc.abstractmethod
|
|
def device_get(self, context, uuid):
|
|
"""Get requested device."""
|
|
|
|
@abc.abstractmethod
|
|
def device_list(self, context, limit, marker, sort_key, sort_dir):
|
|
"""Get requested list of devices."""
|
|
|
|
@abc.abstractmethod
|
|
def device_list_by_filters(self, context,
|
|
filters, sort_key='created_at',
|
|
sort_dir='desc', limit=None,
|
|
marker=None, columns_to_join=None):
|
|
"""Get requested devices by filters."""
|
|
|
|
@abc.abstractmethod
|
|
def device_update(self, context, uuid, values):
|
|
"""Update a device."""
|
|
|
|
@abc.abstractmethod
|
|
def device_delete(self, context, uuid):
|
|
"""Delete a device when device is removed from the host."""
|
|
|
|
# device_profile
|
|
@abc.abstractmethod
|
|
def device_profile_create(self, context, values):
|
|
"""Create a new device_profile."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_get_by_uuid(self, context, uuid):
|
|
"""Get requested device_profile by uuid."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_get_by_id(self, context, id):
|
|
"""Get requested device_profile by id."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_list(self, context):
|
|
"""Get requested list of device_profiles."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_list_by_filters(self, context,
|
|
filters, sort_key='created_at',
|
|
sort_dir='desc', limit=None,
|
|
marker=None, columns_to_join=None):
|
|
"""Get requested list of device_profiles by filters."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_update(self, context, uuid, values):
|
|
"""Update a device_profile."""
|
|
|
|
@abc.abstractmethod
|
|
def device_profile_delete(self, context, uuid):
|
|
"""Delete a device_profile."""
|
|
|
|
# deployable
|
|
@abc.abstractmethod
|
|
def deployable_create(self, context, values):
|
|
"""Create a new deployable."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_get(self, context, uuid):
|
|
"""Get requested deployable."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_get_by_host(self, context, host):
|
|
"""Get requested deployable by host."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_list(self, context):
|
|
"""Get requested list of deployables."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_update(self, context, uuid, values):
|
|
"""Update a deployable."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_delete(self, context, uuid):
|
|
"""Delete a deployable."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_get_by_filters(self, context,
|
|
filters, sort_key='created_at',
|
|
sort_dir='desc', limit=None,
|
|
marker=None, columns_to_join=None):
|
|
"""Get requested deployable by filters."""
|
|
|
|
@abc.abstractmethod
|
|
def deployable_get_by_filters_with_attributes(self, context,
|
|
filters):
|
|
"""Get requested deployable by filters with attributes."""
|
|
# attributes
|
|
@abc.abstractmethod
|
|
def attribute_create(self, context, values):
|
|
"""Create a new attribute."""
|
|
|
|
@abc.abstractmethod
|
|
def attribute_get(self, context, uuid):
|
|
"""Get requested attribute."""
|
|
|
|
@abc.abstractmethod
|
|
def attribute_get_by_deployable_id(self, context, deployable_id):
|
|
"""Get requested attribute by attribute id."""
|
|
|
|
@abc.abstractmethod
|
|
def attribute_get_by_filter(self, context, filters):
|
|
"""Get requested attribute by kv pair and attribute id."""
|
|
|
|
@abc.abstractmethod
|
|
def attribute_update(self, context, uuid, key, value):
|
|
"""Update an attribute's key value pair."""
|
|
|
|
@abc.abstractmethod
|
|
def attribute_delete(self, context, uuid):
|
|
"""Delete an attribute."""
|
|
|
|
# quota
|
|
@abc.abstractmethod
|
|
def quota_reserve(self, context, resources, deltas, expire,
|
|
until_refresh, max_age, project_id=None,
|
|
is_allocated_reserve=False):
|
|
"""Check quotas and create appropriate reservations."""
|
|
|
|
@abc.abstractmethod
|
|
def reservation_commit(self, context, reservations, project_id=None):
|
|
"""Check quotas and create appropriate reservations."""
|
|
|
|
# extarq
|
|
@abc.abstractmethod
|
|
def extarq_create(self, context, values):
|
|
"""Create a new extarq."""
|
|
|
|
@abc.abstractmethod
|
|
def extarq_delete(self, context, uuid):
|
|
"""Delete an extarq."""
|
|
|
|
@abc.abstractmethod
|
|
def extarq_update(self, context, uuid, values):
|
|
"""Update an extarq."""
|
|
|
|
@abc.abstractmethod
|
|
def extarq_list(self, context, limit, marker, sort_key, sort_dir):
|
|
"""Get requested list of extarqs."""
|
|
|
|
@abc.abstractmethod
|
|
def extarq_get(self, context, uuid):
|
|
"""Get requested extarq."""
|
|
|
|
# attach_handle
|
|
@abc.abstractmethod
|
|
def attach_handle_create(self, context, values):
|
|
"""Create a new attach_handle"""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_get_by_uuid(self, context, uuid):
|
|
"""Get requested attach_handle"""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_get_by_id(self, context, id):
|
|
"""Get requested attach_handle"""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_get_by_filters(self, context,
|
|
filters, sort_key='created_at',
|
|
sort_dir='desc', limit=None,
|
|
marker=None, columns_to_join=None):
|
|
"""Get requested deployable by filters."""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_list(self, context):
|
|
"""Get requested list of attach_handles"""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_delete(self, context, uuid):
|
|
"""Delete an attach_handle"""
|
|
|
|
@abc.abstractmethod
|
|
def attach_handle_update(self, context, uuid, values):
|
|
"""Update an attach_handle"""
|
|
|
|
# control_path_id
|
|
@abc.abstractmethod
|
|
def control_path_create(self, context, values):
|
|
"""Create a new control path id"""
|
|
|
|
@abc.abstractmethod
|
|
def control_path_get_by_uuid(self, context, uuid):
|
|
"""Get requested control path id"""
|
|
|
|
@abc.abstractmethod
|
|
def control_path_get_by_filters(self, context,
|
|
filters, sort_key='created_at',
|
|
sort_dir='desc', limit=None,
|
|
marker=None, columns_to_join=None):
|
|
"""Get requested deployable by filters."""
|
|
|
|
@abc.abstractmethod
|
|
def control_path_list(self, context):
|
|
"""Get requested list of control path ids"""
|
|
|
|
@abc.abstractmethod
|
|
def control_path_delete(self, context, uuid):
|
|
"""Delete a control path id"""
|
|
|
|
@abc.abstractmethod
|
|
def control_path_update(self, context, uuid, values):
|
|
"""Update a control path id"""
|