cyborg/cyborg/db/api.py

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"""