diff options
author | Joffrey F <joffrey@docker.com> | 2016-08-31 18:41:17 -0700 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2016-08-31 18:44:36 -0700 |
commit | 6552076856bed2925b1611326630b341f27f41b2 (patch) | |
tree | 93d8f9fdd3c8a677cca192468c3e860b9cfe9488 | |
parent | a665dfb3750058aaaa074799d5262876cb821884 (diff) | |
download | docker-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.py | 11 | ||||
-rw-r--r-- | docs/api.md | 2 | ||||
-rw-r--r-- | tests/integration/network_test.py | 30 | ||||
-rw-r--r-- | tests/unit/network_test.py | 2 |
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}) |