summaryrefslogtreecommitdiff
path: root/troveclient
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2017-12-23 18:48:11 +0000
committerGerrit Code Review <review@openstack.org>2017-12-23 18:48:11 +0000
commitf6801f2f633f6d3cbabe30278821443ce534f835 (patch)
treef41a41cb8515ba072f0a9dc1a1056db31e5a854f /troveclient
parent7ab385fe157132cdf615021d76b164dd8f65f0f8 (diff)
parent96a6059b6fc6db09a19e6134b044f997ab5419c7 (diff)
downloadpython-troveclient-f6801f2f633f6d3cbabe30278821443ce534f835.tar.gz
Merge "Add cluster-create to OSC"
Diffstat (limited to 'troveclient')
-rw-r--r--troveclient/osc/v1/database_clusters.py62
-rw-r--r--troveclient/tests/osc/v1/test_database_clusters.py42
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)