diff --git a/compose/config.py b/compose/config.py index f87da1d8c15..a78ae579db7 100644 --- a/compose/config.py +++ b/compose/config.py @@ -407,11 +407,17 @@ def get_service_name_from_net(net_config): def load_yaml(filename): try: with open(filename, 'r') as fh: - return yaml.safe_load(fh) + return yaml.safe_load(inject_env_variables(fh.read())) except IOError as e: raise ConfigurationError(six.text_type(e)) +def inject_env_variables(content): + for k, v in os.environ.iteritems(): + content = content.replace('$' + k, v) + return content + + class ConfigurationError(Exception): def __init__(self, msg): self.msg = msg diff --git a/tests/unit/config_test.py b/tests/unit/config_test.py index 97bd1b91d1d..28e3b07f5f0 100644 --- a/tests/unit/config_test.py +++ b/tests/unit/config_test.py @@ -430,3 +430,9 @@ def test_absolute_path(self): def test_from_file(self): service_dict = config.load('tests/fixtures/build-path/docker-compose.yml') self.assertEquals(service_dict, [{'name': 'foo', 'build': self.abs_context_path}]) + + +class InjectEnvTest(unittest.TestCase): + def test_injection(self): + os.environ["BAR"] = 'rab' + self.assertEquals(config.inject_env_variables('foo $BAR oof'), 'foo rab oof')