diff --git a/fig/cli/command.py b/fig/cli/command.py index b21abe5b43b..923911bbaeb 100644 --- a/fig/cli/command.py +++ b/fig/cli/command.py @@ -2,6 +2,7 @@ from __future__ import absolute_import from docker import Client from requests.exceptions import ConnectionError +from urlparse import urlparse import errno import logging import os @@ -68,12 +69,26 @@ def get_config(self, config_path): raise errors.FigFileNotFound(os.path.basename(e.filename)) raise errors.UserError(six.text_type(e)) + def expand_env_vars(self, config, base_url): + def expand(env): + for k, v in env.iteritems(): + url = urlparse(base_url) + if isinstance(v, basestring): + env[k] = v.replace('$DOCKER_HOST_IP', url.hostname) + return env + for k, v in config.iteritems(): + if 'environment' in config[k]: + config[k]['environment'] = expand(config[k]['environment']) + return config + def get_project(self, config_path, project_name=None, verbose=False): + config = self.get_config(config_path) + client = self.get_client(verbose=verbose) try: return Project.from_config( self.get_project_name(config_path, project_name), - self.get_config(config_path), - self.get_client(verbose=verbose)) + self.expand_env_vars(config, client.base_url), + client) except ConfigError as e: raise errors.UserError(six.text_type(e))