summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2016-03-09 14:25:12 -0800
committerJoffrey F <joffrey@docker.com>2016-03-09 14:25:12 -0800
commitd8be3e0fce60fbe25be088b64bccbcee83effdb1 (patch)
tree4d7d8182d8fbc58ac9b30bed59e1d46c6eb179dd
parentefc949a3df90e1afdddb743cf440caf304518f5e (diff)
parentb7b0fa6affa47a1186e1a3d20069bc2150aa07f1 (diff)
downloaddocker-py-d8be3e0fce60fbe25be088b64bccbcee83effdb1.tar.gz
Merge branch 'mdaue-935'
-rw-r--r--docker/api/network.py18
-rw-r--r--tests/integration/network_test.py48
2 files changed, 66 insertions, 0 deletions
diff --git a/docker/api/network.py b/docker/api/network.py
index d9a6128..1f9ea9e 100644
--- a/docker/api/network.py
+++ b/docker/api/network.py
@@ -1,6 +1,8 @@
import json
+from ..errors import InvalidVersion
from ..utils import check_resource, minimum_version, normalize_links
+from ..utils import version_lt
class NetworkApiMixin(object):
@@ -48,6 +50,7 @@ class NetworkApiMixin(object):
@check_resource
@minimum_version('1.21')
def connect_container_to_network(self, container, net_id,
+ ipv4_address=None, ipv6_address=None,
aliases=None, links=None):
data = {
"Container": container,
@@ -56,6 +59,21 @@ class NetworkApiMixin(object):
"Links": normalize_links(links) if links else None,
},
}
+
+ # IPv4 or IPv6 or neither:
+ if ipv4_address or ipv6_address:
+ if version_lt(self._version, '1.22'):
+ raise InvalidVersion('IP address assignment is not '
+ 'supported in API version < 1.22')
+
+ data['EndpointConfig']['IPAMConfig'] = dict()
+ if ipv4_address:
+ data['EndpointConfig']['IPAMConfig']['IPv4Address'] = \
+ ipv4_address
+ if ipv6_address:
+ data['EndpointConfig']['IPAMConfig']['IPv6Address'] = \
+ ipv6_address
+
url = self._url("/networks/{0}/connect", net_id)
res = self._post_json(url, data=data)
self._raise_for_status(res)
diff --git a/tests/integration/network_test.py b/tests/integration/network_test.py
index a379bbf..a744617 100644
--- a/tests/integration/network_test.py
+++ b/tests/integration/network_test.py
@@ -235,3 +235,51 @@ class TestNetworks(helpers.BaseTestCase):
)
self.execute(container, ['nslookup', 'bar'])
+
+ @requires_api_version('1.22')
+ def test_connect_with_ipv4_address(self):
+ net_name, net_id = self.create_network()
+
+ container = self.create_and_start(
+ host_config=self.client.create_host_config(network_mode=net_name))
+
+ self.client.disconnect_container_from_network(container, net_name)
+ self.client.connect_container_to_network(
+ container, net_name,
+ ipv4_address='192.168.0.1')
+
+ container_data = self.client.inspect_container(container)
+ self.assertEqual(
+ container_data['NetworkSettings']['Networks'][net_name]
+ ['IPAMConfig']['IPv4Address'],
+ '192.168.0.1')
+
+ self.create_and_start(
+ name='docker-py-test-upstream',
+ host_config=self.client.create_host_config(network_mode=net_name))
+
+ self.execute(container, ['nslookup', 'bar'])
+
+ @requires_api_version('1.22')
+ def test_connect_with_ipv6_address(self):
+ net_name, net_id = self.create_network()
+
+ container = self.create_and_start(
+ host_config=self.client.create_host_config(network_mode=net_name))
+
+ self.client.disconnect_container_from_network(container, net_name)
+ self.client.connect_container_to_network(
+ container, net_name,
+ ipv6_address='2001:389::1')
+
+ container_data = self.client.inspect_container(container)
+ self.assertEqual(
+ container_data['NetworkSettings']['Networks'][net_name]
+ ['IPAMConfig']['IPv6Address'],
+ '2001:389::1')
+
+ self.create_and_start(
+ name='docker-py-test-upstream',
+ host_config=self.client.create_host_config(network_mode=net_name))
+
+ self.execute(container, ['nslookup', 'bar'])