diff options
| author | Zuul <zuul@review.openstack.org> | 2017-12-23 18:48:11 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2017-12-23 18:48:11 +0000 |
| commit | f6801f2f633f6d3cbabe30278821443ce534f835 (patch) | |
| tree | f41a41cb8515ba072f0a9dc1a1056db31e5a854f /troveclient | |
| parent | 7ab385fe157132cdf615021d76b164dd8f65f0f8 (diff) | |
| parent | 96a6059b6fc6db09a19e6134b044f997ab5419c7 (diff) | |
| download | python-troveclient-f6801f2f633f6d3cbabe30278821443ce534f835.tar.gz | |
Merge "Add cluster-create to OSC"
Diffstat (limited to 'troveclient')
| -rw-r--r-- | troveclient/osc/v1/database_clusters.py | 62 | ||||
| -rw-r--r-- | troveclient/tests/osc/v1/test_database_clusters.py | 42 |
2 files changed, 104 insertions, 0 deletions
diff --git a/troveclient/osc/v1/database_clusters.py b/troveclient/osc/v1/database_clusters.py index d75315e..459794e 100644 --- a/troveclient/osc/v1/database_clusters.py +++ b/troveclient/osc/v1/database_clusters.py @@ -18,6 +18,7 @@ from osc_lib import utils import six from troveclient.i18n import _ +from troveclient.v1.shell import _parse_instance_options def set_attributes_for_print_detail(cluster): @@ -123,3 +124,64 @@ class DeleteDatabaseCluster(command.Command): msg = (_("Failed to delete cluster %(cluster)s: %(e)s") % {'cluster': parsed_args.cluster, 'e': e}) raise exceptions.CommandError(msg) + + +class CreateDatabaseCluster(command.ShowOne): + _description = _("Creates a new database cluster.") + + def get_parser(self, prog_name): + parser = super(CreateDatabaseCluster, self).get_parser(prog_name) + parser.add_argument( + 'name', + metavar='<name>', + type=str, + help=_('Name of the cluster.'), + ) + parser.add_argument( + 'datastore', + metavar='<datastore>', + help=_('A datastore name or ID.'), + ) + parser.add_argument( + 'datastore_version', + metavar='<datastore_version>', + help=_('A datastore version name or ID.'), + ) + parser.add_argument( + '--instance', + metavar='"opt=<value>[,opt=<value> ...] "', + action='append', + dest='instances', + default=[], + help=_("Add an instance to the cluster. Specify multiple " + "times to create multiple instances. " + "Valid options are: flavor=<flavor_name_or_id>, " + "volume=<disk_size_in_GB>, volume_type=<type>, " + "nic='<net-id=<net-uuid>, v4-fixed-ip=<ip-addr>, " + "port-id=<port-uuid>>' " + "(where net-id=network_id, " + "v4-fixed-ip=IPv4r_fixed_address, port-id=port_id), " + "availability_zone=<AZ_hint_for_Nova>, " + "module=<module_name_or_id>, type=<type_of_cluster_node>, " + "related_to=<related_attribute>."), + ) + parser.add_argument( + '--locality', + metavar='<policy>', + default=None, + choices=['affinity', 'anti-affinity'], + help=_('Locality policy to use when creating cluster. ' + 'Choose one of %(choices)s.'), + ) + 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) + 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 0393b16..9c32ed9 100644 --- a/troveclient/tests/osc/v1/test_database_clusters.py +++ b/troveclient/tests/osc/v1/test_database_clusters.py @@ -18,6 +18,7 @@ from osc_lib import utils from troveclient import common from troveclient.osc.v1 import database_clusters from troveclient.tests.osc.v1 import fakes +from troveclient.v1 import shell class TestClusters(fakes.TestDatabasev1): @@ -108,3 +109,44 @@ class TestDatabaseClusterDelete(TestClusters): self.assertRaises(exceptions.CommandError, self.cmd.take_action, parsed_args) + + +class TestDatabaseClusterCreate(TestClusters): + + values = ('2015-05-02T10:37:04', 'vertica', '7.1', 'cls-1234', + 2, 'test-clstr', 'No tasks for the cluster.', + 'NONE', '2015-05-02T11:06:19') + columns = ( + 'created', + 'datastore', + 'datastore_version', + 'id', + 'instance_count', + 'name', + 'task_description', + 'task_name', + 'updated', + ) + + def setUp(self): + super(TestDatabaseClusterCreate, self).setUp() + self.cmd = database_clusters.CreateDatabaseCluster(self.app, None) + self.data = self.fake_clusters.get_clusters_cls_1234() + self.cluster_client.create.return_value = self.data + + @mock.patch.object(shell, '_parse_instance_options') + def test_cluster_create(self, mock_find): + instance = 'flavor=02,volume=2' + mock_find.return_value = instance + args = ['test-name', 'vertica', '7.1', + '--instance', instance] + verifylist = [ + ('name', 'test-name'), + ('datastore', 'vertica'), + ('datastore_version', '7.1'), + ('instances', [instance]), + ] + parsed_args = self.check_parser(self.cmd, args, verifylist) + columns, data = self.cmd.take_action(parsed_args) + self.assertEqual(self.columns, columns) + self.assertEqual(self.values, data) |
