Cluster Upgrade

Implements the Clusters.upgrade python API and corresponding
shell command.

Implements blueprint: bp/cluster-upgrade

Change-Id: Iedb08c99bf8eb2a0b0d09e3c1ebd11965fdfff90
This commit is contained in:
Morgan Jones 2016-08-24 14:30:19 -04:00
parent c4d9ebb66d
commit 9d3098ebaf
5 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,3 @@
features:
- Added cluster-upgrade command to upgrade all instances
in a cluster to a new datastore version.

View File

@ -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

View File

@ -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 '

View File

@ -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):

View File

@ -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,