Skip to content

Commit e32a0b0

Browse files
committed
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: #48536 Change-Id: I7ee47dd1bb6e52991f0e0028a01e81252a1718c3
1 parent 0415e4b commit e32a0b0

4 files changed

Lines changed: 59 additions & 10 deletions

File tree

troveclient/osc/v1/datastores.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,20 @@ def get_parser(self, prog_name):
194194
help=_('ID of the datastore image in Glance. This can be empty '
195195
'string if --image-tags is specified.'),
196196
)
197+
parser.add_argument(
198+
'--registry-ext',
199+
help=_('Extension for default datastore managers. '
200+
'Allows the use of custom managers for each of '
201+
'the datastores supported by Trove.'
202+
'This can be empty string.'),
203+
)
204+
parser.add_argument(
205+
'--repl-strategy',
206+
help=_('Extension for default strategy for replication. '
207+
'Allows the use of custom replication strategy '
208+
'for each of the datastores supported by Trove.'
209+
'This can be empty string.'),
210+
)
197211
parser.add_argument(
198212
'--active',
199213
action='store_true',
@@ -229,6 +243,8 @@ def take_action(self, parsed_args):
229243
parsed_args.datastore_manager,
230244
parsed_args.image_id,
231245
image_tags=image_tags,
246+
registry_ext=parsed_args.registry_ext,
247+
repl_strategy=parsed_args.repl_strategy,
232248
active='true' if parsed_args.active else 'false',
233249
default='true' if parsed_args.default else 'false',
234250
version=parsed_args.version_number
@@ -263,6 +279,20 @@ def get_parser(self, prog_name):
263279
default=None,
264280
help=_('List of image tags separated by comma, e.g. trove,mysql'),
265281
)
282+
parser.add_argument(
283+
'--registry-ext',
284+
help=_('Extension for default datastore managers. '
285+
'Allows the use of custom managers for each of '
286+
'the datastores supported by Trove.'
287+
'This can be empty string.'),
288+
)
289+
parser.add_argument(
290+
'--repl-strategy',
291+
help=_('Extension for default strategy for replication. '
292+
'Allows the use of custom replication strategy '
293+
'for each of the datastores supported by Trove.'
294+
'This can be empty string.'),
295+
)
266296
parser.add_argument(
267297
'--version-name',
268298
help=_('New datastore version name.'),
@@ -303,6 +333,8 @@ def take_action(self, parsed_args):
303333
datastore_manager=parsed_args.datastore_manager,
304334
image=parsed_args.image,
305335
image_tags=image_tags,
336+
registry_ext=parsed_args.registry_ext,
337+
repl_strategy=parsed_args.repl_strategy,
306338
active=parsed_args.enable, default=parsed_args.default,
307339
name=parsed_args.version_name
308340
)

troveclient/tests/osc/v1/test_datastores.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,18 @@ def setUp(self):
166166
def test_create_datastore_version(self):
167167
image_id = uuidutils.generate_uuid()
168168
args = ['new_name', 'ds_name', 'ds_manager', image_id, '--active',
169-
'--default', '--image-tags', 'trove,mysql']
169+
'--default', '--image-tags', 'trove,mysql',
170+
'--registry-ext', 'registry-ext',
171+
'--repl-strategy', 'repl_strategy']
170172
parsed_args = self.check_parser(self.cmd, args, [])
171173

172174
self.cmd.take_action(parsed_args)
173175

174176
self.dsversion_mgmt_client.create.assert_called_once_with(
175177
'new_name', 'ds_name', 'ds_manager', image_id, active='true',
176178
default='true', image_tags=['trove', 'mysql'],
177-
version=None)
179+
registry_ext="registry-ext",
180+
repl_strategy="repl_strategy", version=None)
178181

179182

180183
class TestUpdateDatastoreVersion(TestDatastores):
@@ -184,13 +187,15 @@ def setUp(self):
184187

185188
def test_update_datastore_version(self):
186189
version_id = uuidutils.generate_uuid()
187-
args = [version_id, '--image-tags', 'trove,mysql', '--enable',
188-
'--non-default']
190+
args = [version_id, '--registry-ext', 'registry-ext',
191+
'--repl-strategy', 'repl_strategy',
192+
'--image-tags', 'trove,mysql', '--enable', '--non-default']
189193
parsed_args = self.check_parser(self.cmd, args, [])
190194

191195
self.cmd.take_action(parsed_args)
192196

193197
self.dsversion_mgmt_client.edit.assert_called_once_with(
194198
version_id, datastore_manager=None, image=None,
195199
active='true', default='false', image_tags=['trove', 'mysql'],
196-
name=None)
200+
registry_ext="registry-ext",
201+
repl_strategy="repl_strategy", name=None)

troveclient/tests/test_management.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,15 @@ def side_effect_func(path, body, *kw):
235235
self.ds_version._create = mock.Mock(side_effect=side_effect_func)
236236
p, b, = self.ds_version.create(
237237
"ds-version1", "mysql", "mysql", "image-id",
238-
["mysql-server-5.5"], "true", "true")
238+
["mysql-server-5.5"], "registry-ext",
239+
"repl-strategy", "true", "true")
239240
self.assertEqual("/mgmt/datastore-versions", p)
240241
self.assertEqual("ds-version1", b["version"]["name"])
241242
self.assertEqual("mysql", b["version"]["datastore_name"])
242243
self.assertEqual("mysql", b["version"]["datastore_manager"])
243244
self.assertEqual("image-id", b["version"]["image"])
245+
self.assertEqual("registry-ext", b["version"]["registry_ext"])
246+
self.assertEqual("repl-strategy", b["version"]["repl_strategy"])
244247
self.assertEqual(["mysql-server-5.5"], b["version"]["packages"])
245248
self.assertTrue(b["version"]["active"])
246249
self.assertTrue(b["version"]["default"])

troveclient/v1/management.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ def get(self, datastore_version_id):
268268
"version")
269269

270270
def create(self, name, datastore_name, datastore_manager, image,
271-
packages=None, active='true', default='false', image_tags=[],
272-
version=None):
271+
packages=None, registry_ext=None, repl_strategy=None,
272+
active='true', default='false', image_tags=[], version=None):
273273
"""Create a new datastore version."""
274274
packages = packages or []
275275
body = {
@@ -285,14 +285,19 @@ def create(self, name, datastore_name, datastore_manager, image,
285285
}
286286
if image:
287287
body['version']['image'] = image
288+
289+
if registry_ext:
290+
body['version']['registry_ext'] = registry_ext
291+
if repl_strategy:
292+
body['version']['repl_strategy'] = repl_strategy
288293
if version:
289294
body['version']['version'] = version
290295

291296
return self._create("/mgmt/datastore-versions", body, None, True)
292297

293298
def edit(self, datastore_version_id, datastore_manager=None, image=None,
294-
packages=None, active=None, default=None, image_tags=None,
295-
name=None):
299+
packages=None, registry_ext=None, repl_strategy=None,
300+
active=None, default=None, image_tags=None, name=None):
296301
"""Update a datastore-version."""
297302
packages = packages or []
298303
body = {}
@@ -302,6 +307,10 @@ def edit(self, datastore_version_id, datastore_manager=None, image=None,
302307
body['image'] = image
303308
if packages:
304309
body['packages'] = packages
310+
if registry_ext:
311+
body['registry_ext'] = registry_ext
312+
if repl_strategy:
313+
body['repl_strategy'] = repl_strategy
305314
if active is not None:
306315
body['active'] = json.loads(active)
307316
if default is not None:

0 commit comments

Comments
 (0)