mirror of https://github.com/docker/compose.git
Support mixed use of TLS flags and TLS environment variables
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
98044349a4
commit
593a675d2b
|
@ -35,7 +35,7 @@ def project_from_options(project_dir, options):
|
||||||
project_name=options.get('--project-name'),
|
project_name=options.get('--project-name'),
|
||||||
verbose=options.get('--verbose'),
|
verbose=options.get('--verbose'),
|
||||||
host=host,
|
host=host,
|
||||||
tls_config=tls_config_from_options(options),
|
tls_config=tls_config_from_options(options, environment),
|
||||||
environment=environment,
|
environment=environment,
|
||||||
override_dir=options.get('--project-directory'),
|
override_dir=options.get('--project-directory'),
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,6 +2,7 @@ from __future__ import absolute_import
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import os.path
|
||||||
import ssl
|
import ssl
|
||||||
|
|
||||||
from docker import APIClient
|
from docker import APIClient
|
||||||
|
@ -35,14 +36,22 @@ def get_tls_version(environment):
|
||||||
|
|
||||||
|
|
||||||
def tls_config_from_options(options, environment=None):
|
def tls_config_from_options(options, environment=None):
|
||||||
|
environment = environment or {}
|
||||||
|
cert_path = environment.get('DOCKER_CERT_PATH') or None
|
||||||
|
|
||||||
tls = options.get('--tls', False)
|
tls = options.get('--tls', False)
|
||||||
ca_cert = unquote_path(options.get('--tlscacert'))
|
ca_cert = unquote_path(options.get('--tlscacert'))
|
||||||
cert = unquote_path(options.get('--tlscert'))
|
cert = unquote_path(options.get('--tlscert'))
|
||||||
key = unquote_path(options.get('--tlskey'))
|
key = unquote_path(options.get('--tlskey'))
|
||||||
verify = options.get('--tlsverify')
|
verify = options.get('--tlsverify', environment.get('DOCKER_TLS_VERIFY'))
|
||||||
skip_hostname_check = options.get('--skip-hostname-check', False)
|
skip_hostname_check = options.get('--skip-hostname-check', False)
|
||||||
|
if cert_path is not None and not any((ca_cert, cert, key)):
|
||||||
|
# FIXME: Modify TLSConfig to take a cert_path argument and do this internally
|
||||||
|
cert = os.path.join(cert_path, 'cert.pem')
|
||||||
|
key = os.path.join(cert_path, 'key.pem')
|
||||||
|
ca_cert = os.path.join(cert_path, 'ca.pem')
|
||||||
|
|
||||||
tls_version = get_tls_version(environment or {})
|
tls_version = get_tls_version(environment)
|
||||||
|
|
||||||
advanced_opts = any([ca_cert, cert, key, verify, tls_version])
|
advanced_opts = any([ca_cert, cert, key, verify, tls_version])
|
||||||
|
|
||||||
|
|
|
@ -64,9 +64,9 @@ class DockerClientTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
class TLSConfigTestCase(unittest.TestCase):
|
class TLSConfigTestCase(unittest.TestCase):
|
||||||
ca_cert = 'tests/fixtures/tls/ca.pem'
|
ca_cert = os.path.join('tests/fixtures/tls/', 'ca.pem')
|
||||||
client_cert = 'tests/fixtures/tls/cert.pem'
|
client_cert = os.path.join('tests/fixtures/tls/', 'cert.pem')
|
||||||
key = 'tests/fixtures/tls/key.key'
|
key = os.path.join('tests/fixtures/tls/', 'key.pem')
|
||||||
|
|
||||||
def test_simple_tls(self):
|
def test_simple_tls(self):
|
||||||
options = {'--tls': True}
|
options = {'--tls': True}
|
||||||
|
@ -168,6 +168,26 @@ class TLSConfigTestCase(unittest.TestCase):
|
||||||
assert isinstance(result, docker.tls.TLSConfig)
|
assert isinstance(result, docker.tls.TLSConfig)
|
||||||
assert result.ssl_version == ssl.PROTOCOL_TLSv1
|
assert result.ssl_version == ssl.PROTOCOL_TLSv1
|
||||||
|
|
||||||
|
def test_tls_mixed_environment_and_flags(self):
|
||||||
|
options = {'--tls': True, '--tlsverify': False}
|
||||||
|
environment = {'DOCKER_CERT_PATH': 'tests/fixtures/tls/'}
|
||||||
|
result = tls_config_from_options(options, environment)
|
||||||
|
assert isinstance(result, docker.tls.TLSConfig)
|
||||||
|
assert result.cert == (self.client_cert, self.key)
|
||||||
|
assert result.ca_cert == self.ca_cert
|
||||||
|
assert result.verify is False
|
||||||
|
|
||||||
|
def test_tls_flags_override_environment(self):
|
||||||
|
environment = {'DOCKER_TLS_VERIFY': True}
|
||||||
|
options = {'--tls': True, '--tlsverify': False}
|
||||||
|
assert tls_config_from_options(options, environment) is True
|
||||||
|
|
||||||
|
environment['COMPOSE_TLS_VERSION'] = 'TLSv1'
|
||||||
|
result = tls_config_from_options(options, environment)
|
||||||
|
assert isinstance(result, docker.tls.TLSConfig)
|
||||||
|
assert result.ssl_version == ssl.PROTOCOL_TLSv1
|
||||||
|
assert result.verify is False
|
||||||
|
|
||||||
|
|
||||||
class TestGetTlsVersion(object):
|
class TestGetTlsVersion(object):
|
||||||
def test_get_tls_version_default(self):
|
def test_get_tls_version_default(self):
|
||||||
|
|
Loading…
Reference in New Issue