Add support for putting releases in different namespaces
Change-Id: Ia27ede7289857db3aef866ca6ef63cb22cd7fe68
diff --git a/_modules/helm.py b/_modules/helm.py
index 23e28c4..f6d7088 100644
--- a/_modules/helm.py
+++ b/_modules/helm.py
@@ -12,18 +12,19 @@
}
-def release_exists(name):
- cmd = _helm_cmd('list', '--short', '--all', name)
+def release_exists(name, namespace):
+ cmd = _helm_cmd('list', '--short', '--all', '--namespace', namespace, name)
return __salt__['cmd.run_stdout'](**cmd) == name
-def release_create(name, chart_name, version=None, values=None):
+def release_create(name, namespace, 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)
+ cmd = _helm_cmd('install', '--namespace', namespace,
+ '--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)
@@ -35,13 +36,14 @@
return __salt__['cmd.retcode'](**cmd) == 0
-def release_upgrade(name, chart_name, version=None, values=None):
+def release_upgrade(name, namespace, 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)
+ cmd = _helm_cmd('upgrade', '--namespace', namespace,
+ name, chart_name, *args)
if values is not None:
cmd['stdin'] = yaml.serialize(values, default_flow_style=False)
LOG.debug('Upgrading release with args: %s', cmd)
diff --git a/_states/helm_release.py b/_states/helm_release.py
index 1004afb..b3b4fac 100644
--- a/_states/helm_release.py
+++ b/_states/helm_release.py
@@ -13,11 +13,11 @@
}
-def present(name, chart_name, version=None, values=None):
- exists = __salt__['helm.release_exists'](name)
+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'](
- name, chart_name, version, values)
+ name, namespace, chart_name, version, values)
if not result:
return failure(name, 'Failed to create release "{}"'.format(name))
return {
@@ -29,7 +29,7 @@
old_values = __salt__['helm.get_values'](name)
result = __salt__['helm.release_upgrade'](
- name, chart_name, version, values)
+ name, namespace, chart_name, version, values)
if not result:
return failure(name, 'Failed to create release "{}"'.format(name))
@@ -54,8 +54,8 @@
}
-def absent(name):
- exists = __salt__['helm.release_exists'](name)
+def absent(name, namespace):
+ exists = __salt__['helm.release_exists'](name, namespace)
if not exists:
return {
'name': name,
diff --git a/helm/client.sls b/helm/client.sls
index 4f83105..0d0678c 100644
--- a/helm/client.sls
+++ b/helm/client.sls
@@ -74,27 +74,40 @@
- cmd: prepare_client
{%- endfor %}
+{%- set namespaces = [] %}
{%- for release_id, release in client.releases.items() %}
{%- set release_name = release.get('name', release_id) %}
+{%- set namespace = release.get('namespace', 'default') %}
{%- if release.get('enabled', True) %}
ensure_{{ release_id }}_release:
helm_release.present:
- name: {{ release_name }}
- chart_name: {{ release['chart'] }}
+ - namespace: {{ namespace }}
{%- if release.get('version') %}
- version: {{ release['version'] }}
- {% endif %}
+ {%- endif %}
{%- if release.get('values') %}
- values:
{{ release['values']|yaml(False)|indent(8) }}
- {% endif %}
+ {%- endif %}
- require:
- cmd: wait_for_tiller
+ - cmd: ensure_{{ namespace }}_namespace
+ {%- do namespaces.append(namespace) %}
{%- else %}{# not release.enabled #}
absent_{{ release_id }}_release:
helm_release.absent:
- name: {{ release_name }}
+ - namespace: {{ namespace }}
{%- endif %}{# release.enabled #}
{%- endfor %}{# release_id, release in client.releases #}
+{%- for namespace in namespaces %}
+ensure_{{ namespace }}_namespace:
+ cmd.run:
+ - name: kubectl create namespace {{ namespace }}
+ - unless: kubectl get namespace {{ namespace }}
+{%- endfor %}
+
{%- endif %}