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
This commit is contained in:
Hirotaka Wakabayashi 2020-06-28 02:18:53 +00:00
parent 60a19b2c95
commit d371520529
2 changed files with 34 additions and 14 deletions

View File

@ -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):

View File

@ -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.\