diff --git a/_modules/helm.py b/_modules/helm.py
index f6d7088..e140087 100644
--- a/_modules/helm.py
+++ b/_modules/helm.py
@@ -5,6 +5,16 @@
 HELM_HOME = '/srv/helm/home'
 LOG = logging.getLogger(__name__)
 
+def ok_or_output(cmd, prefix=None):
+    ret = __salt__['cmd.run_all'](**cmd)
+    if ret['retcode'] == 0:
+        return None
+    msg = "Stdout:\n{0[stdout]}\nStderr:\n{0[stderr]}".format(ret)
+    if prefix:
+        msg = prefix + ':\n' + msg
+    return msg
+
+
 def _helm_cmd(*args):
     return {
         'cmd': ('helm',) + args,
@@ -28,12 +38,12 @@
     if values is not None:
         cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
     LOG.debug('Creating release with args: %s', cmd)
-    return __salt__['cmd.retcode'](**cmd) == 0
+    return ok_or_output(cmd, 'Failed to create release "{}"'.format(name))
 
 
 def release_delete(name):
     cmd = _helm_cmd('delete', '--purge', name)
-    return __salt__['cmd.retcode'](**cmd) == 0
+    return ok_or_output(cmd, 'Failed to delete release "{}"'.format(name))
 
 
 def release_upgrade(name, namespace, chart_name, version=None, values=None):
@@ -47,7 +57,7 @@
     if values is not None:
         cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
     LOG.debug('Upgrading release with args: %s', cmd)
-    return __salt__['cmd.retcode'](**cmd) == 0
+    return ok_or_output(cmd, 'Failed to upgrade release "{}"'.format(name))
 
 
 def get_values(name):
diff --git a/_states/helm_release.py b/_states/helm_release.py
index b3b4fac..2177bcd 100644
--- a/_states/helm_release.py
+++ b/_states/helm_release.py
@@ -16,10 +16,10 @@
 def present(name, chart_name, namespace, version=None, values=None):
     exists =  __salt__['helm.release_exists'](name, namespace)
     if not exists:
-        result = __salt__['helm.release_create'](
+        err = __salt__['helm.release_create'](
             name, namespace, chart_name, version, values)
-        if not result:
-            return failure(name, 'Failed to create release "{}"'.format(name))
+        if err:
+            return failure(name, err)
         return {
             'name': name,
             'changes': {name: 'CREATED'},
@@ -28,10 +28,10 @@
         }
 
     old_values = __salt__['helm.get_values'](name)
-    result = __salt__['helm.release_upgrade'](
+    err = __salt__['helm.release_upgrade'](
         name, namespace, chart_name, version, values)
-    if not result:
-        return failure(name, 'Failed to create release "{}"'.format(name))
+    if err:
+        return failure(name, err)
 
     new_values = __salt__['helm.get_values'](name)
     if new_values == old_values:
@@ -63,9 +63,9 @@
             'result': True,
             'comment': 'Release "{}" doesn\'t exist'.format(name),
         }
-    result = __salt__['helm.release_delete'](name)
-    if not result:
-        return failure(name, 'Failed to delete release "{}"'.format(name))
+    err = __salt__['helm.release_delete'](name)
+    if err:
+        return failure(name, err)
     return {
         'name': name,
         'changes': {name: 'DELETED'},
