Files
trove/trove/datastore/views.py
Bo Tran Van b127068c20 Add Datastore Version Registry Extension
Current, users can config default datastore registry for managers not by
verions. This make you can flexible when have some experimental
datastore.

With this patch, users with the administrator role can configure the
datastore registry external for each datastore version using a command,
without editing configuration files.

Story: #2010860
Task: #48534
Change-Id: I910a1ba4a9216ab29faeed03198113b4acb2cb81
2024-03-27 05:56:09 +00:00

127 lines
4.7 KiB
Python

# Copyright 2013 OpenStack Foundation
# Copyright 2013 Rackspace Hosting
# Copyright 2013 Hewlett-Packard Development Company, L.P.
# 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.
#
from trove.common.views import create_links
from trove.common import wsgi
class DatastoreView(object):
def __init__(self, datastore, datastore_versions, req=None):
self.datastore = datastore
self.datastore_versions = datastore_versions
self.req = req
def data(self):
datastore_dict = {
"id": self.datastore.id,
"name": self.datastore.name,
"links": self._build_links(),
}
datastore_dict.update(DatastoreVersionsView(self.datastore_versions,
self.req).data(False))
default_version = self.datastore.default_version_id
if default_version:
datastore_dict["default_version"] = default_version
return {"datastore": datastore_dict}
def _build_links(self):
return create_links("datastores", self.req,
self.datastore.id)
class DatastoresView(object):
def __init__(self, datastores, datastores_versions, req=None):
self.datastores = datastores
self.datastores_versions = datastores_versions
self.req = req
def data(self):
data = []
for datastore in self.datastores:
datastores_versions = [
datastore_version
for datastore_version in self.datastores_versions
if datastore_version.datastore_id == datastore.id]
data.append(self.data_for_datastore(datastore,
datastores_versions))
return {'datastores': data}
def data_for_datastore(self, datastore, datastore_versions):
view = DatastoreView(datastore, datastore_versions, req=self.req)
return view.data()['datastore']
class DatastoreVersionView(object):
def __init__(self, datastore_version, req=None):
self.datastore_version = datastore_version
self.req = req
self.context = req.environ[wsgi.CONTEXT_KEY]
def data(self, include_datastore_id=True):
datastore_version_dict = {
"id": self.datastore_version.id,
"name": self.datastore_version.name,
"version": self.datastore_version.version,
"links": self._build_links(),
}
if include_datastore_id:
datastore_version_dict["datastore"] = (
self.datastore_version.datastore_id)
if self.context.is_admin:
datastore_version_dict['active'] = self.datastore_version.active
datastore_version_dict['packages'] = (
self.datastore_version.packages)
datastore_version_dict['image'] = self.datastore_version.image_id
datastore_version_dict[
'registry_ext'] = self.datastore_version.registry_ext
datastore_version_dict[
'repl_strategy'] = self.datastore_version.repl_strategy
image_tags = []
if self.datastore_version.image_tags:
image_tags = self.datastore_version.image_tags.split(',')
datastore_version_dict['image_tags'] = image_tags
return {"version": datastore_version_dict}
def _build_links(self):
return create_links("datastores/versions",
self.req, self.datastore_version.id)
class DatastoreVersionsView(object):
def __init__(self, datastore_versions, req=None):
self.datastore_versions = datastore_versions
self.req = req
def data(self, include_datastore_id=True):
data = []
for datastore_version in self.datastore_versions:
data.append(self.
data_for_datastore_version(datastore_version,
include_datastore_id))
return {'versions': data}
def data_for_datastore_version(self, datastore_version,
include_datastore_id):
view = DatastoreVersionView(datastore_version, req=self.req)
return view.data(include_datastore_id)['version']