Datastores improvements
Improvements for client: - added datastore field in instances list - fixed datastore and version fields in instance show output - fixed mistakes in help texts - add possibility to retrieve version by uuid (without specified datastore) Implements: blueprint datastore-type-version-followon Change-Id: Id41da29ce9732823bc4696301953e9cf8cdc82f5
This commit is contained in:
parent
36a84d3013
commit
c6a54f7e1c
|
@ -127,3 +127,13 @@ class DatastoreVersionsTest(testtools.TestCase):
|
|||
'version'),
|
||||
self.datastore_versions.get("datastore1",
|
||||
"datastore_version1"))
|
||||
|
||||
def test_get_by_uuid(self):
|
||||
def side_effect_func(path, inst):
|
||||
return path, inst
|
||||
|
||||
self.datastore_versions._get = mock.Mock(side_effect=side_effect_func)
|
||||
self.assertEqual(('/datastores/versions/datastore_version1',
|
||||
'version'),
|
||||
(self.datastore_versions.
|
||||
get_by_uuid("datastore_version1")))
|
||||
|
|
|
@ -259,3 +259,16 @@ def slugify(value):
|
|||
Make use strutils.to_slug from openstack common
|
||||
"""
|
||||
return strutils.to_slug(value, incoming=None, errors="strict")
|
||||
|
||||
|
||||
def is_uuid_like(val):
|
||||
"""Returns validation of a value as a UUID.
|
||||
|
||||
For our purposes, a UUID is a canonical form string:
|
||||
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
|
||||
|
||||
"""
|
||||
try:
|
||||
return str(uuid.UUID(val)) == val
|
||||
except (TypeError, ValueError, AttributeError):
|
||||
return False
|
||||
|
|
|
@ -85,3 +85,12 @@ class DatastoreVersions(base.ManagerWithFind):
|
|||
return self._get("/datastores/%s/versions/%s" %
|
||||
(datastore, base.getid(datastore_version)),
|
||||
"version")
|
||||
|
||||
def get_by_uuid(self, datastore_version):
|
||||
"""
|
||||
Get a specific datastore version.
|
||||
:rtype: :class:`DatastoreVersion`
|
||||
"""
|
||||
return self._get("/datastores/versions/%s" %
|
||||
base.getid(datastore_version),
|
||||
"version")
|
||||
|
|
|
@ -21,6 +21,7 @@ from __future__ import print_function
|
|||
import sys
|
||||
import time
|
||||
|
||||
from troveclient import exceptions
|
||||
from troveclient import utils
|
||||
|
||||
|
||||
|
@ -106,7 +107,10 @@ def do_list(cs, args):
|
|||
setattr(instance, 'flavor_id', instance.flavor['id'])
|
||||
if hasattr(instance, 'volume'):
|
||||
setattr(instance, 'size', instance.volume['size'])
|
||||
utils.print_list(instances, ['id', 'name', 'status', 'flavor_id', 'size'])
|
||||
if hasattr(instance, 'datastore'):
|
||||
setattr(instance, 'datastore', instance.datastore['type'])
|
||||
utils.print_list(instances, ['id', 'name', 'datastore', 'status',
|
||||
'flavor_id', 'size'])
|
||||
|
||||
|
||||
@utils.arg('instance', metavar='<instance>', help='ID of the instance.')
|
||||
|
@ -190,6 +194,9 @@ def do_create(cs, args):
|
|||
instance._info['flavor'] = instance.flavor['id']
|
||||
if hasattr(instance, 'volume'):
|
||||
instance._info['volume'] = instance.volume['size']
|
||||
if hasattr(instance, 'datastore'):
|
||||
instance._info['datastore'] = instance.datastore['type']
|
||||
instance._info['datastore_version'] = instance.datastore['version']
|
||||
del(instance._info['links'])
|
||||
|
||||
_print_instance(instance)
|
||||
|
@ -542,7 +549,7 @@ def do_secgroup_delete_rule(cs, args):
|
|||
|
||||
@utils.service_type('database')
|
||||
def do_datastore_list(cs, args):
|
||||
"""List all the datastores."""
|
||||
"""List available datastores."""
|
||||
datastores = cs.datastores.list()
|
||||
utils.print_list(datastores, ['id', 'name'])
|
||||
|
||||
|
@ -553,6 +560,9 @@ def do_datastore_list(cs, args):
|
|||
def do_datastore_show(cs, args):
|
||||
"""Show details of a datastore."""
|
||||
datastore = cs.datastores.get(args.datastore)
|
||||
if hasattr(datastore, 'default_version'):
|
||||
datastore._info['default_version'] = getattr(datastore,
|
||||
'default_version')
|
||||
_print_instance(datastore)
|
||||
|
||||
|
||||
|
@ -560,18 +570,28 @@ def do_datastore_show(cs, args):
|
|||
help='ID of the datastore.')
|
||||
@utils.service_type('database')
|
||||
def do_datastore_version_list(cs, args):
|
||||
"""List all the datastore versions."""
|
||||
"""List available versions for a datastore."""
|
||||
datastore_versions = cs.datastore_versions.list(args.datastore)
|
||||
utils.print_list(datastore_versions, ['id', 'name'])
|
||||
|
||||
|
||||
@utils.arg('datastore', metavar='<datastore>',
|
||||
help='ID of the datastore.')
|
||||
@utils.arg('--datastore', metavar='<datastore>',
|
||||
default=None,
|
||||
help='ID or name of the datastore. Optional if UUID of the'
|
||||
' datastore_version is provided.')
|
||||
@utils.arg('datastore_version', metavar='<datastore_version>',
|
||||
help='ID of the datastore version.')
|
||||
@utils.service_type('database')
|
||||
def do_datastore_version_show(cs, args):
|
||||
"""Show details of a datastore version."""
|
||||
datastore_version = cs.datastore_versions.get(args.datastore,
|
||||
args.datastore_version)
|
||||
if args.datastore:
|
||||
datastore_version = cs.datastore_versions.get(args.datastore,
|
||||
args.datastore_version)
|
||||
elif utils.is_uuid_like(args.datastore_version):
|
||||
datastore_version = cs.datastore_versions.get_by_uuid(
|
||||
args.datastore_version)
|
||||
else:
|
||||
raise exceptions.NoUniqueMatch('The datastore name or id is required'
|
||||
' to retrieve a datastore version'
|
||||
' by name.')
|
||||
_print_instance(datastore_version)
|
||||
|
|
Loading…
Reference in New Issue