浏览代码

Fixed typos + simplified TLSConfig creation process.

Signed-off-by: Joffrey F <[email protected]>
Joffrey F 9 年之前
父节点
当前提交
7166408d2a
共有 3 个文件被更改,包括 37 次插入50 次删除
  1. 6 6
      compose/cli/command.py
  2. 20 33
      compose/cli/docker_client.py
  3. 11 11
      compose/cli/main.py

+ 6 - 6
compose/cli/command.py

@@ -12,7 +12,7 @@ from .. import config
 from ..const import API_VERSIONS
 from ..project import Project
 from .docker_client import docker_client
-from .docker_client import TLSArgs
+from .docker_client import tls_config_from_options
 from .utils import get_version_info
 
 log = logging.getLogger(__name__)
@@ -25,7 +25,7 @@ def project_from_options(project_dir, options):
         project_name=options.get('--project-name'),
         verbose=options.get('--verbose'),
         host=options.get('--host'),
-        tls_args=TLSArgs.from_options(options),
+        tls_config=tls_config_from_options(options),
     )
 
 
@@ -40,8 +40,8 @@ def get_config_path_from_options(options):
     return None
 
 
-def get_client(verbose=False, version=None, tls_args=None, host=None):
-    client = docker_client(version=version, tls_args=tls_args, host=host)
+def get_client(verbose=False, version=None, tls_config=None, host=None):
+    client = docker_client(version=version, tls_config=tls_config, host=host)
     if verbose:
         version_info = six.iteritems(client.version())
         log.info(get_version_info('full'))
@@ -53,7 +53,7 @@ def get_client(verbose=False, version=None, tls_args=None, host=None):
 
 
 def get_project(project_dir, config_path=None, project_name=None, verbose=False,
-                host=None, tls_args=None):
+                host=None, tls_config=None):
     config_details = config.find(project_dir, config_path)
     project_name = get_project_name(config_details.working_dir, project_name)
     config_data = config.load(config_details)
@@ -62,7 +62,7 @@ def get_project(project_dir, config_path=None, project_name=None, verbose=False,
         'COMPOSE_API_VERSION',
         API_VERSIONS[config_data.version])
     client = get_client(
-        verbose=verbose, version=api_version, tls_args=tls_args,
+        verbose=verbose, version=api_version, tls_config=tls_config,
         host=host
     )
 

+ 20 - 33
compose/cli/docker_client.py

@@ -3,7 +3,6 @@ from __future__ import unicode_literals
 
 import logging
 import os
-from collections import namedtuple
 
 from docker import Client
 from docker.errors import TLSParameterError
@@ -16,24 +15,27 @@ from .errors import UserError
 log = logging.getLogger(__name__)
 
 
-class TLSArgs(namedtuple('_TLSArgs', 'tls cert key ca_cert verify')):
-    @classmethod
-    def from_options(cls, options):
-        return cls(
-            tls=options.get('--tls', False),
-            ca_cert=options.get('--tlscacert'),
-            cert=options.get('--tlscert'),
-            key=options.get('--tlskey'),
-            verify=options.get('--tlsverify')
-        )
+def tls_config_from_options(options):
+    tls = options.get('--tls', False)
+    ca_cert = options.get('--tlscacert')
+    cert = options.get('--tlscert')
+    key = options.get('--tlskey')
+    verify = options.get('--tlsverify')
 
-    # def has_config(self):
-    #     return (
-    #         self.tls or self.ca_cert or self.cert or self.key or self.verify
-    #     )
+    if tls is True:
+        return True
+    elif any([ca_cert, cert, key, verify]):
+        client_cert = None
+        if cert or key:
+            client_cert = (cert, key)
+        return TLSConfig(
+            client_cert=client_cert, verify=verify, ca_cert=ca_cert
+        )
+    else:
+        return None
 
 
-def docker_client(version=None, tls_args=None, host=None):
+def docker_client(version=None, tls_config=None, host=None):
     """
     Returns a docker-py client configured using environment variables
     according to the same logic as the official Docker client.
@@ -52,23 +54,8 @@ def docker_client(version=None, tls_args=None, host=None):
 
     if host:
         kwargs['base_url'] = host
-    if tls_args and any(tls_args):
-        if tls_args.tls is True:
-            kwargs['tls'] = True
-        else:
-            client_cert = None
-            if tls_args.cert or tls_args.key:
-                client_cert = (tls_args.cert, tls_args.key)
-            try:
-                kwargs['tls'] = TLSConfig(
-                    client_cert=client_cert, verify=tls_args.verify,
-                    ca_cert=tls_args.ca_cert
-                )
-            except TLSParameterError as e:
-                raise UserError(
-                    "TLS configuration is invalid. Please double-check the "
-                    "TLS command-line arguments. ({0})".format(e)
-                )
+    if tls_config:
+        kwargs['tls'] = tls_config
 
     if version:
         kwargs['version'] = version

+ 11 - 11
compose/cli/main.py

@@ -145,17 +145,17 @@ class TopLevelCommand(object):
       docker-compose -h|--help
 
     Options:
-      -f, --file FILE           Specify an alternate compose file (default: docker-compose.yml)
-      -p, --project-name NAME   Specify an alternate project name (default: directory name)
-      --verbose                 Show more output
-      -v, --version             Print version and exit
-      -H, --host HOST           Daemon socket to connect to
-
-      --tls                     Use TLS; implied by --tlsverify
-      --tlsacert                Trust certs signed only by this CA
-      --tlscert                 Path to TLS certificate file
-      --tlskey                  Path to TLS key file
-      --tlsverify               Use TLS and verify the remote
+      -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
+      -p, --project-name NAME     Specify an alternate project name (default: directory name)
+      --verbose                   Show more output
+      -v, --version               Print version and exit
+      -H, --host HOST             Daemon socket to connect to
+
+      --tls                       Use TLS; implied by --tlsverify
+      --tlscacert CA_PATH         Trust certs signed only by this CA
+      --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
+      --tlskey TLS_KEY_PATH       Path to TLS key file
+      --tlsverify                 Use TLS and verify the remote
 
     Commands:
       build              Build or rebuild services