Skip to content

Commit 75cc50f

Browse files
committed
Default to ~/.docker if DOCKER_CERT_PATH is empty
Signed-off-by: Aanand Prasad <[email protected]>
1 parent 2c08ad2 commit 75cc50f

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

docker/utils/utils.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,15 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
314314
tls_verify = os.environ.get('DOCKER_TLS_VERIFY')
315315

316316
params = {}
317+
317318
if host:
318319
params['base_url'] = (host.replace('tcp://', 'https://')
319320
if tls_verify else host)
321+
322+
if tls_verify and not cert_path:
323+
if 'HOME' in os.environ:
324+
cert_path = os.path.join(os.environ['HOME'], '.docker')
325+
320326
if tls_verify and cert_path:
321327
params['tls'] = tls.TLSConfig(
322328
client_cert=(os.path.join(cert_path, 'cert.pem'),
@@ -325,6 +331,7 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
325331
verify=True,
326332
ssl_version=ssl_version,
327333
assert_hostname=assert_hostname)
334+
328335
return params
329336

330337

tests/utils_test.py

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22
import os.path
3+
import shutil
4+
import tempfile
35
import unittest
46

57
from docker.client import Client
@@ -13,6 +15,11 @@
1315

1416
import base
1517

18+
TEST_CERT_DIR = os.path.join(
19+
os.path.dirname(__file__),
20+
'testdata/certs',
21+
)
22+
1623

1724
class UtilsTest(base.BaseTestCase):
1825
longMessage = True
@@ -75,11 +82,18 @@ def test_parse_host(self):
7582
for host, expected in valid_hosts.items():
7683
self.assertEqual(parse_host(host), expected, msg=host)
7784

78-
def test_kwargs_from_env(self):
85+
def test_kwargs_from_env_empty(self):
86+
os.environ.update(DOCKER_HOST='',
87+
DOCKER_CERT_PATH='',
88+
DOCKER_TLS_VERIFY='')
89+
90+
kwargs = kwargs_from_env()
91+
self.assertEqual(None, kwargs.get('base_url'))
92+
self.assertEqual(None, kwargs.get('tls'))
93+
94+
def test_kwargs_from_env_tls(self):
7995
os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376',
80-
DOCKER_CERT_PATH=os.path.join(
81-
os.path.dirname(__file__),
82-
'testdata/certs'),
96+
DOCKER_CERT_PATH=TEST_CERT_DIR,
8397
DOCKER_TLS_VERIFY='1')
8498
kwargs = kwargs_from_env(assert_hostname=False)
8599
self.assertEqual('https://192.168.59.103:2376', kwargs['base_url'])
@@ -95,6 +109,24 @@ def test_kwargs_from_env(self):
95109
except TypeError as e:
96110
self.fail(e)
97111

112+
def test_kwargs_from_env_no_cert_path(self):
113+
try:
114+
temp_dir = tempfile.mkdtemp()
115+
cert_dir = os.path.join(temp_dir, '.docker')
116+
shutil.copytree(TEST_CERT_DIR, cert_dir)
117+
118+
os.environ.update(HOME=temp_dir,
119+
DOCKER_CERT_PATH='',
120+
DOCKER_TLS_VERIFY='1')
121+
122+
kwargs = kwargs_from_env()
123+
self.assertIn(cert_dir, kwargs['tls'].verify)
124+
self.assertIn(cert_dir, kwargs['tls'].cert[0])
125+
self.assertIn(cert_dir, kwargs['tls'].cert[1])
126+
finally:
127+
if temp_dir:
128+
shutil.rmtree(temp_dir)
129+
98130
def test_convert_filters(self):
99131
tests = [
100132
({'dangling': True}, '{"dangling": ["true"]}'),

0 commit comments

Comments
 (0)