Skip to content

Commit b7b0fa6

Browse files
committed
Merge branch '935' of https://github.com/mdaue/docker-py into mdaue-935
2 parents efc949a + d4a5bc4 commit b7b0fa6

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

docker/api/network.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import json
22

3+
from ..errors import InvalidVersion
34
from ..utils import check_resource, minimum_version, normalize_links
5+
from ..utils import version_lt
46

57

68
class NetworkApiMixin(object):
@@ -48,6 +50,7 @@ def inspect_network(self, net_id):
4850
@check_resource
4951
@minimum_version('1.21')
5052
def connect_container_to_network(self, container, net_id,
53+
ipv4_address=None, ipv6_address=None,
5154
aliases=None, links=None):
5255
data = {
5356
"Container": container,
@@ -56,6 +59,21 @@ def connect_container_to_network(self, container, net_id,
5659
"Links": normalize_links(links) if links else None,
5760
},
5861
}
62+
63+
# IPv4 or IPv6 or neither:
64+
if ipv4_address or ipv6_address:
65+
if version_lt(self._version, '1.22'):
66+
raise InvalidVersion('IP address assignment is not '
67+
'supported in API version < 1.22')
68+
69+
data['EndpointConfig']['IPAMConfig'] = dict()
70+
if ipv4_address:
71+
data['EndpointConfig']['IPAMConfig']['IPv4Address'] = \
72+
ipv4_address
73+
if ipv6_address:
74+
data['EndpointConfig']['IPAMConfig']['IPv6Address'] = \
75+
ipv6_address
76+
5977
url = self._url("/networks/{0}/connect", net_id)
6078
res = self._post_json(url, data=data)
6179
self._raise_for_status(res)

tests/integration/network_test.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,51 @@ def test_connect_with_links(self):
235235
)
236236

237237
self.execute(container, ['nslookup', 'bar'])
238+
239+
@requires_api_version('1.22')
240+
def test_connect_with_ipv4_address(self):
241+
net_name, net_id = self.create_network()
242+
243+
container = self.create_and_start(
244+
host_config=self.client.create_host_config(network_mode=net_name))
245+
246+
self.client.disconnect_container_from_network(container, net_name)
247+
self.client.connect_container_to_network(
248+
container, net_name,
249+
ipv4_address='192.168.0.1')
250+
251+
container_data = self.client.inspect_container(container)
252+
self.assertEqual(
253+
container_data['NetworkSettings']['Networks'][net_name]
254+
['IPAMConfig']['IPv4Address'],
255+
'192.168.0.1')
256+
257+
self.create_and_start(
258+
name='docker-py-test-upstream',
259+
host_config=self.client.create_host_config(network_mode=net_name))
260+
261+
self.execute(container, ['nslookup', 'bar'])
262+
263+
@requires_api_version('1.22')
264+
def test_connect_with_ipv6_address(self):
265+
net_name, net_id = self.create_network()
266+
267+
container = self.create_and_start(
268+
host_config=self.client.create_host_config(network_mode=net_name))
269+
270+
self.client.disconnect_container_from_network(container, net_name)
271+
self.client.connect_container_to_network(
272+
container, net_name,
273+
ipv6_address='2001:389::1')
274+
275+
container_data = self.client.inspect_container(container)
276+
self.assertEqual(
277+
container_data['NetworkSettings']['Networks'][net_name]
278+
['IPAMConfig']['IPv6Address'],
279+
'2001:389::1')
280+
281+
self.create_and_start(
282+
name='docker-py-test-upstream',
283+
host_config=self.client.create_host_config(network_mode=net_name))
284+
285+
self.execute(container, ['nslookup', 'bar'])

0 commit comments

Comments
 (0)