summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2023-08-23 11:29:50 +0000
committerViacheslav Hletenko <v.gletenko@vyos.io>2023-08-23 11:29:50 +0000
commit7822d4f7a22cb316ac10f199bdb1836782ee2c6e (patch)
tree083b25a16965a22feb858f2880846d5324c8a60b
parent8c7fbec24f8bfe064d8ad804951f5ae59b54748f (diff)
downloadvyos-1x-7822d4f7a22cb316ac10f199bdb1836782ee2c6e.tar.gz
vyos-1x-7822d4f7a22cb316ac10f199bdb1836782ee2c6e.zip
T5463: Container allow publish listen-addresses
Ability to publish multiple IP/IPv6 addresses for container set container name c1 port web destination '80' set container name c1 port web listen-address '192.0.2.1' set container name c1 port web listen-address '2001:db8:1111::1' set container name c1 port web source '8080' --publish 192.0.2.1:8080:80/tcp --publish [2001:db8:1111::1]:8080:80/tcp
-rw-r--r--interface-definitions/container.xml.in1
-rwxr-xr-xsrc/conf_mode/container.py9
2 files changed, 10 insertions, 0 deletions
diff --git a/interface-definitions/container.xml.in b/interface-definitions/container.xml.in
index 6d2eb18d0..baab6104f 100644
--- a/interface-definitions/container.xml.in
+++ b/interface-definitions/container.xml.in
@@ -213,6 +213,7 @@
<help>Publish port to the container</help>
</properties>
<children>
+ #include <include/listen-address.xml.i>
<leafNode name="source">
<properties>
<help>Source host port</help>
diff --git a/src/conf_mode/container.py b/src/conf_mode/container.py
index ed7cc809c..478868a9a 100755
--- a/src/conf_mode/container.py
+++ b/src/conf_mode/container.py
@@ -33,6 +33,7 @@ from vyos.utils.process import call
from vyos.utils.process import cmd
from vyos.utils.process import run
from vyos.utils.process import rc_cmd
+from vyos.template import bracketize_ipv6
from vyos.template import inc_ip
from vyos.template import is_ipv4
from vyos.template import is_ipv6
@@ -280,6 +281,14 @@ def generate_run_arguments(name, container_config):
protocol = container_config['port'][portmap]['protocol']
sport = container_config['port'][portmap]['source']
dport = container_config['port'][portmap]['destination']
+ listen_addresses = container_config['port'][portmap].get('listen_address', [])
+
+ # If listen_addresses is not empty, include them in the publish command
+ if listen_addresses:
+ for listen_address in listen_addresses:
+ port += f' --publish {bracketize_ipv6(listen_address)}:{sport}:{dport}/{protocol}'
+ else:
+ # If listen_addresses is empty, just include the standard publish command
port += f' --publish {sport}:{dport}/{protocol}'
# Bind volume