Skip to content

Commit 0282e12

Browse files
committed
Merge branch 'aanand-default-cert-path'
2 parents ddf879c + e8af8b3 commit 0282e12

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

docker/utils/utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def exclude_paths(root, patterns, dockerfile=None):
114114
components = p.split('/')
115115
paths += [
116116
'/'.join(components[:end])
117-
for end in range(1, len(components)+1)
117+
for end in range(1, len(components) + 1)
118118
]
119119

120120
return set(paths)
@@ -363,9 +363,14 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
363363
tls_verify = os.environ.get('DOCKER_TLS_VERIFY')
364364

365365
params = {}
366+
366367
if host:
367368
params['base_url'] = (host.replace('tcp://', 'https://')
368369
if tls_verify else host)
370+
371+
if tls_verify and not cert_path:
372+
cert_path = os.path.join(os.path.expanduser('~'), '.docker')
373+
369374
if tls_verify and cert_path:
370375
params['tls'] = tls.TLSConfig(
371376
client_cert=(os.path.join(cert_path, 'cert.pem'),
@@ -374,6 +379,7 @@ def kwargs_from_env(ssl_version=None, assert_hostname=None):
374379
verify=True,
375380
ssl_version=ssl_version,
376381
assert_hostname=assert_hostname)
382+
377383
return params
378384

379385

tests/utils_test.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919

2020
import pytest
2121

22+
TEST_CERT_DIR = os.path.join(
23+
os.path.dirname(__file__),
24+
'testdata/certs',
25+
)
26+
2227

2328
class UtilsTest(base.BaseTestCase):
2429
longMessage = True
@@ -90,11 +95,18 @@ def test_parse_host(self):
9095
for host, expected in valid_hosts.items():
9196
self.assertEqual(parse_host(host), expected, msg=host)
9297

93-
def test_kwargs_from_env(self):
98+
def test_kwargs_from_env_empty(self):
99+
os.environ.update(DOCKER_HOST='',
100+
DOCKER_CERT_PATH='',
101+
DOCKER_TLS_VERIFY='')
102+
103+
kwargs = kwargs_from_env()
104+
self.assertEqual(None, kwargs.get('base_url'))
105+
self.assertEqual(None, kwargs.get('tls'))
106+
107+
def test_kwargs_from_env_tls(self):
94108
os.environ.update(DOCKER_HOST='tcp://192.168.59.103:2376',
95-
DOCKER_CERT_PATH=os.path.join(
96-
os.path.dirname(__file__),
97-
'testdata/certs'),
109+
DOCKER_CERT_PATH=TEST_CERT_DIR,
98110
DOCKER_TLS_VERIFY='1')
99111
kwargs = kwargs_from_env(assert_hostname=False)
100112
self.assertEqual('https://192.168.59.103:2376', kwargs['base_url'])
@@ -110,6 +122,24 @@ def test_kwargs_from_env(self):
110122
except TypeError as e:
111123
self.fail(e)
112124

125+
def test_kwargs_from_env_no_cert_path(self):
126+
try:
127+
temp_dir = tempfile.mkdtemp()
128+
cert_dir = os.path.join(temp_dir, '.docker')
129+
shutil.copytree(TEST_CERT_DIR, cert_dir)
130+
131+
os.environ.update(HOME=temp_dir,
132+
DOCKER_CERT_PATH='',
133+
DOCKER_TLS_VERIFY='1')
134+
135+
kwargs = kwargs_from_env()
136+
self.assertIn(cert_dir, kwargs['tls'].verify)
137+
self.assertIn(cert_dir, kwargs['tls'].cert[0])
138+
self.assertIn(cert_dir, kwargs['tls'].cert[1])
139+
finally:
140+
if temp_dir:
141+
shutil.rmtree(temp_dir)
142+
113143
def test_parse_env_file_proper(self):
114144
env_file = self.generate_tempfile(
115145
file_content='USER=jdoe\nPASS=secret')

0 commit comments

Comments
 (0)