Skip to content

Commit a28b9ff

Browse files
authored
Merge pull request #1859 from rycus86/service_network_regression
Fix service network regression on API < 1.25
2 parents bf5e770 + e75a03f commit a28b9ff

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

docker/api/service.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ def create_service(
137137
auth_header = auth.get_config_header(self, registry)
138138
if auth_header:
139139
headers['X-Registry-Auth'] = auth_header
140+
if utils.version_lt(self._version, '1.25'):
141+
networks = networks or task_template.pop('Networks', None)
140142
data = {
141143
'Name': name,
142144
'Labels': labels,
@@ -411,7 +413,12 @@ def update_service(self, service, version, task_template=None, name=None,
411413

412414
if networks is not None:
413415
converted_networks = utils.convert_service_networks(networks)
414-
data['TaskTemplate']['Networks'] = converted_networks
416+
if utils.version_lt(self._version, '1.25'):
417+
data['Networks'] = converted_networks
418+
else:
419+
data['TaskTemplate']['Networks'] = converted_networks
420+
elif utils.version_lt(self._version, '1.25'):
421+
data['Networks'] = current.get('Networks')
415422
elif data['TaskTemplate'].get('Networks') is None:
416423
current_task_template = current.get('TaskTemplate', {})
417424
current_networks = current_task_template.get('Networks')

tests/integration/models_services_test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,30 @@ def test_update_remove_service_labels(self):
179179
service.reload()
180180
assert not service.attrs['Spec'].get('Labels')
181181

182+
def test_update_retains_networks(self):
183+
client = docker.from_env(version=TEST_API_VERSION)
184+
network_name = helpers.random_name()
185+
network = client.networks.create(
186+
network_name, driver='overlay'
187+
)
188+
service = client.services.create(
189+
# create arguments
190+
name=helpers.random_name(),
191+
networks=[network.id],
192+
# ContainerSpec arguments
193+
image="alpine",
194+
command="sleep 300"
195+
)
196+
service.update(
197+
# create argument
198+
name=service.name,
199+
# ContainerSpec argument
200+
command="sleep 600"
201+
)
202+
service.reload()
203+
networks = service.attrs['Spec']['TaskTemplate']['Networks']
204+
assert networks == [{'Target': network.id}]
205+
182206
def test_scale_service(self):
183207
client = docker.from_env(version=TEST_API_VERSION)
184208
service = client.services.create(

0 commit comments

Comments
 (0)