Call helm upgrade if release already exists
diff --git a/_modules/helm.py b/_modules/helm.py
index b849676..19be742 100644
--- a/_modules/helm.py
+++ b/_modules/helm.py
@@ -28,3 +28,21 @@
         cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
     LOG.debug('Creating release with args: %s', cmd)
     return __salt__['cmd.retcode'](**cmd) == 0
+
+
+def release_upgrade(name, chart_name, version=None, values=None):
+    args = []
+    if version is not None:
+        args += ['--version', version]
+    if values is not None:
+        args += ['--values', '/dev/stdin']
+    cmd = _helm_cmd('upgrade', name, chart_name, *args)
+    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
+
+
+def get_values(name):
+    cmd = _helm_cmd('get', 'values', '--all', name)
+    return yaml.deserialize(__salt__['cmd.run_stdout'](**cmd))
diff --git a/_states/helm_release.py b/_states/helm_release.py
index d5272c0..c3b70a3 100644
--- a/_states/helm_release.py
+++ b/_states/helm_release.py
@@ -1,6 +1,9 @@
+import difflib
 import logging
 
-def present(name, chart_name, version=None, values=None, logLevel=None):
+from salt.serializers import yaml
+
+def present(name, chart_name, version=None, values=None):
     exists =  __salt__['helm.release_exists'](name)
     if not exists:
         result = __salt__['helm.release_create'](
@@ -19,9 +22,31 @@
                 'result': False,
                 'comment': 'Failed to create release "{}"'.format(name),
             }
+    old_values = __salt__['helm.get_values'](name)
+    result = __salt__['helm.release_upgrade'](
+        name, chart_name, version, values)
+    if not result:
+        return {
+            'name': name,
+            'changes': {},
+            'result': False,
+            'comment': 'Failed to create release "{}"'.format(name),
+        }
+    new_values = __salt__['helm.get_values'](name)
+    if new_values == old_values:
+        return {
+            'name': name,
+            'changes': {},
+            'result': True,
+            'comment': 'Release "{}" already exists'.format(name),
+        }
+    old_str = yaml.serialize(old_values, default_flow_style=False)
+    new_str = yaml.serialize(new_values, default_flow_style=False)
+    diff = difflib.unified_diff(
+        old_str.split('\n'), new_str.split('\n'), lineterm='')
     return {
         'name': name,
-        'changes': {},
+        'changes': {'values': '\n'.join(diff)},
         'result': True,
         'comment': 'Release "{}" already exists'.format(name),
     }