summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <f.joffrey@gmail.com>2018-02-21 12:05:10 -0800
committerGitHub <noreply@github.com>2018-02-21 12:05:10 -0800
commitad5f49b690b2e2838ca124291db500d25a3d6cf1 (patch)
treedc91c4caae9415b1c22324755e425e0effa36d6f
parent8fd9d3c99e9314323228af4832054b22d2ac4966 (diff)
parente54e8f41993e5fd6378b15c5ab9a3d43615b8618 (diff)
downloaddocker-py-ad5f49b690b2e2838ca124291db500d25a3d6cf1.tar.gz
Merge pull request #1918 from rycus86/service-restart-method
Shorthand method for service.restart()
-rw-r--r--docker/models/services.py15
-rw-r--r--tests/integration/models_services_test.py41
2 files changed, 54 insertions, 2 deletions
diff --git a/docker/models/services.py b/docker/models/services.py
index 8a633df..125896b 100644
--- a/docker/models/services.py
+++ b/docker/models/services.py
@@ -69,6 +69,11 @@ class Service(Model):
spec = self.attrs['Spec']['TaskTemplate']['ContainerSpec']
kwargs['image'] = spec['Image']
+ if kwargs.get('force_update') is True:
+ task_template = self.attrs['Spec']['TaskTemplate']
+ current_value = int(task_template.get('ForceUpdate', 0))
+ kwargs['force_update'] = current_value + 1
+
create_kwargs = _get_create_service_kwargs('update', kwargs)
return self.client.api.update_service(
@@ -124,6 +129,16 @@ class Service(Model):
service_mode,
fetch_current_spec=True)
+ def force_update(self):
+ """
+ Force update the service even if no changes require it.
+
+ Returns:
+ ``True``if successful.
+ """
+
+ return self.update(force_update=True, fetch_current_spec=True)
+
class ServiceCollection(Collection):
"""Services on the Docker server."""
diff --git a/tests/integration/models_services_test.py b/tests/integration/models_services_test.py
index cb8eca2..36caa85 100644
--- a/tests/integration/models_services_test.py
+++ b/tests/integration/models_services_test.py
@@ -276,7 +276,7 @@ class ServiceTest(unittest.TestCase):
assert spec.get('Command') == ['sleep', '300']
@helpers.requires_api_version('1.25')
- def test_restart_service(self):
+ def test_force_update_service(self):
client = docker.from_env(version=TEST_API_VERSION)
service = client.services.create(
# create arguments
@@ -286,7 +286,7 @@ class ServiceTest(unittest.TestCase):
command="sleep 300"
)
initial_version = service.version
- service.update(
+ assert service.update(
# create argument
name=service.name,
# task template argument
@@ -296,3 +296,40 @@ class ServiceTest(unittest.TestCase):
)
service.reload()
assert service.version > initial_version
+
+ @helpers.requires_api_version('1.25')
+ def test_force_update_service_using_bool(self):
+ client = docker.from_env(version=TEST_API_VERSION)
+ service = client.services.create(
+ # create arguments
+ name=helpers.random_name(),
+ # ContainerSpec arguments
+ image="alpine",
+ command="sleep 300"
+ )
+ initial_version = service.version
+ assert service.update(
+ # create argument
+ name=service.name,
+ # task template argument
+ force_update=True,
+ # ContainerSpec argument
+ command="sleep 600"
+ )
+ service.reload()
+ assert service.version > initial_version
+
+ @helpers.requires_api_version('1.25')
+ def test_force_update_service_using_shorthand_method(self):
+ client = docker.from_env(version=TEST_API_VERSION)
+ service = client.services.create(
+ # create arguments
+ name=helpers.random_name(),
+ # ContainerSpec arguments
+ image="alpine",
+ command="sleep 300"
+ )
+ initial_version = service.version
+ assert service.force_update()
+ service.reload()
+ assert service.version > initial_version