Merge "Add Datastore Version Registry Extension"

This commit is contained in:
Zuul 2024-03-28 11:17:29 +00:00 committed by Gerrit Code Review
commit 2ab986a473
4 changed files with 59 additions and 10 deletions

View File

@ -194,6 +194,20 @@ class CreateDatastoreVersion(command.Command):
help=_('ID of the datastore image in Glance. This can be empty '
'string if --image-tags is specified.'),
)
parser.add_argument(
'--registry-ext',
help=_('Extension for default datastore managers. '
'Allows the use of custom managers for each of '
'the datastores supported by Trove.'
'This can be empty string.'),
)
parser.add_argument(
'--repl-strategy',
help=_('Extension for default strategy for replication. '
'Allows the use of custom replication strategy '
'for each of the datastores supported by Trove.'
'This can be empty string.'),
)
parser.add_argument(
'--active',
action='store_true',
@ -229,6 +243,8 @@ class CreateDatastoreVersion(command.Command):
parsed_args.datastore_manager,
parsed_args.image_id,
image_tags=image_tags,
registry_ext=parsed_args.registry_ext,
repl_strategy=parsed_args.repl_strategy,
active='true' if parsed_args.active else 'false',
default='true' if parsed_args.default else 'false',
version=parsed_args.version_number
@ -263,6 +279,20 @@ class UpdateDatastoreVersion(command.Command):
default=None,
help=_('List of image tags separated by comma, e.g. trove,mysql'),
)
parser.add_argument(
'--registry-ext',
help=_('Extension for default datastore managers. '
'Allows the use of custom managers for each of '
'the datastores supported by Trove.'
'This can be empty string.'),
)
parser.add_argument(
'--repl-strategy',
help=_('Extension for default strategy for replication. '
'Allows the use of custom replication strategy '
'for each of the datastores supported by Trove.'
'This can be empty string.'),
)
parser.add_argument(
'--version-name',
help=_('New datastore version name.'),
@ -303,6 +333,8 @@ class UpdateDatastoreVersion(command.Command):
datastore_manager=parsed_args.datastore_manager,
image=parsed_args.image,
image_tags=image_tags,
registry_ext=parsed_args.registry_ext,
repl_strategy=parsed_args.repl_strategy,
active=parsed_args.enable, default=parsed_args.default,
name=parsed_args.version_name
)

View File

@ -166,7 +166,9 @@ class TestCreateDatastoreVersion(TestDatastores):
def test_create_datastore_version(self):
image_id = uuidutils.generate_uuid()
args = ['new_name', 'ds_name', 'ds_manager', image_id, '--active',
'--default', '--image-tags', 'trove,mysql']
'--default', '--image-tags', 'trove,mysql',
'--registry-ext', 'registry-ext',
'--repl-strategy', 'repl_strategy']
parsed_args = self.check_parser(self.cmd, args, [])
self.cmd.take_action(parsed_args)
@ -174,7 +176,8 @@ class TestCreateDatastoreVersion(TestDatastores):
self.dsversion_mgmt_client.create.assert_called_once_with(
'new_name', 'ds_name', 'ds_manager', image_id, active='true',
default='true', image_tags=['trove', 'mysql'],
version=None)
registry_ext="registry-ext",
repl_strategy="repl_strategy", version=None)
class TestUpdateDatastoreVersion(TestDatastores):
@ -184,8 +187,9 @@ class TestUpdateDatastoreVersion(TestDatastores):
def test_update_datastore_version(self):
version_id = uuidutils.generate_uuid()
args = [version_id, '--image-tags', 'trove,mysql', '--enable',
'--non-default']
args = [version_id, '--registry-ext', 'registry-ext',
'--repl-strategy', 'repl_strategy',
'--image-tags', 'trove,mysql', '--enable', '--non-default']
parsed_args = self.check_parser(self.cmd, args, [])
self.cmd.take_action(parsed_args)
@ -193,4 +197,5 @@ class TestUpdateDatastoreVersion(TestDatastores):
self.dsversion_mgmt_client.edit.assert_called_once_with(
version_id, datastore_manager=None, image=None,
active='true', default='false', image_tags=['trove', 'mysql'],
name=None)
registry_ext="registry-ext",
repl_strategy="repl_strategy", name=None)

View File

@ -235,12 +235,15 @@ class MgmtDatastoreVersionsTest(testtools.TestCase):
self.ds_version._create = mock.Mock(side_effect=side_effect_func)
p, b, = self.ds_version.create(
"ds-version1", "mysql", "mysql", "image-id",
["mysql-server-5.5"], "true", "true")
["mysql-server-5.5"], "registry-ext",
"repl-strategy", "true", "true")
self.assertEqual("/mgmt/datastore-versions", p)
self.assertEqual("ds-version1", b["version"]["name"])
self.assertEqual("mysql", b["version"]["datastore_name"])
self.assertEqual("mysql", b["version"]["datastore_manager"])
self.assertEqual("image-id", b["version"]["image"])
self.assertEqual("registry-ext", b["version"]["registry_ext"])
self.assertEqual("repl-strategy", b["version"]["repl_strategy"])
self.assertEqual(["mysql-server-5.5"], b["version"]["packages"])
self.assertTrue(b["version"]["active"])
self.assertTrue(b["version"]["default"])

View File

@ -268,8 +268,8 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
"version")
def create(self, name, datastore_name, datastore_manager, image,
packages=None, active='true', default='false', image_tags=[],
version=None):
packages=None, registry_ext=None, repl_strategy=None,
active='true', default='false', image_tags=[], version=None):
"""Create a new datastore version."""
packages = packages or []
body = {
@ -285,14 +285,19 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
}
if image:
body['version']['image'] = image
if registry_ext:
body['version']['registry_ext'] = registry_ext
if repl_strategy:
body['version']['repl_strategy'] = repl_strategy
if version:
body['version']['version'] = version
return self._create("/mgmt/datastore-versions", body, None, True)
def edit(self, datastore_version_id, datastore_manager=None, image=None,
packages=None, active=None, default=None, image_tags=None,
name=None):
packages=None, registry_ext=None, repl_strategy=None,
active=None, default=None, image_tags=None, name=None):
"""Update a datastore-version."""
packages = packages or []
body = {}
@ -302,6 +307,10 @@ class MgmtDatastoreVersions(base.ManagerWithFind):
body['image'] = image
if packages:
body['packages'] = packages
if registry_ext:
body['registry_ext'] = registry_ext
if repl_strategy:
body['repl_strategy'] = repl_strategy
if active is not None:
body['active'] = json.loads(active)
if default is not None: