summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-03-28 21:53:07 +0200
committerChristian Breunig <christian@breunig.cc>2023-03-29 21:07:55 +0200
commit6f81d7ab1fe3f7ae794dd2b1d55533890b0db6a9 (patch)
treed793c70592792ddfd87a787b38cf033cf2cdc6ff /src
parent05ecf032c61953f71c208c184fb77480323bf2a6 (diff)
downloadvyos-1x-6f81d7ab1fe3f7ae794dd2b1d55533890b0db6a9.tar.gz
vyos-1x-6f81d7ab1fe3f7ae794dd2b1d55533890b0db6a9.zip
container: T5047: restart only containers that changed
By default VyOS used to restart all containers it managed. This makes no sense as it will be service disrupting. Instead only restart the containers that had changes on the CLI beeing made. (cherry picked from commit 52e51ffbb84996aee9d5b94eebf64589ead31225)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/container.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/conf_mode/container.py b/src/conf_mode/container.py
index 10e9e9213..53e577310 100755
--- a/src/conf_mode/container.py
+++ b/src/conf_mode/container.py
@@ -25,8 +25,10 @@ from vyos.base import Warning
from vyos.config import Config
from vyos.configdict import dict_merge
from vyos.configdict import node_changed
+from vyos.configdict import is_node_changed
from vyos.util import call
from vyos.util import cmd
+from vyos.util import dict_search
from vyos.util import run
from vyos.util import write_file
from vyos.template import inc_ip
@@ -80,6 +82,15 @@ def get_config(config=None):
for name in container['name']:
container['name'][name] = dict_merge(default_values, container['name'][name])
+ # T5047: Any container related configuration changed? We only
+ # wan't to restart the required containers and not all of them ...
+ tmp = is_node_changed(conf, base + ['name', name])
+ if tmp:
+ if 'container_restart' not in container:
+ container['container_restart'] = [name]
+ else:
+ container['container_restart'].append(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]:
@@ -412,7 +423,8 @@ def apply(container):
os.unlink(file_path)
continue
- cmd(f'systemctl restart vyos-container-{name}.service')
+ if name in dict_search('container_restart', container):
+ cmd(f'systemctl restart vyos-container-{name}.service')
if disabled_new:
call('systemctl daemon-reload')