diff --git a/cloud/docker/docker_container.py b/cloud/docker/docker_container.py index 504a15ac416..e71300a197a 100644 --- a/cloud/docker/docker_container.py +++ b/cloud/docker/docker_container.py @@ -97,6 +97,14 @@ options: - Dictionary of key,value pairs. default: null required: false + env_file: + version_added: "2.2" + description: + - Path to a file containing environment variables I(FOO=BAR). + - If variable also present in C(env), then C(env) value will override. + - Requires docker-py >= 1.4.0. + default: null + required: false entrypoint: description: - String or list of commands that overwrite the default ENTRYPOINT of the image. @@ -582,6 +590,7 @@ class TaskParameters(DockerBaseClass): self.dns_opts = None self.dns_search_domains = None self.env = None + self.env_file = None self.entrypoint = None self.etc_hosts = None self.exposed_ports = None @@ -655,6 +664,7 @@ class TaskParameters(DockerBaseClass): self.log("volumes:") self.log(self.volumes, pretty_print=True) + self.env = self._get_environment() self.ulimits = self._parse_ulimits() self.log_config = self._parse_log_config() self.exp_links = None @@ -925,6 +935,21 @@ class TaskParameters(DockerBaseClass): except ValueError, exc: self.fail('Error parsing logging options - %s' % (exc)) + def _get_environment(self): + """ + If environment file is combined with explicit environment variables, the explicit environment variables + take precedence. + """ + final_env = {} + if self.env_file: + parsed_env_file = utils.parse_env_file(self.env_file) + for name, value in parsed_env_file.iteritems(): + final_env[name] = str(value) + if self.env: + for name, value in self.env.iteritems(): + final_env[name] = str(value) + return final_env + class Container(DockerBaseClass): @@ -1578,6 +1603,7 @@ def main(): dns_opts=dict(type='list'), dns_search_domains=dict(type='list'), env=dict(type='dict'), + env_file=dict(type='path'), entrypoint=dict(type='list'), etc_hosts=dict(type='dict'), exposed_ports=dict(type='list', aliases=['exposed', 'expose']),