]> git.immae.eu Git - github/fretlink/ansible-clever.git/commitdiff
Use JSON import for environment variables
authorClement Delafargue <clement.delafargue@fretlink.com>
Thu, 18 Jun 2020 14:09:46 +0000 (16:09 +0200)
committerClement Delafargue <clement.delafargue@fretlink.com>
Fri, 19 Jun 2020 08:18:47 +0000 (10:18 +0200)
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.

filter_plugins/env_json_map.py [new file with mode: 0644]
tasks/deploy.yml
templates/env.j2

diff --git a/filter_plugins/env_json_map.py b/filter_plugins/env_json_map.py
new file mode 100644 (file)
index 0000000..790dea0
--- /dev/null
@@ -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()]
index 4d4ecaa4487c974583c4f637b747904c0255f1b2..751d78fecd18ad3cc24580ef23e7e4b45559c151 100644 (file)
@@ -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:
index 30bda8247cba082531263235da03fae49c22cdd7..e97ef43dff6d732731a202a80d06e0c0a6564249 100644 (file)
@@ -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 }}