summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Pavlov <apavlov@mirantis.com>2016-02-26 16:13:36 +0300
committerAndrey Pavlov <apavlov@mirantis.com>2016-02-26 16:21:53 +0300
commitf6701f057eea9d6b609a6168a52e1a45afe909e2 (patch)
treec33806155e30f1b39c46cd2a69e2ac3a71f8c654
parent0458a7691bdf57a569effef9043cdb2853900423 (diff)
downloadpython-saharaclient-f6701f057eea9d6b609a6168a52e1a45afe909e2.tar.gz
Adding "health verification --show" CLI call
* Health verification for cluster can be shown with "dataprocessing cluster verification CLUSTER --show" command * changing output for "dataprocessing cluster verification CLUSTER --start" command * adding unit tests for cluster verifications Partially-implements bp: cluster-verification Change-Id: If095845f04e8df38d5cc083d2b5e17ac630515cb
-rw-r--r--saharaclient/osc/v1/clusters.py56
-rw-r--r--saharaclient/tests/unit/osc/v1/test_clusters.py84
2 files changed, 116 insertions, 24 deletions
diff --git a/saharaclient/osc/v1/clusters.py b/saharaclient/osc/v1/clusters.py
index 56ebab3..1602e14 100644
--- a/saharaclient/osc/v1/clusters.py
+++ b/saharaclient/osc/v1/clusters.py
@@ -45,14 +45,15 @@ def _format_cluster_output(data):
def _prepare_health_checks(data):
+ additional_data = {}
ver = data.get('verification', {})
additional_fields = ['verification_status']
- data['verification_status'] = ver.get('status', 'UNKNOWN')
+ additional_data['verification_status'] = ver.get('status', 'UNKNOWN')
for check in ver.get('checks', []):
row_name = "Health check (%s)" % check['name']
- data[row_name] = check['status']
+ additional_data[row_name] = check['status']
additional_fields.append(row_name)
- return data, additional_fields
+ return additional_data, additional_fields
def _get_plugin_version(cluster_template, client):
@@ -323,7 +324,8 @@ class ShowCluster(show.ShowOne):
_format_cluster_output(data)
fields = []
if parsed_args.verification:
- data, fields = _prepare_health_checks(data)
+ ver_data, fields = _prepare_health_checks(data)
+ data.update(ver_data)
fields.extend(CLUSTER_FIELDS)
data = utils.prepare_data(data, fields)
@@ -581,12 +583,18 @@ class VerificationUpdateCluster(show.ShowOne):
metavar="<cluster>",
help="Name or ID of the cluster",
)
- status = parser.add_mutually_exclusive_group()
+ status = parser.add_mutually_exclusive_group(required=True)
status.add_argument(
'--start',
- action='store_true',
- help='Start the cluster verification',
- dest='is_start'
+ action='store_const',
+ const='START',
+ help='Start health verification for the cluster',
+ dest='status'
+ )
+ status.add_argument(
+ '--show',
+ help='Show health of the cluster',
+ action='store_true'
)
return parser
@@ -594,20 +602,22 @@ class VerificationUpdateCluster(show.ShowOne):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.data_processing
- cluster_id = utils.get_resource_id(
- client.clusters, parsed_args.cluster)
-
- if parsed_args.is_start:
- status = 'START'
+ if parsed_args.show:
+ data = utils.get_resource(
+ client.clusters, parsed_args.cluster).to_dict()
+ ver_data, ver_fields = _prepare_health_checks(data)
+ data = utils.prepare_data(ver_data, ver_fields)
+ return self.dict2columns(data)
else:
- raise exceptions.CommandError("--start should be provided")
- data = client.clusters.verification_update(
- cluster_id, status).cluster
-
- data, fields = _prepare_health_checks(data)
- fields.extend(CLUSTER_FIELDS)
-
- _format_cluster_output(data)
- data = utils.prepare_data(data, fields)
+ cluster_id = utils.get_resource_id(
+ client.clusters, parsed_args.cluster)
+ client.clusters.verification_update(
+ cluster_id, parsed_args.status)
+ if parsed_args.status == 'START':
+ print_status = 'started'
+ sys.stdout.write(
+ 'Cluster "{cluster}" health verification has been '
+ '{status}.'.format(cluster=parsed_args.cluster,
+ status=print_status))
- return self.dict2columns(data)
+ return {}, {}
diff --git a/saharaclient/tests/unit/osc/v1/test_clusters.py b/saharaclient/tests/unit/osc/v1/test_clusters.py
index b7f6a6a..ba48993 100644
--- a/saharaclient/tests/unit/osc/v1/test_clusters.py
+++ b/saharaclient/tests/unit/osc/v1/test_clusters.py
@@ -50,7 +50,18 @@ CLUSTER_INFO = {
"neutron_management_network": "net_id",
"user_keypair_id": "test",
"status": 'Active',
- "default_image_id": "img_id"
+ "default_image_id": "img_id",
+ 'verification': {
+ 'status': 'GREEN',
+ 'id': 'ver_id',
+ 'cluster_id': 'cluster_id',
+ 'checks': [
+ {
+ 'status': 'GREEN',
+ 'name': 'Some check'
+ }
+ ]
+ }
}
CT_INFO = {
@@ -287,6 +298,34 @@ class TestShowCluster(TestClusters):
'0.1')
self.assertEqual(expected_data, data)
+ def test_cluster_show_verification(self):
+ arglist = ['fake', '--verification']
+ verifylist = [('cluster', 'fake'), ('verification', True)]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Check that correct arguments were passed
+ self.cl_mock.find_unique.assert_called_once_with(name='fake')
+
+ # Check that columns are correct
+ expected_columns = ('Anti affinity', 'Cluster template id',
+ 'Description', 'Health check (some check)', 'Id',
+ 'Image', 'Is protected', 'Is public', 'Name',
+ 'Neutron management network', 'Node groups',
+ 'Plugin name', 'Status', 'Use autoconfig',
+ 'User keypair id', 'Verification status',
+ 'Version')
+ self.assertEqual(expected_columns, columns)
+
+ # Check that data is correct
+ expected_data = ('', 'ct_id', 'Cluster template for tests', 'GREEN',
+ 'cluster_id', 'img_id', False, False, 'fake',
+ 'net_id', 'fakeng:2', 'fake', 'Active', True, 'test',
+ 'GREEN', '0.1')
+ self.assertEqual(expected_data, data)
+
class TestDeleteCluster(TestClusters):
def setUp(self):
@@ -464,3 +503,46 @@ class TestScaleCluster(TestClusters):
'node_group_template_id': 'new_id',
'name': 'new'}
]})
+
+
+class TestVerificationUpdateCluster(TestClusters):
+ def setUp(self):
+ super(TestVerificationUpdateCluster, self).setUp()
+ self.cl_mock.find_unique.return_value = api_cl.Cluster(
+ None, CLUSTER_INFO)
+ self.cl_mock.verification_update.return_value = api_cl.Cluster(
+ None, CLUSTER_INFO)
+
+ # Command to test
+ self.cmd = osc_cl.VerificationUpdateCluster(self.app, None)
+
+ def test_verification_show(self):
+ arglist = ['fake', '--show']
+ verifylist = [('cluster', 'fake'), ('show', True)]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ # Check that correct arguments were passed
+ self.cl_mock.find_unique.assert_called_once_with(name='fake')
+
+ # Check that columns are correct
+ expected_columns = ('Health check (some check)', 'Verification status')
+ self.assertEqual(expected_columns, columns)
+
+ # Check that data is correct
+ expected_data = ('GREEN', 'GREEN')
+ self.assertEqual(expected_data, data)
+
+ def test_verification_start(self):
+ arglist = ['fake', '--start']
+ verifylist = [('cluster', 'fake'), ('status', 'START')]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ # Check that correct arguments were passed
+ self.cl_mock.verification_update.assert_called_once_with(
+ 'cluster_id', 'START')