diff options
author | Joffrey F <joffrey@docker.com> | 2014-12-18 18:03:27 -0800 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2014-12-18 18:03:27 -0800 |
commit | 2218dbaa6772838020e2836ac5dd2fddd4f3f574 (patch) | |
tree | 2f4719e88a84b5b8d40cd4fc842a2063ba589134 | |
parent | 53d61a77b6fe3fe4178334511f20c2a292d1ce04 (diff) | |
download | docker-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.py | 83 | ||||
-rw-r--r-- | docker/utils/utils.py | 17 | ||||
-rw-r--r-- | tests/test.py | 1 | ||||
-rw-r--r-- | tests/utils_test.py | 7 |
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() |