Create basic state and module to create release
diff --git a/_modules/helm.py b/_modules/helm.py
new file mode 100644
index 0000000..b849676
--- /dev/null
+++ b/_modules/helm.py
@@ -0,0 +1,30 @@
+import logging
+
+from salt.serializers import yaml
+
+HELM_HOME = '/srv/helm/home'
+LOG = logging.getLogger(__name__)
+
+def _helm_cmd(*args):
+    return {
+        'cmd': ('helm',) + args,
+        'env': {'HELM_HOME': HELM_HOME},
+    }
+
+
+def release_exists(name):
+    cmd = _helm_cmd('list', '--short', '--all', name)
+    return __salt__['cmd.run_stdout'](**cmd) == name
+
+
+def release_create(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('install', '--name', 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
diff --git a/_states/helm_release.py b/_states/helm_release.py
new file mode 100644
index 0000000..d5272c0
--- /dev/null
+++ b/_states/helm_release.py
@@ -0,0 +1,27 @@
+import logging
+
+def present(name, chart_name, version=None, values=None, logLevel=None):
+    exists =  __salt__['helm.release_exists'](name)
+    if not exists:
+        result = __salt__['helm.release_create'](
+            name, chart_name, version, values)
+        if result:
+            return {
+                'name': name,
+                'changes': {name: 'CREATED'},
+                'result': True,
+                'comment': 'Release "{}" was created'.format(name),
+            }
+        else:
+            return {
+                'name': name,
+                'changes': {},
+                'result': False,
+                'comment': 'Failed to create release "{}"'.format(name),
+            }
+    return {
+        'name': name,
+        'changes': {},
+        'result': True,
+        'comment': 'Release "{}" already exists'.format(name),
+    }
diff --git a/helm/client.sls b/helm/client.sls
index ccf0e4b..5c02416 100644
--- a/helm/client.sls
+++ b/helm/client.sls
@@ -63,33 +63,20 @@
 {%- endfor %}
 
 {%- for release_id, release in client.releases.items() %}
-
-{%- if release.get('values', False) %}
-{%- set values_path = "/srv/helm/releases/" + release_id + "/values.yaml" %}
-
-{{ values_path }}:
-  file.managed:
-    - makedirs: True
-    - contents: |
-        {{ release['values']|yaml(False)|indent(8) }}
-
-{%- endif %}
-
 {%- set release_name = release.get('name', release_id) %}
-
 ensure_{{ release_id }}_release:
-  cmd.run:
-    - name: helm install --name "{{ release_name }}" {{ release['chart'] }}
-      {%- if release.get('version') %} --version {{ release['version'] }}{% endif %}
-      {%- if release.get('values') %} --values {{ values_path }}{% endif %}
-    - unless: helm get "{{ release_name }}"
-    - env:
-      - HELM_HOME: {{ helm_home }}
+  helm_release.present:
+    - name: {{ release_name }}
+    - chart_name: {{ release['chart'] }}
+    {%- if release.get('version') %}
+    - version: {{ release['version'] }}
+    {% endif %}
+    {%- if release.get('values') %}
+    - values:
+        {{ release['values']|yaml(False)|indent(8) }}
+    {% endif %}
     - require:
       - cmd: prepare_client
-      {%- if release.get('values') %}
-      - file: {{ values_path }}
-      {%- endif %}
 {%- endfor %}
 
 {%- endif %}