Browse Source

Allow functions/transforms in .env fields to transform values before

returning
master
Adam Pippin 4 years ago
parent
commit
49ff7af288
  1. 27
      configs/transform/env.py

27
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)

Loading…
Cancel
Save