diff options
| -rw-r--r-- | releasenotes/notes/cluster-upgrade-d58d1fc4b8da0a03.yaml | 3 | ||||
| -rw-r--r-- | troveclient/tests/test_clusters.py | 10 | ||||
| -rw-r--r-- | troveclient/tests/test_v1_shell.py | 5 | ||||
| -rw-r--r-- | troveclient/v1/clusters.py | 9 | ||||
| -rw-r--r-- | troveclient/v1/shell.py | 12 |
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, |
