Merge pull request #4086 from docker/bump-1.9.0-rc2

Bump 1.9.0 rc2
This commit is contained in:
Joffrey F 2016-10-27 15:33:15 -07:00 committed by GitHub
commit 24e9f66d79
11 changed files with 36 additions and 17 deletions

View File

@ -1,4 +1,4 @@
from __future__ import absolute_import
from __future__ import unicode_literals
__version__ = '1.9.0-rc1'
__version__ = '1.9.0-rc2'

View File

@ -4,6 +4,7 @@ from __future__ import unicode_literals
import contextlib
import logging
import socket
from distutils.spawn import find_executable
from textwrap import dedent
from docker.errors import APIError
@ -13,7 +14,6 @@ from requests.exceptions import SSLError
from requests.packages.urllib3.exceptions import ReadTimeoutError
from ..const import API_VERSION_TO_ENGINE_VERSION
from .utils import call_silently
from .utils import is_docker_for_mac_installed
from .utils import is_mac
from .utils import is_ubuntu
@ -90,11 +90,11 @@ def exit_with_error(msg):
def get_conn_error_message(url):
if call_silently(['which', 'docker']) != 0:
if find_executable('docker') is None:
return docker_not_found_msg("Couldn't connect to Docker daemon.")
if is_docker_for_mac_installed():
return conn_error_docker_for_mac
if call_silently(['which', 'docker-machine']) == 0:
if find_executable('docker-machine') is not None:
return conn_error_docker_machine
return conn_error_generic.format(url=url)

View File

@ -10,6 +10,7 @@ import pipes
import re
import subprocess
import sys
from distutils.spawn import find_executable
from inspect import getdoc
from operator import attrgetter
@ -1063,9 +1064,8 @@ def exit_if(condition, message, exit_code):
def call_docker(args):
try:
executable_path = subprocess.check_output(["which", "docker"]).strip()
except subprocess.CalledProcessError:
executable_path = find_executable('docker')
if not executable_path:
raise UserError(errors.docker_not_found_msg("Couldn't find `docker` binary."))
args = [executable_path] + args

View File

@ -140,6 +140,7 @@
"mac_address": {"type": "string"},
"mem_limit": {"type": ["number", "string"]},
"memswap_limit": {"type": ["number", "string"]},
"mem_swappiness": {"type": "integer"},
"network_mode": {"type": "string"},
"networks": {
@ -168,6 +169,14 @@
}
]
},
"oom_score_adj": {"type": "integer", "minimum": -1000, "maximum": 1000},
"group_add": {
"type": "array",
"items": {
"type": ["string", "number"]
},
"uniqueItems": true
},
"pid": {"type": ["string", "null"]},
"ports": {
@ -248,6 +257,7 @@
},
"additionalProperties": false
},
"internal": {"type": "boolean"},
"enable_ipv6": {"type": "boolean"},
"labels": {"$ref": "#/definitions/list_or_dict"}
},

View File

@ -538,6 +538,10 @@ def get_volumes_from(project, service_dict):
def warn_for_swarm_mode(client):
info = client.info()
if info.get('Swarm', {}).get('LocalNodeState') == 'active':
if info.get('ServerVersion', '').startswith('ucp'):
# UCP does multi-node scheduling with traditional Compose files.
return
log.warn(
"The Docker Engine you're using is running in swarm mode.\n\n"
"Compose does not use swarm mode to deploy services to multiple nodes in a swarm. "

View File

@ -27,6 +27,11 @@ exe = EXE(pyz,
'compose/config/config_schema_v2.0.json',
'DATA'
),
(
'compose/config/config_schema_v2.1.json',
'compose/config/config_schema_v2.1.json',
'DATA'
),
(
'compose/GITSHA',
'compose/GITSHA',

View File

@ -1,7 +1,7 @@
PyYAML==3.11
backports.ssl-match-hostname==3.5.0.1; python_version < '3'
cached-property==1.2.0
docker-py==1.10.4
docker-py==1.10.5
dockerpty==0.4.1
docopt==0.6.1
enum34==1.0.4; python_version < '3.4'

View File

@ -15,7 +15,7 @@
set -e
VERSION="1.9.0-rc1"
VERSION="1.9.0-rc2"
IMAGE="docker/compose:$VERSION"

View File

@ -34,7 +34,7 @@ install_requires = [
'requests >= 2.6.1, != 2.11.0, < 2.12',
'texttable >= 0.8.1, < 0.9',
'websocket-client >= 0.32.0, < 1.0',
'docker-py >= 1.10.4, < 2.0',
'docker-py >= 1.10.5, < 2.0',
'dockerpty >= 0.4.1, < 0.5',
'six >= 1.3.0, < 2',
'jsonschema >= 2.5.1, < 3',

View File

@ -826,9 +826,9 @@ class ProjectTest(DockerClientTestCase):
name='composetest',
config_data=config_data
)
project.up()
project.up(detached=True)
service_container = project.get_service('web').containers()[0]
service_container = project.get_service('web').containers(stopped=True)[0]
ipam_config = service_container.inspect().get(
'NetworkSettings', {}
).get(
@ -857,8 +857,8 @@ class ProjectTest(DockerClientTestCase):
name='composetest',
config_data=config_data
)
project.up()
service_container = project.get_service('web').containers()[0]
project.up(detached=True)
service_container = project.get_service('web').containers(stopped=True)[0]
assert service_container.inspect()['HostConfig']['Isolation'] == 'default'
@v2_1_only()

View File

@ -16,9 +16,9 @@ def mock_logging():
yield mock_log
def patch_call_silently(side_effect):
def patch_find_executable(side_effect):
return mock.patch(
'compose.cli.errors.call_silently',
'compose.cli.errors.find_executable',
autospec=True,
side_effect=side_effect)
@ -27,7 +27,7 @@ class TestHandleConnectionErrors(object):
def test_generic_connection_error(self, mock_logging):
with pytest.raises(errors.ConnectionError):
with patch_call_silently([0, 1]):
with patch_find_executable(['/bin/docker', None]):
with handle_connection_errors(mock.Mock()):
raise ConnectionError()