summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2016-01-28 16:25:23 -0800
committerJoffrey F <joffrey@docker.com>2016-01-28 16:25:23 -0800
commitbb94fe7a8c83b82050c8971464c2838d335b41a4 (patch)
tree497ca19797bc2bc2740aeb1473e4068db6ed0696
parent446e6d08dd569194a27bb354a184b7d94ecf5e48 (diff)
downloaddocker-py-bb94fe7a8c83b82050c8971464c2838d335b41a4.tar.gz
Support unspecified protocol in base_url when using TLS894-docker_host_env
(assume HTTPS) Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--docker/client.py8
-rw-r--r--docker/utils/utils.py4
-rw-r--r--tests/unit/utils_test.py5
3 files changed, 11 insertions, 6 deletions
diff --git a/docker/client.py b/docker/client.py
index fb186cc..7d1f7c4 100644
--- a/docker/client.py
+++ b/docker/client.py
@@ -45,17 +45,17 @@ class Client(
timeout=constants.DEFAULT_TIMEOUT_SECONDS, tls=False):
super(Client, self).__init__()
- if tls and (not base_url or not base_url.startswith('https://')):
+ if tls and not base_url:
raise errors.TLSParameterError(
- 'If using TLS, the base_url argument must begin with '
- '"https://".')
+ 'If using TLS, the base_url argument must be provided.'
+ )
self.base_url = base_url
self.timeout = timeout
self._auth_configs = auth.load_config()
- base_url = utils.parse_host(base_url, sys.platform)
+ base_url = utils.parse_host(base_url, sys.platform, tls=bool(tls))
if base_url.startswith('http+unix://'):
self._custom_adapter = unixconn.UnixAdapter(base_url, timeout)
self.mount('http+docker://', self._custom_adapter)
diff --git a/docker/utils/utils.py b/docker/utils/utils.py
index 1ce1867..dc46f1e 100644
--- a/docker/utils/utils.py
+++ b/docker/utils/utils.py
@@ -345,7 +345,7 @@ def parse_repository_tag(repo_name):
# fd:// protocol unsupported (for obvious reasons)
# Added support for http and https
# Protocol translation: tcp -> http, unix -> http+unix
-def parse_host(addr, platform=None):
+def parse_host(addr, platform=None, tls=False):
proto = "http+unix"
host = DEFAULT_HTTP_HOST
port = None
@@ -381,7 +381,7 @@ def parse_host(addr, platform=None):
raise errors.DockerException(
"Invalid bind address protocol: {0}".format(addr)
)
- proto = "http"
+ proto = "https" if tls else "http"
if proto != "http+unix" and ":" in addr:
host_parts = addr.split(':')
diff --git a/tests/unit/utils_test.py b/tests/unit/utils_test.py
index 83d2a98..63ea10e 100644
--- a/tests/unit/utils_test.py
+++ b/tests/unit/utils_test.py
@@ -360,6 +360,11 @@ class ParseHostTest(base.BaseTestCase):
assert parse_host(val, 'win32') == tcp_port
+ def test_parse_host_tls(self):
+ host_value = 'myhost.docker.net:3348'
+ expected_result = 'https://myhost.docker.net:3348'
+ self.assertEqual(parse_host(host_value, None, True), expected_result)
+
class ParseRepositoryTagTest(base.BaseTestCase):
sha = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'