diff options
author | Christian Poessinger <christian@poessinger.com> | 2022-12-25 11:09:21 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2022-12-25 11:12:09 +0100 |
commit | a0d3c5702dfcf0ac0008039357a2e0e02c625235 (patch) | |
tree | 9516374016dfbf5d1cca74b6e8eeeb71dafb9317 | |
parent | 1ef7ba760bc7c21a754ef7cf3e5049ec88739b12 (diff) | |
download | vyos-1x-a0d3c5702dfcf0ac0008039357a2e0e02c625235.tar.gz vyos-1x-a0d3c5702dfcf0ac0008039357a2e0e02c625235.zip |
container: T2216: use defaultValue XML definition to define port protocol
Instead of hardcoding the default protocol as TCP in the Python script we shall
use the XML based defaultValue approach instead. This also automatically exports
the default to the CLI completion helper.
-rw-r--r-- | interface-definitions/container.xml.in | 11 | ||||
-rwxr-xr-x | src/conf_mode/container.py | 18 |
2 files changed, 22 insertions, 7 deletions
diff --git a/interface-definitions/container.xml.in b/interface-definitions/container.xml.in index d50039665..4bac305d1 100644 --- a/interface-definitions/container.xml.in +++ b/interface-definitions/container.xml.in @@ -207,14 +207,23 @@ </leafNode> <leafNode name="protocol"> <properties> - <help>Protocol tcp/udp</help> + <help>Transport protocol used for port mapping</help> <completionHelp> <list>tcp udp</list> </completionHelp> + <valueHelp> + <format>tcp</format> + <description>Use Transmission Control Protocol for given port</description> + </valueHelp> + <valueHelp> + <format>udp</format> + <description>Use User Datagram Protocol for given port</description> + </valueHelp> <constraint> <regex>(tcp|udp)</regex> </constraint> </properties> + <defaultValue>tcp</defaultValue> </leafNode> </children> </tagNode> diff --git a/src/conf_mode/container.py b/src/conf_mode/container.py index 48ba409a8..7567444db 100755 --- a/src/conf_mode/container.py +++ b/src/conf_mode/container.py @@ -73,9 +73,19 @@ def get_config(config=None): # Merge per-container default values if 'name' in container: default_values = defaults(base + ['name']) + if 'port' in default_values: + del default_values['port'] for name in container['name']: container['name'][name] = dict_merge(default_values, container['name'][name]) + # XXX: T2665: we can not safely rely on the defaults() when there are + # tagNodes in place, it is better to blend in the defaults manually. + if 'port' in container['name'][name]: + for port in container['name'][name]['port']: + default_values = defaults(base + ['name', 'port']) + container['name'][name]['port'][port] = dict_merge( + default_values, container['name'][name]['port'][port]) + # Delete container network, delete containers tmp = node_changed(conf, base + ['network']) if tmp: container.update({'network_remove' : tmp}) @@ -242,14 +252,10 @@ def generate_run_arguments(name, container_config): if 'port' in container_config: protocol = '' for portmap in container_config['port']: - if 'protocol' in container_config['port'][portmap]: - protocol = container_config['port'][portmap]['protocol'] - protocol = f'/{protocol}' - else: - protocol = '/tcp' + protocol = container_config['port'][portmap]['protocol'] sport = container_config['port'][portmap]['source'] dport = container_config['port'][portmap]['destination'] - port += f' -p {sport}:{dport}{protocol}' + port += f' -p {sport}:{dport}/{protocol}' # Bind volume volume = '' |