summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2014-12-18 18:03:27 -0800
committerJoffrey F <joffrey@docker.com>2014-12-18 18:03:27 -0800
commit2218dbaa6772838020e2836ac5dd2fddd4f3f574 (patch)
tree2f4719e88a84b5b8d40cd4fc842a2063ba589134
parent53d61a77b6fe3fe4178334511f20c2a292d1ce04 (diff)
downloaddocker-py-0.7.0-release.tar.gz
Use create_host_config in start (unifying parameter processing)0.7.0-release
-rw-r--r--docker/client.py83
-rw-r--r--docker/utils/utils.py17
-rw-r--r--tests/test.py1
-rw-r--r--tests/utils_test.py7
4 files changed, 27 insertions, 81 deletions
diff --git a/docker/client.py b/docker/client.py
index 7032c06..1aa9ed6 100644
--- a/docker/client.py
+++ b/docker/client.py
@@ -911,63 +911,7 @@ class Client(requests.Session):
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
extra_hosts=None):
- start_config = {}
-
- if isinstance(container, dict):
- container = container.get('Id')
-
- if isinstance(lxc_conf, dict):
- formatted = []
- for k, v in six.iteritems(lxc_conf):
- formatted.append({'Key': k, 'Value': str(v)})
- lxc_conf = formatted
-
- if lxc_conf:
- start_config['LxcConf'] = lxc_conf
-
- if binds:
- start_config['Binds'] = utils.convert_volume_binds(binds)
-
- if port_bindings:
- start_config['PortBindings'] = utils.convert_port_bindings(
- port_bindings
- )
-
- if publish_all_ports:
- start_config['PublishAllPorts'] = publish_all_ports
-
- if links:
- if isinstance(links, dict):
- links = six.iteritems(links)
-
- formatted_links = [
- '{0}:{1}'.format(k, v) for k, v in sorted(links)
- ]
-
- start_config['Links'] = formatted_links
-
- if extra_hosts:
- if isinstance(extra_hosts, dict):
- extra_hosts = six.iteritems(extra_hosts)
-
- formatted_extra_hosts = [
- '{0}:{1}'.format(k, v) for k, v in sorted(extra_hosts)
- ]
-
- start_config['ExtraHosts'] = formatted_extra_hosts
-
- if privileged:
- start_config['Privileged'] = privileged
-
- if utils.compare_version('1.10', self._version) >= 0:
- if dns is not None:
- start_config['Dns'] = dns
- if volumes_from is not None:
- if isinstance(volumes_from, six.string_types):
- volumes_from = volumes_from.split(',')
- start_config['VolumesFrom'] = volumes_from
- else:
-
+ if utils.compare_version('1.10', self._version) < 0:
if dns is not None:
raise errors.APIError(
'dns is only supported for API version >= 1.10'
@@ -976,23 +920,18 @@ class Client(requests.Session):
raise errors.APIError(
'volumes_from is only supported for API version >= 1.10'
)
- if dns_search:
- start_config['DnsSearch'] = dns_search
-
- if network_mode:
- start_config['NetworkMode'] = network_mode
-
- if restart_policy:
- start_config['RestartPolicy'] = restart_policy
-
- if cap_add:
- start_config['CapAdd'] = cap_add
- if cap_drop:
- start_config['CapDrop'] = cap_drop
+ start_config = utils.create_host_config(
+ binds=binds, port_bindings=port_bindings, lxc_conf=lxc_conf,
+ publish_all_ports=publish_all_ports, links=links, dns=dns,
+ privileged=privileged, dns_search=dns_search, cap_add=cap_add,
+ cap_drop=cap_drop, volumes_from=volumes_from, devices=devices,
+ network_mode=network_mode, restart_policy=restart_policy,
+ extra_hosts=extra_hosts
+ )
- if devices:
- start_config['Devices'] = utils.parse_devices(devices)
+ if isinstance(container, dict):
+ container = container.get('Id')
url = self._url("/containers/{0}/start".format(container))
if not start_config:
diff --git a/docker/utils/utils.py b/docker/utils/utils.py
index 6025db8..a554952 100644
--- a/docker/utils/utils.py
+++ b/docker/utils/utils.py
@@ -303,10 +303,13 @@ def create_host_config(
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
extra_hosts=None
):
- host_config = {
- 'Privileged': privileged,
- 'PublishAllPorts': publish_all_ports,
- }
+ host_config = {}
+
+ if privileged:
+ host_config['Privileged'] = privileged
+
+ if publish_all_ports:
+ host_config['PublishAllPorts'] = publish_all_ports
if dns_search:
host_config['DnsSearch'] = dns_search
@@ -351,8 +354,6 @@ def create_host_config(
host_config['ExtraHosts'] = extra_hosts
- host_config['PublishAllPorts'] = publish_all_ports
-
if links:
if isinstance(links, dict):
links = six.iteritems(links)
@@ -368,6 +369,8 @@ def create_host_config(
for k, v in six.iteritems(lxc_conf):
formatted.append({'Key': k, 'Value': str(v)})
lxc_conf = formatted
- host_config['LxcConf'] = lxc_conf
+
+ if lxc_conf:
+ host_config['LxcConf'] = lxc_conf
return host_config
diff --git a/tests/test.py b/tests/test.py
index 2a22b3c..bd56d64 100644
--- a/tests/test.py
+++ b/tests/test.py
@@ -733,7 +733,6 @@ class DockerClientTest(Cleanup, unittest.TestCase):
args = fake_request.call_args
self.assertEqual(args[0][0], url_prefix + 'containers/create')
data = json.loads(args[1]['data'])
- self.assertEqual(data['HostConfig']['PublishAllPorts'], False)
port_bindings = data['HostConfig']['PortBindings']
self.assertTrue('1111/tcp' in port_bindings)
self.assertTrue('2222/tcp' in port_bindings)
diff --git a/tests/utils_test.py b/tests/utils_test.py
index 9023b08..2708302 100644
--- a/tests/utils_test.py
+++ b/tests/utils_test.py
@@ -5,7 +5,8 @@ import unittest
from docker.client import Client
from docker.errors import DockerException
from docker.utils import (
- parse_repository_tag, parse_host, convert_filters, kwargs_from_env
+ parse_repository_tag, parse_host, convert_filters, kwargs_from_env,
+ create_host_config
)
@@ -95,6 +96,10 @@ class UtilsTest(unittest.TestCase):
for filters, expected in tests:
self.assertEqual(convert_filters(filters), expected)
+ def test_create_host_config(self):
+ empty_config = create_host_config()
+ self.assertEqual(empty_config, {})
+
if __name__ == '__main__':
unittest.main()