Skip to content

Commit fc86ab0

Browse files
authored
swarm: add support for DataPathPort on init (#2987)
Adds support for setting the UDP port used for VXLAN traffic between swarm nodes Signed-off-by: Chris Hand <[email protected]>
1 parent 45bf9f9 commit fc86ab0

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

docker/api/swarm.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def get_unlock_key(self):
8585
def init_swarm(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
8686
force_new_cluster=False, swarm_spec=None,
8787
default_addr_pool=None, subnet_size=None,
88-
data_path_addr=None):
88+
data_path_addr=None, data_path_port=None):
8989
"""
9090
Initialize a new Swarm using the current connected engine as the first
9191
node.
@@ -118,6 +118,9 @@ def init_swarm(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
118118
networks created from the default subnet pool. Default: None
119119
data_path_addr (string): Address or interface to use for data path
120120
traffic. For example, 192.168.1.1, or an interface, like eth0.
121+
data_path_port (int): Port number to use for data path traffic.
122+
Acceptable port range is 1024 to 49151. If set to ``None`` or
123+
0, the default port 4789 will be used. Default: None
121124
122125
Returns:
123126
(str): The ID of the created node.
@@ -166,6 +169,14 @@ def init_swarm(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
166169
)
167170
data['DataPathAddr'] = data_path_addr
168171

172+
if data_path_port is not None:
173+
if utils.version_lt(self._version, '1.40'):
174+
raise errors.InvalidVersion(
175+
'Data path port is only available for '
176+
'API version >= 1.40'
177+
)
178+
data['DataPathPort'] = data_path_port
179+
169180
response = self._post_json(url, data=data)
170181
return self._result(response, json=True)
171182

docker/models/swarm.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ def get_unlock_key(self):
3535

3636
def init(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
3737
force_new_cluster=False, default_addr_pool=None,
38-
subnet_size=None, data_path_addr=None, **kwargs):
38+
subnet_size=None, data_path_addr=None, data_path_port=None,
39+
**kwargs):
3940
"""
4041
Initialize a new swarm on this Engine.
4142
@@ -65,6 +66,9 @@ def init(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
6566
networks created from the default subnet pool. Default: None
6667
data_path_addr (string): Address or interface to use for data path
6768
traffic. For example, 192.168.1.1, or an interface, like eth0.
69+
data_path_port (int): Port number to use for data path traffic.
70+
Acceptable port range is 1024 to 49151. If set to ``None`` or
71+
0, the default port 4789 will be used. Default: None
6872
task_history_retention_limit (int): Maximum number of tasks
6973
history stored.
7074
snapshot_interval (int): Number of logs entries between snapshot.
@@ -121,6 +125,7 @@ def init(self, advertise_addr=None, listen_addr='0.0.0.0:2377',
121125
'default_addr_pool': default_addr_pool,
122126
'subnet_size': subnet_size,
123127
'data_path_addr': data_path_addr,
128+
'data_path_port': data_path_port,
124129
}
125130
init_kwargs['swarm_spec'] = self.client.api.create_swarm_spec(**kwargs)
126131
node_id = self.client.api.init_swarm(**init_kwargs)

tests/integration/api_swarm_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,3 +253,8 @@ def test_rotate_manager_unlock_key(self):
253253
@pytest.mark.xfail(reason='Can fail if eth0 has multiple IP addresses')
254254
def test_init_swarm_data_path_addr(self):
255255
assert self.init_swarm(data_path_addr='eth0')
256+
257+
@requires_api_version('1.40')
258+
def test_init_swarm_data_path_port(self):
259+
assert self.init_swarm(data_path_port=4242)
260+
assert self.client.inspect_swarm()['DataPathPort'] == 4242

0 commit comments

Comments
 (0)