diff --git a/configs/transform/env.py b/configs/transform/env.py index 29ddd53..562a4a3 100644 --- a/configs/transform/env.py +++ b/configs/transform/env.py @@ -1,4 +1,6 @@ from pprint import pprint +import tempfile +import base64 import os class Env: @@ -9,9 +11,32 @@ class Env: def transform(self, config, vault): out = [] for k in self.config["fields"].keys(): - value = vault.resolve(config, self.config["fields"][k]) + value = self.config["fields"][k] + value = self._decode(value, config, vault) if value is None: out.append('# ' + k + '=null') else: out.append(k + '="' + value + '"') return os.linesep.join(out) + + def _decode(self, value, config, vault): + if type(value) is dict: + if len(value) != 1: + raise Exception('Malformed object literal') + + if 'literal' in value: + return value['literal'] + elif 'vault' in value: + return vault.resolve(config, self._decode(value['vault'], config, vault)) + elif 'file' in value: + temp = tempfile.NamedTemporaryFile(delete=False, prefix='configs') + temp.write(self._decode(value['file'], config, vault).encode('utf-8')) + temp.close() + return temp.name + elif 'base64' in value: + return base64.b64decode(self._decode(value['base64'], config, vault)).decode('utf-8') + else: + raise Exception('Malformed object literal -- unknown: ' + value.keys()[0]) + + else: + return vault.resolve(config, value)