summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2016-08-31 18:41:17 -0700
committerJoffrey F <joffrey@docker.com>2016-08-31 18:44:36 -0700
commit6552076856bed2925b1611326630b341f27f41b2 (patch)
tree93d8f9fdd3c8a677cca192468c3e860b9cfe9488
parenta665dfb3750058aaaa074799d5262876cb821884 (diff)
downloaddocker-py-6552076856bed2925b1611326630b341f27f41b2.tar.gz
Add support for force disconnect1105-network-api
Signed-off-by: Joffrey F <joffrey@docker.com>
-rw-r--r--docker/api/network.py11
-rw-r--r--docs/api.md2
-rw-r--r--tests/integration/network_test.py30
-rw-r--r--tests/unit/network_test.py2
4 files changed, 41 insertions, 4 deletions
diff --git a/docker/api/network.py b/docker/api/network.py
index c4f48c2..0ee0dab 100644
--- a/docker/api/network.py
+++ b/docker/api/network.py
@@ -93,8 +93,15 @@ class NetworkApiMixin(object):
@check_resource
@minimum_version('1.21')
- def disconnect_container_from_network(self, container, net_id):
- data = {"container": container}
+ def disconnect_container_from_network(self, container, net_id,
+ force=False):
+ data = {"Container": container}
+ if force:
+ if version_lt(self._version, '1.22'):
+ raise InvalidVersion(
+ 'Forced disconnect was introduced in API 1.22'
+ )
+ data['Force'] = force
url = self._url("/networks/{0}/disconnect", net_id)
res = self._post_json(url, data=data)
self._raise_for_status(res)
diff --git a/docs/api.md b/docs/api.md
index 6af330a..1699344 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -355,6 +355,8 @@ Inspect changes on a container's filesystem.
* container (str): container-id/name to be disconnected from a network
* net_id (str): network id
+* force (bool): Force the container to disconnect from a network.
+ Default: `False`
## events
diff --git a/tests/integration/network_test.py b/tests/integration/network_test.py
index 70dff06..6726db4 100644
--- a/tests/integration/network_test.py
+++ b/tests/integration/network_test.py
@@ -115,7 +115,8 @@ class TestNetworks(helpers.BaseTestCase):
network_data = self.client.inspect_network(net_id)
self.assertEqual(
list(network_data['Containers'].keys()),
- [container['Id']])
+ [container['Id']]
+ )
with pytest.raises(docker.errors.APIError):
self.client.connect_container_to_network(container, net_id)
@@ -128,6 +129,33 @@ class TestNetworks(helpers.BaseTestCase):
self.client.disconnect_container_from_network(container, net_id)
@requires_api_version('1.22')
+ def test_connect_and_force_disconnect_container(self):
+ net_name, net_id = self.create_network()
+
+ container = self.client.create_container('busybox', 'top')
+ self.tmp_containers.append(container)
+ self.client.start(container)
+
+ network_data = self.client.inspect_network(net_id)
+ self.assertFalse(network_data.get('Containers'))
+
+ self.client.connect_container_to_network(container, net_id)
+ network_data = self.client.inspect_network(net_id)
+ self.assertEqual(
+ list(network_data['Containers'].keys()),
+ [container['Id']]
+ )
+
+ self.client.disconnect_container_from_network(container, net_id, True)
+ network_data = self.client.inspect_network(net_id)
+ self.assertFalse(network_data.get('Containers'))
+
+ with pytest.raises(docker.errors.APIError):
+ self.client.disconnect_container_from_network(
+ container, net_id, force=True
+ )
+
+ @requires_api_version('1.22')
def test_connect_with_aliases(self):
net_name, net_id = self.create_network()
diff --git a/tests/unit/network_test.py b/tests/unit/network_test.py
index 5bba9db..2521688 100644
--- a/tests/unit/network_test.py
+++ b/tests/unit/network_test.py
@@ -184,4 +184,4 @@ class NetworkTest(DockerClientTest):
self.assertEqual(
json.loads(post.call_args[1]['data']),
- {'container': container_id})
+ {'Container': container_id})