From c59831c45de6e60c1d2aec373ed1ff17060c8a04 Mon Sep 17 00:00:00 2001
From: Anand Shanmugam <anand1712@gmail.com>
Date: Tue, 19 Apr 2016 17:07:35 -0700
Subject: [PATCH] Adding docker tests to cloudpulse

Change-Id: I0f67ed080151534766d130048671b622a188be43
---
 cloudpulse/operator/ansible/ansible_runner.py |  4 +++-
 .../plugins/operator_tests/operator.py        | 24 ++++++++++++++++++-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/cloudpulse/operator/ansible/ansible_runner.py b/cloudpulse/operator/ansible/ansible_runner.py
index 5fbd073..decb30e 100644
--- a/cloudpulse/operator/ansible/ansible_runner.py
+++ b/cloudpulse/operator/ansible/ansible_runner.py
@@ -192,7 +192,9 @@ class ansible_runner(object):
             if 'failed' in results['contacted'][node]:
                 if results['contacted'][node]['failed'] is True:
                     results['status'] = 'FAIL'
-                    results['status_message'] = ''
+                    results['status_message'] = " ".join(
+                        [("%s -> %s") % (key, results['dark'][key])
+                         for key in results['dark']])
 
         for node in results['contacted'].keys():
             rc = results['contacted'][node].get('rc', None)
diff --git a/cloudpulse/scenario/plugins/operator_tests/operator.py b/cloudpulse/scenario/plugins/operator_tests/operator.py
index 164f681..6889232 100644
--- a/cloudpulse/scenario/plugins/operator_tests/operator.py
+++ b/cloudpulse/scenario/plugins/operator_tests/operator.py
@@ -44,7 +44,10 @@ PERIODIC_TESTS_OPTS = [
                help='The galera periodic check'),
     cfg.IntOpt('ceph_check',
                default=0,
-               help='The ceph periodic check')
+               help='The ceph periodic check'),
+    cfg.IntOpt('docker_check',
+               default=0,
+               help='The docker periodic check')
 ]
 
 CONF = cfg.CONF
@@ -143,6 +146,25 @@ class operator_scenario(base.Scenario):
             return (404, ("Galera Cluster Test Failed: %s" %
                           results['status_message']), [])
 
+    @base.scenario(admin_only=False, operator=True)
+    def docker_check(self):
+        self.load()
+        cmd = "docker ps -aq --filter 'status=exited'"
+        out = self.ans_runner.execute(cmd)
+
+        results, failed_hosts = self.ans_runner.validate_results(out)
+        if results['status'] is 'PASS':
+            docker_failed = {key: results['contacted'][key]['stdout']
+                             for key in results['contacted']
+                             if results['contacted'][key]['stdout']}
+            if docker_failed:
+                docker_str = " ".join(["Containers failed in %s : %s" % (
+                    key, docker_failed[key]) for key in docker_failed])
+                return (404, docker_str, [])
+            else:
+                return (200, "All docker containers are up",
+                        ['Docker container Test Passed'])
+
     @base.scenario(admin_only=False, operator=True)
     def ceph_check(self):
         self.load()