mirror of https://github.com/docker/docker-py.git
Use create_host_config in start (unifying parameter processing)
This commit is contained in:
parent
53d61a77b6
commit
2218dbaa67
|
@ -911,63 +911,7 @@ class Client(requests.Session):
|
||||||
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
|
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
|
||||||
extra_hosts=None):
|
extra_hosts=None):
|
||||||
|
|
||||||
start_config = {}
|
if utils.compare_version('1.10', self._version) < 0:
|
||||||
|
|
||||||
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 dns is not None:
|
if dns is not None:
|
||||||
raise errors.APIError(
|
raise errors.APIError(
|
||||||
'dns is only supported for API version >= 1.10'
|
'dns is only supported for API version >= 1.10'
|
||||||
|
@ -976,23 +920,18 @@ class Client(requests.Session):
|
||||||
raise errors.APIError(
|
raise errors.APIError(
|
||||||
'volumes_from is only supported for API version >= 1.10'
|
'volumes_from is only supported for API version >= 1.10'
|
||||||
)
|
)
|
||||||
if dns_search:
|
|
||||||
start_config['DnsSearch'] = dns_search
|
|
||||||
|
|
||||||
if network_mode:
|
start_config = utils.create_host_config(
|
||||||
start_config['NetworkMode'] = network_mode
|
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 restart_policy:
|
if isinstance(container, dict):
|
||||||
start_config['RestartPolicy'] = restart_policy
|
container = container.get('Id')
|
||||||
|
|
||||||
if cap_add:
|
|
||||||
start_config['CapAdd'] = cap_add
|
|
||||||
|
|
||||||
if cap_drop:
|
|
||||||
start_config['CapDrop'] = cap_drop
|
|
||||||
|
|
||||||
if devices:
|
|
||||||
start_config['Devices'] = utils.parse_devices(devices)
|
|
||||||
|
|
||||||
url = self._url("/containers/{0}/start".format(container))
|
url = self._url("/containers/{0}/start".format(container))
|
||||||
if not start_config:
|
if not start_config:
|
||||||
|
|
|
@ -303,10 +303,13 @@ def create_host_config(
|
||||||
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
|
restart_policy=None, cap_add=None, cap_drop=None, devices=None,
|
||||||
extra_hosts=None
|
extra_hosts=None
|
||||||
):
|
):
|
||||||
host_config = {
|
host_config = {}
|
||||||
'Privileged': privileged,
|
|
||||||
'PublishAllPorts': publish_all_ports,
|
if privileged:
|
||||||
}
|
host_config['Privileged'] = privileged
|
||||||
|
|
||||||
|
if publish_all_ports:
|
||||||
|
host_config['PublishAllPorts'] = publish_all_ports
|
||||||
|
|
||||||
if dns_search:
|
if dns_search:
|
||||||
host_config['DnsSearch'] = dns_search
|
host_config['DnsSearch'] = dns_search
|
||||||
|
@ -351,8 +354,6 @@ def create_host_config(
|
||||||
|
|
||||||
host_config['ExtraHosts'] = extra_hosts
|
host_config['ExtraHosts'] = extra_hosts
|
||||||
|
|
||||||
host_config['PublishAllPorts'] = publish_all_ports
|
|
||||||
|
|
||||||
if links:
|
if links:
|
||||||
if isinstance(links, dict):
|
if isinstance(links, dict):
|
||||||
links = six.iteritems(links)
|
links = six.iteritems(links)
|
||||||
|
@ -368,6 +369,8 @@ def create_host_config(
|
||||||
for k, v in six.iteritems(lxc_conf):
|
for k, v in six.iteritems(lxc_conf):
|
||||||
formatted.append({'Key': k, 'Value': str(v)})
|
formatted.append({'Key': k, 'Value': str(v)})
|
||||||
lxc_conf = formatted
|
lxc_conf = formatted
|
||||||
host_config['LxcConf'] = lxc_conf
|
|
||||||
|
if lxc_conf:
|
||||||
|
host_config['LxcConf'] = lxc_conf
|
||||||
|
|
||||||
return host_config
|
return host_config
|
||||||
|
|
|
@ -733,7 +733,6 @@ class DockerClientTest(Cleanup, unittest.TestCase):
|
||||||
args = fake_request.call_args
|
args = fake_request.call_args
|
||||||
self.assertEqual(args[0][0], url_prefix + 'containers/create')
|
self.assertEqual(args[0][0], url_prefix + 'containers/create')
|
||||||
data = json.loads(args[1]['data'])
|
data = json.loads(args[1]['data'])
|
||||||
self.assertEqual(data['HostConfig']['PublishAllPorts'], False)
|
|
||||||
port_bindings = data['HostConfig']['PortBindings']
|
port_bindings = data['HostConfig']['PortBindings']
|
||||||
self.assertTrue('1111/tcp' in port_bindings)
|
self.assertTrue('1111/tcp' in port_bindings)
|
||||||
self.assertTrue('2222/tcp' in port_bindings)
|
self.assertTrue('2222/tcp' in port_bindings)
|
||||||
|
|
|
@ -5,7 +5,8 @@ import unittest
|
||||||
from docker.client import Client
|
from docker.client import Client
|
||||||
from docker.errors import DockerException
|
from docker.errors import DockerException
|
||||||
from docker.utils import (
|
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:
|
for filters, expected in tests:
|
||||||
self.assertEqual(convert_filters(filters), expected)
|
self.assertEqual(convert_filters(filters), expected)
|
||||||
|
|
||||||
|
def test_create_host_config(self):
|
||||||
|
empty_config = create_host_config()
|
||||||
|
self.assertEqual(empty_config, {})
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue