summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--releasenotes/notes/cluster-upgrade-d58d1fc4b8da0a03.yaml3
-rw-r--r--troveclient/tests/test_clusters.py10
-rw-r--r--troveclient/tests/test_v1_shell.py5
-rw-r--r--troveclient/v1/clusters.py9
-rw-r--r--troveclient/v1/shell.py12
5 files changed, 39 insertions, 0 deletions
diff --git a/releasenotes/notes/cluster-upgrade-d58d1fc4b8da0a03.yaml b/releasenotes/notes/cluster-upgrade-d58d1fc4b8da0a03.yaml
new file mode 100644
index 0000000..9d672cd
--- /dev/null
+++ b/releasenotes/notes/cluster-upgrade-d58d1fc4b8da0a03.yaml
@@ -0,0 +1,3 @@
+features:
+ - Added cluster-upgrade command to upgrade all instances
+ in a cluster to a new datastore version.
diff --git a/troveclient/tests/test_clusters.py b/troveclient/tests/test_clusters.py
index 0ccda05..710b3c1 100644
--- a/troveclient/tests/test_clusters.py
+++ b/troveclient/tests/test_clusters.py
@@ -102,6 +102,16 @@ class ClustersTest(testtools.TestCase):
self.assertEqual(('/clusters/cluster1', 'cluster'),
clusters_test.get(1))
+ def test_upgrade(self):
+ resp = mock.Mock()
+ resp.status_code = 200
+ body = None
+ clusters_test = self.get_clusters()
+ clusters_test.api.client.post = mock.Mock(return_value=(resp, body))
+ clusters_test.upgrade('cluster1', '5.6')
+ resp.status_code = 500
+ self.assertRaises(Exception, clusters_test.upgrade, 'cluster1', '5.6')
+
def test_delete(self):
resp = mock.Mock()
resp.status_code = 200
diff --git a/troveclient/tests/test_v1_shell.py b/troveclient/tests/test_v1_shell.py
index 58c9d4c..0e55947 100644
--- a/troveclient/tests/test_v1_shell.py
+++ b/troveclient/tests/test_v1_shell.py
@@ -474,6 +474,11 @@ class ShellTest(utils.TestCase):
self.run_command(cmd)
self.assert_called('POST', '/clusters/cls-1234')
+ def test_cluster_upgrade(self):
+ cmd = ('cluster-upgrade cls-1234 1234')
+ self.run_command(cmd)
+ self.assert_called('POST', '/clusters/cls-1234')
+
def test_cluster_create_with_locality(self):
cmd = ('cluster-create test-clstr2 redis 3.0 --locality=affinity '
'--instance flavor=2,volume=1 '
diff --git a/troveclient/v1/clusters.py b/troveclient/v1/clusters.py
index 451bfe8..b7e5ddd 100644
--- a/troveclient/v1/clusters.py
+++ b/troveclient/v1/clusters.py
@@ -126,6 +126,15 @@ class Clusters(base.ManagerWithFind):
body = {"shrink": instances}
return self._action(cluster, body)
+ def upgrade(self, cluster, datastore_version):
+ """Upgrades a cluster to a new datastore version.
+
+ :param cluster: The cluster to upgrade
+ :param datastore_version: Datastore version to which to upgrade
+ """
+ body = {"upgrade": {'datastore_version': datastore_version}}
+ return self._action(cluster, body)
+
class ClusterStatus(object):
diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py
index 86eae0e..a0058f6 100644
--- a/troveclient/v1/shell.py
+++ b/troveclient/v1/shell.py
@@ -414,6 +414,18 @@ def do_cluster_reset_status(cs, args):
cs.clusters.reset_status(cluster)
+@utils.arg('cluster', metavar='<cluster>',
+ help=_('ID or name of the cluster.'))
+@utils.arg('datastore_version',
+ metavar='<datastore_version>',
+ help=_('A datastore version name or ID.'))
+@utils.service_type('database')
+def do_cluster_upgrade(cs, args):
+ """Upgrades a cluster to a new datastore version."""
+ cluster = _find_cluster(cs, args.cluster)
+ cs.clusters.upgrade(cluster, args.datastore_version)
+
+
@utils.arg('instance',
metavar='<instance>',
type=str,