From d371520529ea06669362ea0c1f47f1831f6be8b5 Mon Sep 17 00:00:00 2001 From: Hirotaka Wakabayashi Date: Sun, 28 Jun 2020 02:18:53 +0000 Subject: [PATCH] Enables to select a flavor works for a database The list of flavors doesn't appear when creating a database instance, but users should be able to select a flavor when they create a database instance because they need to obtain a flavor that works for a database. In addition, they can select a flavor in creating a database instance when using openstack cli. Change-Id: I0e738807490a94d8bb476e97de168e4298177c2a Story: 2007842 Task: 40132 --- trove_dashboard/api/trove.py | 40 +++++++++++++++----- trove_dashboard/test/test_data/trove_data.py | 8 ++-- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/trove_dashboard/api/trove.py b/trove_dashboard/api/trove.py index b5835b0..83208de 100644 --- a/trove_dashboard/api/trove.py +++ b/trove_dashboard/api/trove.py @@ -21,6 +21,17 @@ from oslo_log import log as logging from horizon.utils import functions as utils from horizon.utils.memoized import memoized # noqa +from keystoneauth1 import loading +from keystoneauth1 import session +from novaclient import client as nova_client + +# Supported compute versions +NOVA_VERSIONS = base.APIVersionManager("compute", preferred_version=2) +NOVA_VERSIONS.load_supported_version(1.1, + {"client": nova_client, "version": 1.1}) +NOVA_VERSIONS.load_supported_version(2, {"client": nova_client, "version": 2}) +NOVA_VERSION = NOVA_VERSIONS.get_active_version()['version'] + LOG = logging.getLogger(__name__) @@ -240,25 +251,34 @@ def backup_create(request, name, instance_id, description=None, description, parent_id) +def nova_client_client(request): + insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) + cacert = getattr(settings, 'OPENSTACK_SSL_CACERT', None) + identity_url = base.url_for(request, 'identity') + loader = loading.get_plugin_loader('token') + auth = loader.load_from_options(auth_url=identity_url, + token=request.user.token.id, + tenant_id=request.user.project_id) + sess = session.Session(auth=auth) + nova = nova_client.Client(NOVA_VERSION, + session=sess, + insecure=insecure, + cacert=cacert, + http_log_debug=settings.DEBUG) + return nova + + def flavor_list(request): - return troveclient(request).flavors.list() + return nova_client_client(request).flavors.list() def datastore_flavors(request, datastore_name=None, datastore_version=None): - # if datastore info is available then get datastore specific flavors - if datastore_name and datastore_version: - try: - return troveclient(request).flavors.\ - list_datastore_version_associated_flavors(datastore_name, - datastore_version) - except Exception: - LOG.warning("Failed to retrieve datastore specific flavors") return flavor_list(request) def flavor_get(request, flavor_id): - return troveclient(request).flavors.get(flavor_id) + return nova_client_client(request).flavors.get(flavor_id) def root_enable(request, instance_ids): diff --git a/trove_dashboard/test/test_data/trove_data.py b/trove_dashboard/test/test_data/trove_data.py index 1f0a4f6..34ef388 100644 --- a/trove_dashboard/test/test_data/trove_data.py +++ b/trove_dashboard/test/test_data/trove_data.py @@ -13,12 +13,12 @@ # License for the specific language governing permissions and limitations # under the License. +from novaclient.v2 import flavors from troveclient.v1 import backups from troveclient.v1 import clusters from troveclient.v1 import configurations from troveclient.v1 import databases from troveclient.v1 import datastores -from troveclient.v1 import flavors from troveclient.v1 import instances from troveclient.v1 import users @@ -527,9 +527,9 @@ def data(TEST): DatastoreVersion(datastores.DatastoreVersions(None), VERSION_TWO) - flavor1 = flavors.Flavor(flavors.Flavors(None), FLAVOR_ONE) - flavor2 = flavors.Flavor(flavors.Flavors(None), FLAVOR_TWO) - flavor3 = flavors.Flavor(flavors.Flavors(None), FLAVOR_THREE) + flavor1 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_ONE) + flavor2 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_TWO) + flavor3 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_THREE) datastore_mongodb = datastores.Datastore(datastores.Datastores(None), DATASTORE_MONGODB) version_mongodb_2_6 = datastores.\