diff --git a/troveclient/osc/v1/database_clusters.py b/troveclient/osc/v1/database_clusters.py index bd73802b..eaf36ff3 100644 --- a/troveclient/osc/v1/database_clusters.py +++ b/troveclient/osc/v1/database_clusters.py @@ -18,7 +18,10 @@ from osc_lib import utils import six from troveclient.i18n import _ +from troveclient.v1.shell import _parse_extended_properties from troveclient.v1.shell import _parse_instance_options +from troveclient.v1.shell import EXT_PROPS_HELP +from troveclient.v1.shell import EXT_PROPS_METAVAR from troveclient.v1.shell import INSTANCE_HELP from troveclient.v1.shell import INSTANCE_METAVAR @@ -165,16 +168,37 @@ class CreateDatabaseCluster(command.ShowOne): help=_('Locality policy to use when creating cluster. ' 'Choose one of %(choices)s.'), ) + parser.add_argument( + '--extended-properties', + dest='extended_properties', + metavar=EXT_PROPS_METAVAR, + default=None, + help=EXT_PROPS_HELP, + ) + parser.add_argument( + '--configuration', + metavar='', + type=str, + default=None, + help=_('ID of the configuration group to attach to the cluster.'), + ) return parser def take_action(self, parsed_args): database = self.app.client_manager.database instances = _parse_instance_options(database, parsed_args.instances) - cluster = database.clusters.create(parsed_args.name, - parsed_args.datastore, - parsed_args.datastore_version, - instances=instances, - locality=parsed_args.locality) + extended_properties = {} + if parsed_args.extended_properties: + extended_properties = _parse_extended_properties( + parsed_args.extended_properties) + cluster = database.clusters.create( + parsed_args.name, + parsed_args.datastore, + parsed_args.datastore_version, + instances=instances, + locality=parsed_args.locality, + extended_properties=extended_properties, + configuration=parsed_args.configuration) cluster = set_attributes_for_print_detail(cluster) return zip(*sorted(six.iteritems(cluster))) diff --git a/troveclient/tests/osc/v1/test_database_clusters.py b/troveclient/tests/osc/v1/test_database_clusters.py index 9eb5f9ae..9c11f651 100644 --- a/troveclient/tests/osc/v1/test_database_clusters.py +++ b/troveclient/tests/osc/v1/test_database_clusters.py @@ -140,15 +140,21 @@ class TestDatabaseClusterCreate(TestClusters): 'flavor="03",volume=3'] parsed_instances = [{'flavor': '02', 'volume': 2}, {'flavor': '03', 'volume': 3}] + extended_properties = "foo_properties=foo_value" + parsed_extended_properties = {'foo_properties': 'foo_value'} mock_parse_instance_opts.return_value = parsed_instances args = ['test-name', 'vertica', '7.1', '--instance', instances[0], - '--instance', instances[1]] + '--instance', instances[1], + '--extended-properties', extended_properties, + '--configuration', 'config01'] verifylist = [ ('name', 'test-name'), ('datastore', 'vertica'), ('datastore_version', '7.1'), ('instances', instances), + ('extended_properties', extended_properties), + ('configuration', 'config01'), ] parsed_args = self.check_parser(self.cmd, args, verifylist) columns, data = self.cmd.take_action(parsed_args) @@ -156,7 +162,9 @@ class TestDatabaseClusterCreate(TestClusters): parsed_args.name, parsed_args.datastore, parsed_args.datastore_version, instances=parsed_instances, - locality=parsed_args.locality) + locality=parsed_args.locality, + extended_properties=parsed_extended_properties, + configuration=parsed_args.configuration) self.assertEqual(self.columns, columns) self.assertEqual(self.values, data) diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py index aef2529b..4f05b874 100644 --- a/troveclient/v1/shell.py +++ b/troveclient/v1/shell.py @@ -871,6 +871,11 @@ def _parse_instance_options(cs, instance_options, for_grow=False): return instances +def _parse_extended_properties(extended_properties): + return dict([(k, v) for (k, v) in [kv.strip().split("=") + for kv in extended_properties.split(",")]]) + + @utils.arg('name', metavar='', type=str, @@ -905,9 +910,8 @@ def do_cluster_create(cs, args): instances = _parse_instance_options(cs, args.instances) extended_properties = {} if args.extended_properties: - extended_properties = dict([(k, v) for (k, v) in - [kv.strip().split("=") for kv in - args.extended_properties.split(",")]]) + extended_properties = _parse_extended_properties( + args.extended_properties) cluster = cs.clusters.create(args.name, args.datastore, args.datastore_version,