diff options
| author | Joffrey F <f.joffrey@gmail.com> | 2018-01-12 14:49:19 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-12 14:49:19 -0800 |
| commit | a28b9ffd8572f0c498cab12a0b4b0748088202f9 (patch) | |
| tree | 794f4ae7872c38c67dab6e8301180d940c045193 | |
| parent | bf5e7702df3c835a5db4fc6b86500b4f4b659c14 (diff) | |
| parent | e75a03fd6d744a96d84179eadfcc47301ca968c7 (diff) | |
| download | docker-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.py | 9 | ||||
| -rw-r--r-- | tests/integration/models_services_test.py | 24 |
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( |
