diff --git a/_modules/health_checks.py b/_modules/health_checks.py
index 4245d03..3d1fa9a 100644
--- a/_modules/health_checks.py
+++ b/_modules/health_checks.py
@@ -1011,6 +1011,51 @@
     return True
 
 
+def get_entropy():
+
+    ''' Retrieve entropy size for the host '''
+
+    with open('/proc/sys/kernel/random/entropy_avail', 'r') as f:
+        entropy = f.read()
+    return entropy
+
+
+def entropy_check(target='*', target_type='glob', minimum_bits=700, ignore_dead=False, **kwargs):
+
+    ''' Check entropy size in cluster '''
+
+    agent = "entropy size status"
+    out = __salt__['saltutil.cmd']( tgt=target,
+                                    tgt_type=target_type,
+                                    fun='health_checks.get_entropy',
+                                    timeout=3
+                                  ) or None
+
+    if not _minions_output(out, agent, ignore_dead):
+        __context__['retcode'] = 2
+        return False
+
+    failed_minions = []
+    verified_minions = []
+
+    print out
+    for minion in out:
+        verified_minions.append(minion)
+        entropy = int(out[minion]['ret'])
+        if entropy < minimum_bits:
+            if not minion in failed_minions:
+                failed_minions.append(minion)
+
+    if not _failed_minions(out, agent, failed_minions):
+        __context__['retcode'] = 2
+        return False
+
+    if kwargs.get("debug", False):
+        logger.info(verified_minions)
+
+    return True
+
+
 def docker_registry_list(host):
 
     ''' Retrieve and list docker catalog '''
@@ -1029,3 +1074,11 @@
         return versions
     except:
         return {}
+
+
+def docker_ps(list_all=0):
+
+    import docker
+    client = docker.client.Client(base_url='unix://var/run/docker.sock')
+    return client.containers(all=list_all)
+
