summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2025-08-14 15:09:34 +0100
committerGitHub <noreply@github.com>2025-08-14 15:09:34 +0100
commit4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55 (patch)
tree66e6a2f4f47304ba5db6d670f51621d380ddc073 /src
parent471441d9d6541401c5236399da0b7a56a7dd0ead (diff)
parentc140f827f3117609908a3a18034027d3d78149ac (diff)
downloadvyos-1x-4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55.tar.gz
vyos-1x-4c8f5f0e0b7ab090e7bbba1c73f1dc17b5311a55.zip
Merge pull request #4657 from jestabro/sync-config-on-save
T7709: add explicit sync and atomic write on config file save
Diffstat (limited to 'src')
-rwxr-xr-xsrc/helpers/vyos-save-config.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/helpers/vyos-save-config.py b/src/helpers/vyos-save-config.py
index adf62b71d..fa1f5625d 100755
--- a/src/helpers/vyos-save-config.py
+++ b/src/helpers/vyos-save-config.py
@@ -23,15 +23,18 @@ from argparse import ArgumentParser
from vyos.config import Config
from vyos.remote import urlc
-from vyos.component_version import add_system_version
+from vyos.component_version import add_system_version_string
from vyos.defaults import directories
+from vyos.utils.file import write_file_atomic
DEFAULT_CONFIG_PATH = os.path.join(directories['config'], 'config.boot')
remote_save = None
parser = ArgumentParser(description='Save configuration')
parser.add_argument('file', type=str, nargs='?', help='Save configuration to file')
-parser.add_argument('--write-json-file', type=str, help='Save JSON of configuration to file')
+parser.add_argument(
+ '--write-json-file', type=str, help='Save JSON of configuration to file'
+)
args = parser.parse_args()
file = args.file
json_file = args.write_json_file
@@ -56,7 +59,14 @@ write_file = save_file if remote_save is None else NamedTemporaryFile(delete=Fal
# config_tree is None before boot configuration is complete;
# automated saves should check boot_configuration_complete
config_str = None if ct is None else ct.to_string()
-add_system_version(config_str, write_file)
+versioned_config_str = add_system_version_string(config_str)
+
+try:
+ with write_file_atomic(write_file) as f:
+ f.write(versioned_config_str)
+except OSError as e:
+ print(f'failed to write config file: {e}')
+ sys.exit(1)
if json_file is not None and ct is not None:
try: