blob: 3fb2c8be8559b1c43f6544a8f8863896d3177489 [file] [log] [blame]
{%- from "helm/map.jinja" import client with context %}
{%- if client.enabled %}
{%- set helm_tmp = "/tmp/helm-" + client.version %}
{%- set helm_bin = "/usr/bin/helm-" + client.version %}
{%- set kubectl_bin = "/usr/bin/kubectl" %}
{%- set kube_config = "/srv/helm/kubeconfig.yaml" %}
{%- if client.kubectl.config.gce_service_token %}
{%- set gce_service_token = "/srv/helm/gce_token.json" %}
{%- set gce_env_var = "- GOOGLE_APPLICATION_CREDENTIALS: \"{}\"".format(gce_service_token) %}
{%- set gce_state_arg = "- gce_service_token: \"{}\"".format(gce_service_token) %}
{%- set gce_require = "- file: \"{}\"".format(gce_service_token) %}
{%- else %}
{%- set gce_env_var = "" %}
{%- set gce_state_arg = "" %}
{%- set gce_require = "" %}
{%- endif %}
{%- set helm_home = "/srv/helm/home" %}
{%- if client.tiller.host %}
{%- set helm_run = "helm --host '{}'".format(client.tiller.host) %}
{%- set tiller_arg = "- tiller_host: \"{}\"".format(client.tiller.host) %}
{%- else %}
{%- set helm_run = "helm --tiller-namespace '{}'".format(client.tiller.namespace) %}
{%- set tiller_arg = "- tiller_namespace: \"{}\"".format(client.tiller.namespace) %}
{%- endif %}
{{ helm_tmp }}:
file.directory:
- user: root
- group: root
archive.extracted:
- source: {{ client.download_url }}
- source_hash: {{ client.download_hash }}
- archive_format: tar
{%- if grains['saltversioninfo'] < [2016, 11] %}
- tar_options: v
{%- else %}
- options: v
{%- endif %}
- if_missing: {{ helm_tmp }}/linux-amd64/helm
- require:
- file: {{ helm_tmp }}
{{ helm_bin }}:
file.managed:
- source: {{ helm_tmp }}/linux-amd64/helm
- mode: 555
- user: root
- group: root
- require:
- archive: {{ helm_tmp }}
/usr/bin/helm:
file.symlink:
- target: helm-{{ client.version }}
- require:
- file: {{ helm_bin }}
prepare_client:
cmd.run:
- name: {{ helm_run }} init --client-only
- env:
- HELM_HOME: {{ helm_home }}
- unless: test -d {{ helm_home }}
- require:
- file: /usr/bin/helm
{{ kube_config }}:
file.managed:
- source: salt://helm/files/kubeconfig.yaml.j2
- mode: 400
- user: root
- group: root
- template: jinja
{%- if client.kubectl.config.gce_service_token %}
{{ gce_service_token }}:
file.managed:
- source: salt://helm/files/gce_token.json.j2
- mode: 400
- user: root
- group: root
- template: jinja
- context:
content: {{ client.kubectl.config.gce_service_token }}
{%- endif %}
{%- if client.tiller.install %}
install_tiller:
cmd.run:
- name: {{ helm_run }} init --upgrade
- env:
- HELM_HOME: {{ helm_home }}
- KUBECONFIG: {{ kube_config }}
{{ gce_env_var }}
- unless: "{{ helm_run }} version --server --short | grep -E 'Server: v{{ client.version }}(\\+|$)'"
- require:
- cmd: prepare_client
- file: {{ kube_config }}
{{ gce_require }}
wait_for_tiller:
cmd.run:
- name: while ! {{ helm_run }} list; do sleep 3; done
- env:
- HELM_HOME: {{ helm_home }}
- KUBECONFIG: {{ kube_config }}
{{ gce_env_var }}
- require:
- file: {{ kube_config }}
{{ gce_require }}
- onchanges:
- cmd: install_tiller
{%- endif %}
{%- for repo_name, repo_url in client.repos.items() %}
ensure_{{ repo_name }}_repo:
cmd.run:
- name: {{ helm_run }} repo add {{ repo_name }} {{ repo_url }}
- env:
- HELM_HOME: {{ helm_home }}
- unless: {{ helm_run }} repo list | grep '^{{ repo_name }}[[:space:]]{{ repo_url|replace(".", "\.") }}'
- require:
- 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 }}
- kube_config: {{ kube_config }}
{{ tiller_arg }}
{{ gce_state_arg }}
{%- if release.get('version') %}
- version: {{ release['version'] }}
{%- endif %}
{%- if release.get('values') %}
- values:
{{ release['values']|yaml(False)|indent(8) }}
{%- endif %}
- require:
{%- if client.tiller.install %}
- cmd: wait_for_tiller
{%- endif %}
- cmd: ensure_{{ namespace }}_namespace
{{ gce_require }}
{%- do namespaces.append(namespace) %}
{%- else %}{# not release.enabled #}
absent_{{ release_id }}_release:
helm_release.absent:
- name: {{ release_name }}
- namespace: {{ namespace }}
- kube_config: {{ kube_config }}
{{ tiller_arg }}
{{ gce_state_arg }}
- require:
{%- if client.tiller.install %}
- cmd: wait_for_tiller
{%- endif %}
{{ gce_require }}
- cmd: prepare_client
{%- endif %}{# release.enabled #}
{%- endfor %}{# release_id, release in client.releases #}
{%- if client.kubectl.install %}
extract_kubectl:
archive.extracted:
- name: {{ helm_tmp }}
- source: {{ client.kubectl.download_url }}
- source_hash: {{ client.kubectl.download_hash }}
- archive_format: tar
{%- if grains['saltversioninfo'] < [2016, 11] %}
- tar_options: v
{%- else %}
- options: v
{%- endif %}
- if_missing: {{ helm_tmp }}/{{ client.kubectl.tarball_path }}
- require:
- file: {{ helm_tmp }}
{{ kubectl_bin }}:
file.managed:
- source: {{ helm_tmp }}/{{ client.kubectl.tarball_path }}
- mode: 555
- user: root
- group: root
- require:
- archive: extract_kubectl
{%- endif %}{# client.kubectl.install #}
{%- for namespace in namespaces %}
ensure_{{ namespace }}_namespace:
cmd.run:
- name: kubectl create namespace {{ namespace }}
- unless: kubectl get namespace {{ namespace }}
- env:
- KUBECONFIG: {{ kube_config }}
{{ gce_env_var }}
- require:
- file: {{ kube_config }}
{{ gce_require }}
{%- if client.kubectl.install %}
- file: {{ kubectl_bin }}
{%- endif %}
{%- endfor %}
{%- endif %}