diff --git a/docker/utils/utils.py b/docker/utils/utils.py index 70fcb1f0..136466c8 100644 --- a/docker/utils/utils.py +++ b/docker/utils/utils.py @@ -479,15 +479,17 @@ def parse_devices(devices): return device_list -def kwargs_from_env(ssl_version=None, assert_hostname=None): - host = os.environ.get('DOCKER_HOST') +def kwargs_from_env(ssl_version=None, assert_hostname=None, environment=None): + if not environment: + environment = os.environ + host = environment.get('DOCKER_HOST') # empty string for cert path is the same as unset. - cert_path = os.environ.get('DOCKER_CERT_PATH') or None + cert_path = environment.get('DOCKER_CERT_PATH') or None # empty string for tls verify counts as "false". # Any value or 'unset' counts as true. - tls_verify = os.environ.get('DOCKER_TLS_VERIFY') + tls_verify = environment.get('DOCKER_TLS_VERIFY') if tls_verify == '': tls_verify = False else: diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py index c744604d..bd794598 100644 --- a/tests/unit/utils_test.py +++ b/tests/unit/utils_test.py @@ -249,6 +249,20 @@ class KwargsFromEnvTest(base.BaseTestCase): if temp_dir: shutil.rmtree(temp_dir) + def test_kwargs_from_env_alternate_env(self): + # Values in os.environ are entirely ignored if an alternate is + # provided + os.environ.update( + DOCKER_HOST='tcp://192.168.59.103:2376', + DOCKER_CERT_PATH=TEST_CERT_DIR, + DOCKER_TLS_VERIFY='' + ) + kwargs = kwargs_from_env(environment={ + 'DOCKER_HOST': 'http://docker.gensokyo.jp:2581', + }) + assert 'http://docker.gensokyo.jp:2581' == kwargs['base_url'] + assert 'tls' not in kwargs + class ConverVolumeBindsTest(base.BaseTestCase): def test_convert_volume_binds_empty(self):