Skip to content

Commit ad5f49b

Browse files
authored
Merge pull request #1918 from rycus86/service-restart-method
Shorthand method for service.restart()
2 parents 8fd9d3c + e54e8f4 commit ad5f49b

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

docker/models/services.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ def update(self, **kwargs):
6969
spec = self.attrs['Spec']['TaskTemplate']['ContainerSpec']
7070
kwargs['image'] = spec['Image']
7171

72+
if kwargs.get('force_update') is True:
73+
task_template = self.attrs['Spec']['TaskTemplate']
74+
current_value = int(task_template.get('ForceUpdate', 0))
75+
kwargs['force_update'] = current_value + 1
76+
7277
create_kwargs = _get_create_service_kwargs('update', kwargs)
7378

7479
return self.client.api.update_service(
@@ -124,6 +129,16 @@ def scale(self, replicas):
124129
service_mode,
125130
fetch_current_spec=True)
126131

132+
def force_update(self):
133+
"""
134+
Force update the service even if no changes require it.
135+
136+
Returns:
137+
``True``if successful.
138+
"""
139+
140+
return self.update(force_update=True, fetch_current_spec=True)
141+
127142

128143
class ServiceCollection(Collection):
129144
"""Services on the Docker server."""

tests/integration/models_services_test.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ def test_scale_method_global_service(self):
276276
assert spec.get('Command') == ['sleep', '300']
277277

278278
@helpers.requires_api_version('1.25')
279-
def test_restart_service(self):
279+
def test_force_update_service(self):
280280
client = docker.from_env(version=TEST_API_VERSION)
281281
service = client.services.create(
282282
# create arguments
@@ -286,7 +286,7 @@ def test_restart_service(self):
286286
command="sleep 300"
287287
)
288288
initial_version = service.version
289-
service.update(
289+
assert service.update(
290290
# create argument
291291
name=service.name,
292292
# task template argument
@@ -296,3 +296,40 @@ def test_restart_service(self):
296296
)
297297
service.reload()
298298
assert service.version > initial_version
299+
300+
@helpers.requires_api_version('1.25')
301+
def test_force_update_service_using_bool(self):
302+
client = docker.from_env(version=TEST_API_VERSION)
303+
service = client.services.create(
304+
# create arguments
305+
name=helpers.random_name(),
306+
# ContainerSpec arguments
307+
image="alpine",
308+
command="sleep 300"
309+
)
310+
initial_version = service.version
311+
assert service.update(
312+
# create argument
313+
name=service.name,
314+
# task template argument
315+
force_update=True,
316+
# ContainerSpec argument
317+
command="sleep 600"
318+
)
319+
service.reload()
320+
assert service.version > initial_version
321+
322+
@helpers.requires_api_version('1.25')
323+
def test_force_update_service_using_shorthand_method(self):
324+
client = docker.from_env(version=TEST_API_VERSION)
325+
service = client.services.create(
326+
# create arguments
327+
name=helpers.random_name(),
328+
# ContainerSpec arguments
329+
image="alpine",
330+
command="sleep 300"
331+
)
332+
initial_version = service.version
333+
assert service.force_update()
334+
service.reload()
335+
assert service.version > initial_version

0 commit comments

Comments
 (0)