|
@@ -4,6 +4,8 @@ from __future__ import unicode_literals
|
|
|
import logging
|
|
|
|
|
|
from docker.errors import NotFound
|
|
|
+from docker.utils import create_ipam_config
|
|
|
+from docker.utils import create_ipam_pool
|
|
|
|
|
|
from .config import ConfigurationError
|
|
|
|
|
@@ -13,12 +15,13 @@ log = logging.getLogger(__name__)
|
|
|
|
|
|
class Network(object):
|
|
|
def __init__(self, client, project, name, driver=None, driver_opts=None,
|
|
|
- external_name=None):
|
|
|
+ ipam=None, external_name=None):
|
|
|
self.client = client
|
|
|
self.project = project
|
|
|
self.name = name
|
|
|
self.driver = driver
|
|
|
self.driver_opts = driver_opts
|
|
|
+ self.ipam = create_ipam_config_from_dict(ipam)
|
|
|
self.external_name = external_name
|
|
|
|
|
|
def ensure(self):
|
|
@@ -61,7 +64,10 @@ class Network(object):
|
|
|
)
|
|
|
|
|
|
self.client.create_network(
|
|
|
- self.full_name, self.driver, self.driver_opts
|
|
|
+ name=self.full_name,
|
|
|
+ driver=self.driver,
|
|
|
+ options=self.driver_opts,
|
|
|
+ ipam=self.ipam,
|
|
|
)
|
|
|
|
|
|
def remove(self):
|
|
@@ -80,3 +86,21 @@ class Network(object):
|
|
|
if self.external_name:
|
|
|
return self.external_name
|
|
|
return '{0}_{1}'.format(self.project, self.name)
|
|
|
+
|
|
|
+
|
|
|
+def create_ipam_config_from_dict(ipam_dict):
|
|
|
+ if not ipam_dict:
|
|
|
+ return None
|
|
|
+
|
|
|
+ return create_ipam_config(
|
|
|
+ driver=ipam_dict.get('driver'),
|
|
|
+ pool_configs=[
|
|
|
+ create_ipam_pool(
|
|
|
+ subnet=config.get('subnet'),
|
|
|
+ iprange=config.get('ip_range'),
|
|
|
+ gateway=config.get('gateway'),
|
|
|
+ aux_addresses=config.get('aux_addresses'),
|
|
|
+ )
|
|
|
+ for config in ipam_dict.get('config', [])
|
|
|
+ ],
|
|
|
+ )
|