diff --git a/filter_plugins/env_json_map.py b/filter_plugins/env_json_map.py new file mode 100644 index 0000000..790dea0 --- /dev/null +++ b/filter_plugins/env_json_map.py @@ -0,0 +1,8 @@ +#!/usr/bin/env python + +class FilterModule(object): + def filters(self): + return {'json_env_map': self.json_env_map} + + def json_env_map(self, env): + return [{'name': k, 'value': str(v)} for k,v in env.items()] diff --git a/tasks/deploy.yml b/tasks/deploy.yml index 4d4ecaa..751d78f 100644 --- a/tasks/deploy.yml +++ b/tasks/deploy.yml @@ -17,7 +17,7 @@ CONFIGURATION_FILE: "{{ clever_login_file }}" - name: Push Environment - shell: "clever env import < {{ clever_app_confdir }}/env" + shell: "clever env import --json < {{ clever_app_confdir }}/env" args: chdir: "{{ clever_app_root }}" environment: diff --git a/templates/env.j2 b/templates/env.j2 index 30bda82..e97ef43 100644 --- a/templates/env.j2 +++ b/templates/env.j2 @@ -1,9 +1,10 @@ -{% for key, value in (clever_base_env | combine(clever_env)).items() %} -{{ key }}={{ value | to_json }} -{% endfor %} - -{%- if clever_haskell_entry_point %} +{% set static_env = clever_base_env | combine(clever_env) %} +{% set dynamic_env = {} %} +{% if clever_haskell_entry_point %} {# Haskell only #} {# https://www.clever-cloud.com/doc/get-help/reference-environment-variables/#haskell #} -CC_RUN_COMMAND={{'~/.local/bin/' + clever_haskell_entry_point | to_json }} +{% set dynamic_env = { 'CC_RUN_COMMAND': '~/.local/bin/' + clever_haskell_entry_point } %} {% endif %} +{# dict2items is not enough here, all the values have to be stringified #} +{# git-blame this line for more explanations #} +{{ static_env | combine(dynamic_env) | json_env_map | to_json }}