diff options
author | Clement Delafargue <clement.delafargue@fretlink.com> | 2020-06-18 16:09:46 +0200 |
---|---|---|
committer | Clement Delafargue <clement.delafargue@fretlink.com> | 2020-06-19 10:18:47 +0200 |
commit | 244339e70a1be830ac02306e1feb4383fe73572b (patch) | |
tree | 96f1b623c151d32d9d0418a9dfc9c45695a2bd41 | |
parent | d5c5bf88290ffb2fbb7835dcfb9c645563cdd3e6 (diff) | |
download | ansible-clever-244339e70a1be830ac02306e1feb4383fe73572b.tar.gz ansible-clever-244339e70a1be830ac02306e1feb4383fe73572b.tar.zst ansible-clever-244339e70a1be830ac02306e1feb4383fe73572b.zip |
Use JSON import for environment variables
The env can be provided as a JSON list `[{"name": "PORT", "value": "8080"}]`.
The `dict2items` filter provided by ansible is _almost_ what we want, but it
keeps the value original types (a boolean is kept as a boolean in the JSON value).
Since environment variables are strings and `clever-tools` does not want to make
the implicit coercion for us, we need to do it ourselves.
-rw-r--r-- | filter_plugins/env_json_map.py | 8 | ||||
-rw-r--r-- | tasks/deploy.yml | 2 | ||||
-rw-r--r-- | templates/env.j2 | 13 |
3 files changed, 16 insertions, 7 deletions
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 @@ | |||
1 | #!/usr/bin/env python | ||
2 | |||
3 | class FilterModule(object): | ||
4 | def filters(self): | ||
5 | return {'json_env_map': self.json_env_map} | ||
6 | |||
7 | def json_env_map(self, env): | ||
8 | 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 @@ | |||
17 | CONFIGURATION_FILE: "{{ clever_login_file }}" | 17 | CONFIGURATION_FILE: "{{ clever_login_file }}" |
18 | 18 | ||
19 | - name: Push Environment | 19 | - name: Push Environment |
20 | shell: "clever env import < {{ clever_app_confdir }}/env" | 20 | shell: "clever env import --json < {{ clever_app_confdir }}/env" |
21 | args: | 21 | args: |
22 | chdir: "{{ clever_app_root }}" | 22 | chdir: "{{ clever_app_root }}" |
23 | environment: | 23 | 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 @@ | |||
1 | {% for key, value in (clever_base_env | combine(clever_env)).items() %} | 1 | {% set static_env = clever_base_env | combine(clever_env) %} |
2 | {{ key }}={{ value | to_json }} | 2 | {% set dynamic_env = {} %} |
3 | {% endfor %} | 3 | {% if clever_haskell_entry_point %} |
4 | |||
5 | {%- if clever_haskell_entry_point %} | ||
6 | {# Haskell only #} | 4 | {# Haskell only #} |
7 | {# https://www.clever-cloud.com/doc/get-help/reference-environment-variables/#haskell #} | 5 | {# https://www.clever-cloud.com/doc/get-help/reference-environment-variables/#haskell #} |
8 | CC_RUN_COMMAND={{'~/.local/bin/' + clever_haskell_entry_point | to_json }} | 6 | {% set dynamic_env = { 'CC_RUN_COMMAND': '~/.local/bin/' + clever_haskell_entry_point } %} |
9 | {% endif %} | 7 | {% endif %} |
8 | {# dict2items is not enough here, all the values have to be stringified #} | ||
9 | {# git-blame this line for more explanations #} | ||
10 | {{ static_env | combine(dynamic_env) | json_env_map | to_json }} | ||