summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <f.joffrey@gmail.com>2016-09-14 11:08:49 -0700
committerGitHub <noreply@github.com>2016-09-14 11:08:49 -0700
commitad350b95b12d32f636dcf1fb744fde709ac66199 (patch)
tree0abe0d61d0eee40c33633216a0aef5fb3a49ff01
parente676840945217d47b510bbc1c3232c1228fb809a (diff)
parentca51ad29a504f664d673e92f9ab8e7d94b50d111 (diff)
downloaddocker-py-ad350b95b12d32f636dcf1fb744fde709ac66199.tar.gz
Merge pull request #1214 from bfirsh/ignore-not-in-swarm-error-when-leaving
Ignore not in swarm error when force leaving
-rw-r--r--docker/api/swarm.py6
-rw-r--r--tests/integration/service_test.py10
-rw-r--r--tests/integration/swarm_test.py11
3 files changed, 10 insertions, 17 deletions
diff --git a/docker/api/swarm.py b/docker/api/swarm.py
index d099364..7481c67 100644
--- a/docker/api/swarm.py
+++ b/docker/api/swarm.py
@@ -1,5 +1,6 @@
-from .. import utils
import logging
+from six.moves import http_client
+from .. import utils
log = logging.getLogger(__name__)
@@ -53,6 +54,9 @@ class SwarmApiMixin(object):
def leave_swarm(self, force=False):
url = self._url('/swarm/leave')
response = self._post(url, params={'force': force})
+ # Ignore "this node is not part of a swarm" error
+ if force and response.status_code == http_client.NOT_ACCEPTABLE:
+ return True
self._raise_for_status(response)
return True
diff --git a/tests/integration/service_test.py b/tests/integration/service_test.py
index 2b99316..3543894 100644
--- a/tests/integration/service_test.py
+++ b/tests/integration/service_test.py
@@ -12,10 +12,7 @@ BUSYBOX = helpers.BUSYBOX
class ServiceTest(helpers.BaseTestCase):
def setUp(self):
super(ServiceTest, self).setUp()
- try:
- self.client.leave_swarm(force=True)
- except docker.errors.APIError:
- pass
+ self.client.leave_swarm(force=True)
self.client.init_swarm('eth0')
def tearDown(self):
@@ -25,10 +22,7 @@ class ServiceTest(helpers.BaseTestCase):
self.client.remove_service(service['ID'])
except docker.errors.APIError:
pass
- try:
- self.client.leave_swarm(force=True)
- except docker.errors.APIError:
- pass
+ self.client.leave_swarm(force=True)
def get_service_name(self):
return 'dockerpytest_{0:x}'.format(random.getrandbits(64))
diff --git a/tests/integration/swarm_test.py b/tests/integration/swarm_test.py
index 128628e..8c62f2e 100644
--- a/tests/integration/swarm_test.py
+++ b/tests/integration/swarm_test.py
@@ -11,17 +11,11 @@ BUSYBOX = helpers.BUSYBOX
class SwarmTest(helpers.BaseTestCase):
def setUp(self):
super(SwarmTest, self).setUp()
- try:
- self.client.leave_swarm(force=True)
- except docker.errors.APIError:
- pass
+ self.client.leave_swarm(force=True)
def tearDown(self):
super(SwarmTest, self).tearDown()
- try:
- self.client.leave_swarm(force=True)
- except docker.errors.APIError:
- pass
+ self.client.leave_swarm(force=True)
@requires_api_version('1.24')
def test_init_swarm_simple(self):
@@ -65,6 +59,7 @@ class SwarmTest(helpers.BaseTestCase):
with pytest.raises(docker.errors.APIError) as exc_info:
self.client.inspect_swarm()
exc_info.value.response.status_code == 406
+ assert self.client.leave_swarm(force=True)
@requires_api_version('1.24')
def test_update_swarm(self):