mirror of https://github.com/docker/docker-py.git
				
				
				
			Add support for DriverOpts in EndpointConfig
Docker API 1.32 added support for providing options to a network driver via EndpointConfig when connecting a container to a network. Signed-off-by: Mike Haboustak <haboustak@gmail.com>
This commit is contained in:
		
							parent
							
								
									10cea0d2a0
								
							
						
					
					
						commit
						4b4379a4c7
					
				|  | @ -636,6 +636,8 @@ class ContainerApiMixin(object): | |||
|                 network, using the IPv6 protocol. Defaults to ``None``. | ||||
|             link_local_ips (:py:class:`list`): A list of link-local (IPv4/IPv6) | ||||
|                 addresses. | ||||
|             driver_opt (dict): A dictionary of options to provide to the | ||||
|                 network driver. Defaults to ``None``. | ||||
| 
 | ||||
|         Returns: | ||||
|             (dict) An endpoint config. | ||||
|  |  | |||
|  | @ -216,7 +216,7 @@ class NetworkApiMixin(object): | |||
|     def connect_container_to_network(self, container, net_id, | ||||
|                                      ipv4_address=None, ipv6_address=None, | ||||
|                                      aliases=None, links=None, | ||||
|                                      link_local_ips=None): | ||||
|                                      link_local_ips=None, driver_opt=None): | ||||
|         """ | ||||
|         Connect a container to a network. | ||||
| 
 | ||||
|  | @ -240,7 +240,8 @@ class NetworkApiMixin(object): | |||
|             "Container": container, | ||||
|             "EndpointConfig": self.create_endpoint_config( | ||||
|                 aliases=aliases, links=links, ipv4_address=ipv4_address, | ||||
|                 ipv6_address=ipv6_address, link_local_ips=link_local_ips | ||||
|                 ipv6_address=ipv6_address, link_local_ips=link_local_ips, | ||||
|                 driver_opt=driver_opt | ||||
|             ), | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,6 +46,8 @@ class Network(Model): | |||
|                 network, using the IPv6 protocol. Defaults to ``None``. | ||||
|             link_local_ips (:py:class:`list`): A list of link-local (IPv4/IPv6) | ||||
|                 addresses. | ||||
|             driver_opt (dict): A dictionary of options to provide to the | ||||
|                 network driver. Defaults to ``None``. | ||||
| 
 | ||||
|         Raises: | ||||
|             :py:class:`docker.errors.APIError` | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ from ..utils import normalize_links, version_lt | |||
| 
 | ||||
| class EndpointConfig(dict): | ||||
|     def __init__(self, version, aliases=None, links=None, ipv4_address=None, | ||||
|                  ipv6_address=None, link_local_ips=None): | ||||
|                  ipv6_address=None, link_local_ips=None, driver_opt=None): | ||||
|         if version_lt(version, '1.22'): | ||||
|             raise errors.InvalidVersion( | ||||
|                 'Endpoint config is not supported for API version < 1.22' | ||||
|  | @ -33,6 +33,15 @@ class EndpointConfig(dict): | |||
|         if ipam_config: | ||||
|             self['IPAMConfig'] = ipam_config | ||||
| 
 | ||||
|         if driver_opt: | ||||
|             if version_lt(version, '1.32'): | ||||
|                 raise errors.InvalidVersion( | ||||
|                     'DriverOpts is not supported for API version < 1.32' | ||||
|                 ) | ||||
|             if not isinstance(driver_opt, dict): | ||||
|                 raise TypeError('driver_opt must be a dictionary') | ||||
|             self['DriverOpts'] = driver_opt | ||||
| 
 | ||||
| 
 | ||||
| class NetworkingConfig(dict): | ||||
|     def __init__(self, endpoints_config=None): | ||||
|  |  | |||
|  | @ -275,6 +275,27 @@ class TestNetworks(BaseAPIIntegrationTest): | |||
|         assert 'LinkLocalIPs' in net_cfg['IPAMConfig'] | ||||
|         assert net_cfg['IPAMConfig']['LinkLocalIPs'] == ['169.254.8.8'] | ||||
| 
 | ||||
|     @requires_api_version('1.32') | ||||
|     def test_create_with_driveropt(self): | ||||
|         container = self.client.create_container( | ||||
|             TEST_IMG, 'top', | ||||
|             networking_config=self.client.create_networking_config( | ||||
|                 { | ||||
|                     'bridge': self.client.create_endpoint_config( | ||||
|                         driver_opt={'com.docker-py.setting': 'on'} | ||||
|                     ) | ||||
|                 } | ||||
|             ), | ||||
|             host_config=self.client.create_host_config(network_mode='bridge') | ||||
|         ) | ||||
|         self.tmp_containers.append(container) | ||||
|         self.client.start(container) | ||||
|         container_data = self.client.inspect_container(container) | ||||
|         net_cfg = container_data['NetworkSettings']['Networks']['bridge'] | ||||
|         assert 'DriverOpts' in net_cfg | ||||
|         assert 'com.docker-py.setting' in net_cfg['DriverOpts'] | ||||
|         assert net_cfg['DriverOpts']['com.docker-py.setting'] == 'on' | ||||
| 
 | ||||
|     @requires_api_version('1.22') | ||||
|     def test_create_with_links(self): | ||||
|         net_name, net_id = self.create_network() | ||||
|  |  | |||
|  | @ -136,7 +136,8 @@ class NetworkTest(BaseAPIClientTest): | |||
|                 container={'Id': container_id}, | ||||
|                 net_id=network_id, | ||||
|                 aliases=['foo', 'bar'], | ||||
|                 links=[('baz', 'quux')] | ||||
|                 links=[('baz', 'quux')], | ||||
|                 driver_opt={'com.docker-py.setting': 'yes'}, | ||||
|             ) | ||||
| 
 | ||||
|         assert post.call_args[0][0] == ( | ||||
|  | @ -148,6 +149,7 @@ class NetworkTest(BaseAPIClientTest): | |||
|             'EndpointConfig': { | ||||
|                 'Aliases': ['foo', 'bar'], | ||||
|                 'Links': ['baz:quux'], | ||||
|                 'DriverOpts': {'com.docker-py.setting': 'yes'}, | ||||
|             }, | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue