summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <f.joffrey@gmail.com>2018-01-12 14:49:19 -0800
committerGitHub <noreply@github.com>2018-01-12 14:49:19 -0800
commita28b9ffd8572f0c498cab12a0b4b0748088202f9 (patch)
tree794f4ae7872c38c67dab6e8301180d940c045193
parentbf5e7702df3c835a5db4fc6b86500b4f4b659c14 (diff)
parente75a03fd6d744a96d84179eadfcc47301ca968c7 (diff)
downloaddocker-py-a28b9ffd8572f0c498cab12a0b4b0748088202f9.tar.gz
Merge pull request #1859 from rycus86/service_network_regression
Fix service network regression on API < 1.25
-rw-r--r--docker/api/service.py9
-rw-r--r--tests/integration/models_services_test.py24
2 files changed, 32 insertions, 1 deletions
diff --git a/docker/api/service.py b/docker/api/service.py
index 86f4b07..1a8b8b5 100644
--- a/docker/api/service.py
+++ b/docker/api/service.py
@@ -137,6 +137,8 @@ class ServiceApiMixin(object):
auth_header = auth.get_config_header(self, registry)
if auth_header:
headers['X-Registry-Auth'] = auth_header
+ if utils.version_lt(self._version, '1.25'):
+ networks = networks or task_template.pop('Networks', None)
data = {
'Name': name,
'Labels': labels,
@@ -411,7 +413,12 @@ class ServiceApiMixin(object):
if networks is not None:
converted_networks = utils.convert_service_networks(networks)
- data['TaskTemplate']['Networks'] = converted_networks
+ if utils.version_lt(self._version, '1.25'):
+ data['Networks'] = converted_networks
+ else:
+ data['TaskTemplate']['Networks'] = converted_networks
+ elif utils.version_lt(self._version, '1.25'):
+ data['Networks'] = current.get('Networks')
elif data['TaskTemplate'].get('Networks') is None:
current_task_template = current.get('TaskTemplate', {})
current_networks = current_task_template.get('Networks')
diff --git a/tests/integration/models_services_test.py b/tests/integration/models_services_test.py
index ca8be48..b4df745 100644
--- a/tests/integration/models_services_test.py
+++ b/tests/integration/models_services_test.py
@@ -179,6 +179,30 @@ class ServiceTest(unittest.TestCase):
service.reload()
assert not service.attrs['Spec'].get('Labels')
+ def test_update_retains_networks(self):
+ client = docker.from_env(version=TEST_API_VERSION)
+ network_name = helpers.random_name()
+ network = client.networks.create(
+ network_name, driver='overlay'
+ )
+ service = client.services.create(
+ # create arguments
+ name=helpers.random_name(),
+ networks=[network.id],
+ # ContainerSpec arguments
+ image="alpine",
+ command="sleep 300"
+ )
+ service.update(
+ # create argument
+ name=service.name,
+ # ContainerSpec argument
+ command="sleep 600"
+ )
+ service.reload()
+ networks = service.attrs['Spec']['TaskTemplate']['Networks']
+ assert networks == [{'Target': network.id}]
+
def test_scale_service(self):
client = docker.from_env(version=TEST_API_VERSION)
service = client.services.create(