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 %}